类 对象 构造函数 析构函数(有且仅有一个) 复制构造函数(必须有) 其中析构函数 复制构造函数 若自己不写系统自动生成且调用
对你没看错就这些哈哈 (注意复制构造函数 算了我还是写一下)
哪里会用到复制构造函数?(不知道考不考嘿嘿)
1.调用date(const date&x)(复制构造)函数时
2.用已知的(已经初始化的)对象给一个未知的(正在创建的,还未初始化)对象赋值时
3.在date类的函数里return一个对象初始化匿名函数时(2的容易遗漏的情况)
4.对象是一个函数的实参传值给函数形参时
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;//或 using std :: cout;using std :: cin;
class date{//类
public:
date(int a,int b,int c);//构造函数1
date(int a);//构造函数2,
void print(){
cout << "Y: " << y << " M: " << m << " D: " << d << '\n';
}
date(const date&x);//复制构造函数,传的参数只能初始化一次,若在此定义则函数里无需
int y,m,d;//private
~date(){//析构函数
cout << "byebye : " << y << ' ' << m << ' ' << d << '\n';
}
};
date :: date(const date&x){ //复制构造函数
y = x.y,m = x.m,d = x.d;
cout << "im copy" << '\n';
}
date :: date(int a,int b,int c) : y(a),m(b),d(c){//构造函数1
cout << "fuzhi1" << '\n';
}
date :: date(int a = 2000) : y(a){ //构造函数2,传的参数a只能初始化一次,且初始化优先于函数里的赋值操作
m = 10,d = 1;
cout << "fuzhi2" << '\n';
}
date fun(date d){//copy
date t;//若改成date t = d;则copy一次
t = d;
return t;//copy
}
int main(){
date date1(2020,9,13),date2(2000,10,1);
date date3(date1);//复制构造函数date1到date3 //copy
date2 = fun(date3);
cout << "date1 : ";
date1.print();
cout << "date2 : ";
date2.print();
cout << "date3: ";
date3.print();
return 0;
}