拷贝构造函数(复制构造函数)

运行:对象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;

 

posted @ 2018-06-27 10:21  Jary霸  阅读(408)  评论(0编辑  收藏  举报