拷贝构造函数就是进行对象拷贝复制的函数。
拷贝构造函数也是一种构造函数。它用同类型的对象来初始化新创建的对象。其唯一的形参是const类型&,此函数也由系统自动调用。
拷贝构造函数也可以理解为构造函数的一种重载。
拷贝构造函数的定义方式一:
class 类名 { public: // 类的内部实现拷贝构造函数,内联函数 类名(const 类名 &参数) { // 初始化代码 } }
拷贝构造函数的定义方式二:
class 类名 { public: // 类的内部声明 类名(const 类名 &参数); } // 类的外部实现函数 类名::类名(const 类名 &参数) { // 初始化代码 }
拷贝构造函数的特点:
1、拷贝构造函数名与类名相同,无返回值。
2、它是类的成员函数,可以直接访问类的所有数据成员。
3、在列的内部定义是内联函数。
4、类如果没有定义类的来拷贝构造函数,编译系统就会自动生成一个默认的拷贝构造函数(简单的值拷贝),一旦开发者编写了拷贝构造函数,编译系统将不再提供。
三种情况需要调用拷贝构造函数
1、定义一个对象时,用另外一个对象进行初始化(常称为赋值初始化)
2、一个对象作为函数参数,以值传递的方式传入函数体
3、一个对象作为函数返回值,以值传递的方式从函数返回
#include <iostream> using namespace std; class A { public: A(int a1) { this->a = a1; cout << "调用构造函数" << endl; } A(const A &a1) { this->a = a1.a; cout << "调用拷贝构造函数" << endl; } private: int a; }; int main(void) { // 调用构造函数据 A a(123); // 调用拷贝构造函数 A b(a); // 调用拷贝构造函数 A c = b; }