我正在使用一个具有class X
的库,其默认构造函数被声明为private。
请注意class X
支持赋值运算符。
我想实现一个包含类X的类。
class MyClass
{
X x;
Y y;
Z z;
public:
MyClass(X xv, Y yv, Z zv);
};
我实现这个课程的目的是我将这个三元组值插入一个列表。
但我无法实现此类,因为X
的默认构造函数被声明为私有,我也不希望干扰X
的代码作为其余部分。库函数依赖于它。
我可以使用class X
具有赋值运算符的事实来实现我想要的吗?感谢。
编辑1:该类没有其他构造函数。
答案 0 :(得分:1)
几乎可以肯定有一个复制构造函数。 (这将是一个非常奇怪的类,它有一个赋值运算符,但不是一个复制构造函数。)如果类作者没有声明一个复制构造函数,编译器将为它们创建一个。
你的问题是你在写:
MyClass::MyClass(X xv, Y yv, Z zv)
// x, y, z default constructed here.
{
x = xv; y = yv; z = zv;
}
你需要的是直接复制构造x,y,z(查找“初始化列表”。所以:
MyClass::MyClass(X xv, Y yv, Z zv)
: x(xv), y(yv), z(zv)
{
}
话虽如此,你通过值传递xv等。把它写成:更加自然:
MyClass::MyClass(const X& xv, const Y& yv, const Z& zv)
: x(xv), y(yv), z(zv)
{
}
(当然也改变声明)