如何仅使用单个构造函数使用C ++创建以下对象:
A x;
A y("Hello", 7);
A z(3, "Hello", 2.4);
A类应该有一个构造函数来容纳对象x,y和z的创建。上面指定的3行不允许更改。
答案 0 :(得分:3)
你不能(而不应该!)有一个构造函数来创建所有这些对象 由于这个原因,您可以拥有可以精确采用不同参数的构造函数。
要问的重要问题是:
你到底想要达到什么目的?有什么需要呢?
也许你正试图以错误的方式解决问题。如果你能提供一些细节,我们可以帮助你。
答案 1 :(得分:1)
呸!!!!
无论如何,如果我强迫(例如,如果这个,假设是家庭作业问题),我会使用某种变体:
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() );
答案 2 :(得分:0)
使用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;
}
答案 3 :(得分: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中,您可以使用constructor delegation:
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)
{
}
};
答案 4 :(得分:-1)
为什么不呢:?
class A {
public:
A(...) { }
};
// test:
int main() {
A x;
A y("Hello", 7);
A z(3, "Hello", 2.4);
}