C++笔记 2023.4.25

目录

拷贝构造函数(为自定义类型深拷贝而生)

C++规定

传值调用陷入无限循环

解决传值问题

浅拷贝

深拷贝


拷贝构造函数(为自定义类型深拷贝而生)

Date d1(2023,1,1);

Date d2(d1);

C++规定

传值

内置类型,直接拷贝

自定义类型,必须调用拷贝构造完成拷贝

从下图,我们可以看到func(date x),传的是自定义类型的值,因此我们要先去调用拷贝构造函数

传值调用陷入无限循环

传值调用的话,自定义类型要先拷贝构造,调用拷贝构造就需要传参,就又形成传值调用,自定义类型要先拷贝构造

解决传值问题

 这种情况就需要我利用指针或者传引用解决问题,

当然还可以在d前面加一个const,

const Date&d

看到我每次都认为拷贝构造是不需要自己写了,让它自己生成就行,OK,那直接寄了

浅拷贝

同一块空间不能析构两次

如果有开辟空间的话,拷贝会把原开辟的地址赋给拷贝对象,而不是把值赋予,然后导致两个指针指向同一块空间

因为是栈要符合后进先出,所以st2会先被析构,再析构st1。

深拷贝

利用memcpy实现拷贝值

最后我们再回到刚开始的问题,为什么不要传值拷贝,因为传值,直接赋值,析构多次,会导致程序直接崩溃,并且一个改变,会影响另一个。

什么时候需要自己写

1.45懵中懵

成员变量是私有的,在类里面可以访问,类外面无法访问

在类里面不受访问限定符限制

为什么内置类型可以直接比较,自定义类型不可以直接比较?

因为自定义类型是祖师爷自己定义的,所以知道怎么比较,但是自定义类型是你自己定义的,所以编译器不知道怎么比较

函数运算符重载可以显示调用

<<流插入运算符 优先级大于 >大于运算符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值