定义:复制构造函数用于将一个对象复制到一个新创建的对象中, 也就是说他用于初始化过程,而不是常规的赋值过程(常使用赋值操作符)
原型:
Class_name (const Class_name & );
*传入函数的是指向类对象的引用常量
功能:
逐个复制非静态成员复制的是成员的值,指针的话就直接复制指针的值(新旧对象共享同一个指针指向的值,这常常会引起问题,使用深度复制即可,在复制构造函数中使用NEW,再将指针指向的值赋给新指针)
使用情况:
最经常用于新建一个对象并将它初始化为类现有的对象时
EX:
1,class_name A(B);
2,class_name A = B;
以上两种根据具体实现的不同可能有两种情况,一种是使用复制构造函数直接创建A,另一种是用复制构造函数创建一个临时对象,然后将临时对象的内容赋给A。//在笔者电脑上并未调用复制操作符
3, class_name A = class_name(B);
4, class_name *A = new class_name (B);//使用复制构造函数初始化一个匿名对象,然后将它的地址赋给A
函数进行值传递的时候
void FUN(class_name A);
返回函数值的时候
不一定会调用拷贝构造函数,这要看编译器的工作原理,VC6.0调用复制构造函数产生临时变量,mingw则不会
下面看一个笔试常考的题目
- #include <iostream>
- using namespace std;
- class base
- {
- private:
- int a;
- public:
- base(){cout << "Base constructed function" << endl; }
- base(const base & b) {cout << "Base copy constructor function" << endl;}
- ~base(){cout << "Base destruct function" << endl;}
- };
- class contain
- {
- private:
- base b_;
- public:
- contain(){cout << "contain constructed function1" << endl;}
- contain(base &b):b_(b){cout << "contain constructed function1" << endl;};
- ~contain(){cout << "contain destruct funtion" << endl;}
- };
- void main ()
- {
- base b;
- contain a(b);
- }
上述情况也是调用复制构造函数,所以输出应该: Base constructed function
Base copy constructor function
contain constructed function1
contain destruct funtion
Base destruct function
Base destruct function
Press any key to continue