说我有以下代码:
class C1{
int x, y;
public:
C1(int a, int b):x(a),y(b)
{
cout<<"const normal C1"<<endl;
}
};
class C2 : protected C1
{
int x, y;
const int z;
public:
C2(int u, int v, int w):C1(u,v),z(w)
{
cout<<"constr normal C2"<<endl;
}
C2(const C2 &a,int u, int v, int w):C1(u,v),z(w)
{
cout<<"cpy constr C2"<<endl;
}
};
int main(){
C2 a(2,3,4);
C2 b=a;
}
当我创建对象b时,应该调用复制构造函数而不是普通构造函数,但事实并非如此。现在我知道复制构造函数应该看起来像
C(C const&amp; obj){...}
其中C是一个类,但在这种情况下,我需要C1的构造函数的其他参数。现在,我的问题是,我做错了什么,或者我能做些什么才能使复制构造函数正常工作?
答案 0 :(得分:4)
您的第二个构造函数不是复制构造函数。构造函数只是一个复制构造函数,如果它可以用一个参数调用,该参数是要复制的对象。
为什么不:
C2(const C2 &a):C1(static_cast<const C1&>(a)), z(a.z)
{
cout<<"cpy constr C2"<<endl;
}
请注意
static_cast
是不必要的(我把它放进去了
清晰度)。