如何使用单个构造函数仅使用 C++ 创建以下对象:
A x;
A y("Hello", 7);
A z(3, "Hello", 2.4);
A 类应该有一个构造函数来适应对象 x、y 和 z 的创建。上面指定的 3 行不允许更改。
如何使用单个构造函数仅使用 C++ 创建以下对象:
A x;
A y("Hello", 7);
A z(3, "Hello", 2.4);
A 类应该有一个构造函数来适应对象 x、y 和 z 的创建。上面指定的 3 行不允许更改。
你不能(而不应该!)有一个构造函数来创建所有这些对象。
由于这个原因,您可以拥有可以采用不同参数的构造函数。
要问的重要问题是:
您到底想达到什么目标?这有什么需要?
也许您正试图以错误的方式解决问题。如果你能提供一些细节我们可以帮助你更好。
呸!!!!
无论如何,如果我被迫(例如,假设这是一个家庭作业问题),我会使用某种变体:
class Variant {
public:
Variant();
Variant( int );
Variant( double );
Variant( const char * );
~Variant();
private:
union data { ... };
enum type { ... };
};
然后在我可怕的单个构造函数中使用它,以及允许空构造的默认参数。
A::A( Variant p1 = Variant(), Variant p2 = Variant(), Variant p3 = Variant() );
与c++11
:
#include <iostream>
struct A
{
template<typename... Args> A(Args&&... x)
{
std::cout << "construct A\n";
}
};
int main()
{
A x;
A y("Hello", 7);
A z(3, "Hello", 2.4);
return 0;
}
在 C++03 中,您可以使用初始化函数:
class A
{
public:
A(int x, const char* y, double z)
{
Init(x, y, z);
}
A(const char* y, int x)
{
Init(x, y);
}
A()
{
Init();
}
private:
void Init(int x = 0, const char* y = 0, double z = 0)
{
}
};
在 C++11 中,您可以使用构造函数委托:
class A
{
public:
A(int x, const char* y, double z)
{
}
A(const char* y, int x)
: A(x, y, 0)
{
}
A()
: A(0, 0, 0)
{
}
};
为什么不只是:?
class A {
public:
A(...) { }
};
// test:
int main() {
A x;
A y("Hello", 7);
A z(3, "Hello", 2.4);
}