1.拷贝构造函数的定义
首先定义一个Student类:
Class Student{
public:
//默认构造函数
Student(){cout<<"Student\n";}
private:
string m_strName;
};
下面实例化对象:
Student stu1; //实例化时,调用默认构造函数,打印Student
Student stu2=stu1;
Student stu3(stu1);
实例化完成后,运行代码,按照预想应该打印三个Student,但是只打印出了一个,这是为什么呢?原因就是,将stu2和stu3实例化为已有的stu1时,自动调用的不是默认构造函数,而是拷贝构造函数。
拷贝构造函数可以自定义,若无自定义的拷贝构造函数时,系统将自动生成。
当采用直接初始化或复制初始化实例化对象时,系统自动调用拷贝构造函数。
拷贝构造函数的定义形式: 类名(const 类名 &变量名),如Student(const Student &stu){ }
2.构造函数总结
构造函数:有参构造函数: 参数有默认值(所有参数都有默认值时即为默认构造函数)
参数无默认值
无参构造函数: 都是默认构造函数
系统自动生成的函数: 普通构造函数
拷贝构造函数
普通构造函数和拷贝构造函数后面都可以接初始化列表
3.析构函数
析构函数是对象被销毁时自动调用的函数,可以自己定义,若没有自定义的析构函数,系统将自动生成。析构函数无返回值,无参数,不能重载。
定义形式:~类名(){} 如:~Student() { }
对象生命化历程:
申请内存——>初始化列表——>构造函数——>参与运算——>析构函数——>释放内存
4.总结: