处理私有默认构造函数
Dealing with private default constructor
我正在使用具有 class X
的库,其默认构造函数被声明为私有。
注意class X
支持赋值运算符。
我想实现一个 class 其中包括 class X.
class MyClass
{
X x;
Y y;
Z z;
public:
MyClass(X xv, Y yv, Z zv);
};
我实现这个 class 的目的是我必须将这个三元组值插入到列表中。
但我无法实现此 class,因为 X
的默认构造函数被声明为私有,而且我不喜欢干涉 X
的代码作为休息的库函数依赖于它。
我可以利用 class X
有一个赋值运算符这一事实来实现我想要的吗?谢谢。
编辑 1:没有其他可用的构造函数 class。
几乎可以肯定有一个复制构造函数。 (如果 class 有赋值运算符但没有复制构造函数,那将是非常奇怪的。)如果 class 作者没有声明复制构造函数,编译器将为它们创建一个。
你的问题是你在写:
MyClass::MyClass(X xv, Y yv, Z zv)
// x, y, z default constructed here.
{
x = xv; y = yv; z = zv;
}
您需要的是直接复制构造 x,y,z(查找 "initializer list"。因此:
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)
{
}
(当然还要更改声明)
我正在使用具有 class X
的库,其默认构造函数被声明为私有。
注意class X
支持赋值运算符。
我想实现一个 class 其中包括 class X.
class MyClass
{
X x;
Y y;
Z z;
public:
MyClass(X xv, Y yv, Z zv);
};
我实现这个 class 的目的是我必须将这个三元组值插入到列表中。
但我无法实现此 class,因为 X
的默认构造函数被声明为私有,而且我不喜欢干涉 X
的代码作为休息的库函数依赖于它。
我可以利用 class X
有一个赋值运算符这一事实来实现我想要的吗?谢谢。
编辑 1:没有其他可用的构造函数 class。
几乎可以肯定有一个复制构造函数。 (如果 class 有赋值运算符但没有复制构造函数,那将是非常奇怪的。)如果 class 作者没有声明复制构造函数,编译器将为它们创建一个。
你的问题是你在写:
MyClass::MyClass(X xv, Y yv, Z zv)
// x, y, z default constructed here.
{
x = xv; y = yv; z = zv;
}
您需要的是直接复制构造 x,y,z(查找 "initializer list"。因此:
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)
{
}
(当然还要更改声明)