c++复制构造函数错误
C++ Copy Constructor Error
假设我有以下一段代码:
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&obj){…}
,其中C是一个类,但在这种情况下,我需要C1的构造函数的其他参数。现在,我的问题是,我做错了什么,或者我该怎么做才能使复制构造函数正常工作?
第二个构造函数不是复制构造函数。只有当构造函数可以用一个实参(复制对象)调用时,它才是复制构造函数。
为什么不:
C2(const C2 &a):C1(static_cast<const C1&>(a)), z(a.z)
{
cout<<"cpy constr C2"<<endl;
}
注意
- 这个复制构造函数实际上与编译器相同生成一个。
-
static_cast
是不必要的(我把它放在清晰)。
相关文章:
- "error: no matching function for call to"构造函数错误
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 模板,函数使用错误的构造函数来复制我的对象
- C++ OpenCV 卡尔曼滤波器构造函数错误
- 不命名构造函数和析构函数上的类型错误
- 处理简单 cpp 类构造函数中的错误
- 类和构造函数中的函数根本不起作用,并且不返回任何错误
- 链接器错误:无法解析构造函数
- 当我尝试通过构造函数分配 char 数组时出现错误
- 没有参数的构造函数给我错误
- 使用复制构造函数的程序输出错误
- 默认构造函数上的分段错误
- 错误: 无效使用非静态数据成员"应用程序::应用程序构造函数"
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- 带有 QWidget 的分段错误构造函数.Qt/C++
- C++错误构造函数参数
- 错误:构造函数未命名类型
- 错误:构造函数在此上下文中受到保护
- 没有匹配的函数错误C++构造函数
- 错误:构造函数的多个定义