词条 | 初始化器 |
释义 | Time(int a,int b) :x1(a),x2(b) //初始化x1 x2 调用的是(可能是复制,要看a的类型是否与x1相同)构造函数 这样初始化在Time的对象构造完成之前 { x1=a; //这样的方式 Time的对象已经构造起来了 x2=b; } 引用:“如int a(3);和int a=3;一样都是将a初始化为3.我觉得int a(3);应该调用的int类的复制构造函数。” 可以这么理解 但实际上内部类型是没有这些构造函数的。C++为了方便让它们支持这样的操作 如果x1,x2和a,b的类型一样,是不是调用的复制构造函数。那不一样的时候是如何调用的呢。 你说内部类型没有复制构造函数。那他是怎么实现int a(3)的呢。 int和其他类型不能被看做和自定义类一样的类吗!还是他们比较特殊。 像自定义一样 都调用(默认)复制构造函数 自定义类不显示定义复制构造函数时,系统会自动生成一个默认的复制构造函数 int的类型你也可以这么理解 #include <iostream> using namespace std; class B { int n; public: B(int _n=0) { n=_n; } B(B& o) { cout<<"Call B的复制构造函数:对象"<<o.n<<endl; } }; class A { B obj1; B obj2; public: A(): obj2(B(2)), obj1(B(1)) //列表与变量声明的顺序无关 { } A(A& o) { cout<<"Call A的复制构造函数"<<endl; } }; int main() { A obj; A obj1(obj); //调用复制构造函数 与 int a(3)比较 A obj2 = obj; //调用复制构造函数 与 int a=3 比较 obj1 = obj2; //调用赋值函数 与 a=3 比较 return 0; |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。