拷贝构造函数(复制构造函数)
运行:对象A=对象B时,系统需要调用拷贝构造函数,如果程序员没写,则调用默认的拷贝构造函数。
默认的拷贝构造函数利用浅拷贝方式,它的样子是:A(const A & a){...}
浅拷贝:拷贝的时候,两个指针指向同一个区域:
char* str1 = "HelloWorld"; char* str2 = str1;
深拷贝:拷贝的时候,两个指针指向不同的区域,只不过区域的内容是一样的:
//深度拷贝 int a = 8; int *p = new int; *p = a;
.h定义拷贝构造函数:
Teacher(const Teacher &a); // 手写拷贝构造函数,注意这个参数是确定的,不能重载
.cpp写拷贝构造函数
Teacher::Teacher(const Teacher &a) { // 拷贝构造函数
cout << "我是拷贝构造函数" << endl;
count = a.count; // 浅拷贝:直接赋值
p=new int[count]; // 深拷贝:对于指针来说不直接赋值,而是通过先开辟内存空间,只把内存单元里面的内容弄成一样的就好了,而不是用两个指针指向同一个区域
for(int i=0 ; i<count ; i++){
p[i]=a.p[i];
}
};
主函数通过对象实例化调用拷贝构造函数:
Teacher t3 = t1; // 如果是赋对象,则会调用拷贝构造函数,不自己写的话会默认有
Teacher t4(t1); // 这样也会调用拷贝构造函数,等价于:Teacher t4=t1;