目录
拷贝构造函数(为自定义类型深拷贝而生)
Date d1(2023,1,1);
Date d2(d1);
C++规定
传值
内置类型,直接拷贝
自定义类型,必须调用拷贝构造完成拷贝
从下图,我们可以看到func(date x),传的是自定义类型的值,因此我们要先去调用拷贝构造函数
传值调用陷入无限循环
传值调用的话,自定义类型要先拷贝构造,调用拷贝构造就需要传参,就又形成传值调用,自定义类型要先拷贝构造
解决传值问题
这种情况就需要我利用指针或者传引用解决问题,
当然还可以在d前面加一个const,
const Date&d
看到我每次都认为拷贝构造是不需要自己写了,让它自己生成就行,OK,那直接寄了
浅拷贝
同一块空间不能析构两次
如果有开辟空间的话,拷贝会把原开辟的地址赋给拷贝对象,而不是把值赋予,然后导致两个指针指向同一块空间
因为是栈要符合后进先出,所以st2会先被析构,再析构st1。
深拷贝
利用memcpy实现拷贝值
最后我们再回到刚开始的问题,为什么不要传值拷贝,因为传值,直接赋值,析构多次,会导致程序直接崩溃,并且一个改变,会影响另一个。
什么时候需要自己写
1.45懵中懵
成员变量是私有的,在类里面可以访问,类外面无法访问
在类里面不受访问限定符限制
为什么内置类型可以直接比较,自定义类型不可以直接比较?
因为自定义类型是祖师爷自己定义的,所以知道怎么比较,但是自定义类型是你自己定义的,所以编译器不知道怎么比较
函数运算符重载可以显示调用
<<流插入运算符 优先级大于 >大于运算符