C++特殊成员函数

C++自动提供了下面这些成员函数
1、默认构造函数,如果没有定义构造函数;
2、默认析构函数,如果没有定义;
3、复制构造函数,如果没有定义;
4、赋值构造函数,如果没有定义;
5、地址运算符,如果没有定义;
隐式地址运算符返回调用对象的地址(即this指针的值)。
C++11提供了另外两个特殊成员函数:移动构造函数和移动赋值运算符。
1)、复制构造函数
复制构造函数用于将一个对象复制到新创建的对象中。也就是说,它用于初始化过程中(包括值传递参数),而不是常规的复制过程中。原型如下:
Class_name(const Class_name &);
复制构造函数,需要注意的亮点:何时调用和有何功能:
何时调用:
新建一个对象并将其初始化为同类现有对象时,复制构造函数都将被调用,这在很多情况下都可能发生,最常见的是将新对象显示的初始化为现有的对象。例如假设motto是一个StringBad对象,则下面4种声明都将调用复制构造函数。
StringBad ditto(motto);
StringBad metto = motto;
StringBad also = StringBad(motto);
StringBad * pStringBad = new String(motto);
由于按值传递对象将调用构造函数,因此应该按引用传递对象。这样可以节省调用构造函数的时间以及存储对象的空间。
默认的复制构造函数的功能:
默认的复制构造函数逐个复制非静态成员(成员复制也成为浅复制),复制的是成员的值。
如果类中包含了使用new初始化的指针成员,应当定义一个复制构造函数,以复制构造指向的数据,而不是指针,这被称为深度复制。复制的另一种形式(成员复制或浅复制)只是复制指针值。浅复制仅浅浅的复制指针信息,而不会深入的挖掘以复制指针引用的结构。
复制运算符
C++允许类对象赋值,这是通过自动为类重载赋值运算符实现的。这种运算符的原型如下:
Class_name & Class_name::operator=(const Class_name &);
它接受并返回一个指向类对象的引用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值