拷贝构造函数里能调用 private 成员变量吗?
解答:拷贝构造函数其时就是一个特殊的构造函数,操作的还是自己类的成员变量,所以不受 private 的限制。
一个类中可以存在多于一个的拷贝构造函数吗?
解答:类中可以存在超过一个拷贝构造函数。
例子:
class X { public: X(const X&); // const 的拷贝构造 X(X&); // 非 const 的拷贝构造 };
调用拷贝构造函数的情形
1. 一个对象作为函数参数,以值传递的方式传入函数体
例如下面案例
#include<iostream> using namespace std; class A { public: A() {};//构造函数 A(A&a)//复制构造函数 { cout << "Copy constructer called" << endl; } }; void Func(A a)//普通函数 { } int main() { A b; Func(b);//此语句相当于是将b复制给Func(a)中的a,导致调用复制构造函数 return 0; }
2. 一个对象作为函数返回值,以值传递的方式从函数返回
例如下面案例,Func函数得到的是返回值a
#include<iostream> using namespace std; class A { public: int v=0; A(int i) { v = i; };//构造函数 A(A&a)//复制构造函数 { cout << "Copy constructer called" << endl; } }; A a(4); A Func()//普通函数 { return a; } int main() { cout << Func().v << endl;//此语句中的Func()是一个类A的对象,但是不是a,只是用a初始化。 return 0; }
3. 一个对象用于给另外一个对象进行初始化(常称为赋值初始化)
例如这样就会调用
Complex c1(c2); Complex c1=c2;
这样就不会调用(这是浅复制)
Complex c1,c2; c1=c2;