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 &);
它接受并返回一个指向类对象的引用。

你可能感兴趣的:(c++)