0

如何使用单个构造函数仅使用 C++ 创建以下对象:

A x;
A y("Hello", 7);
A z(3, "Hello", 2.4);

A 类应该有一个构造函数来适应对象 x、y 和 z 的创建。上面指定的 3 行不允许更改。

4

5 回答 5

3

你不能(而不应该!)有一个构造函数来创建所有这些对象。
由于这个原因,您可以拥有可以采用不同参数的构造函数。

要问的重要问题是:
您到底想达到什么目标?这有什么需要?
也许您正试图以错误的方式解决问题。如果你能提供一些细节我们可以帮助你更好。

于 2013-01-10T04:45:40.997 回答
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() ); 
于 2013-01-10T04:46:35.380 回答
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;
}
于 2013-01-10T04:49:58.960 回答
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)
    {
    }
};
于 2013-01-10T05:01:56.323 回答
-1

为什么不只是:?

class A {
public:
    A(...) { }
};

// test:
int main() {
    A x;
    A y("Hello", 7);
    A z(3, "Hello", 2.4); 
}
于 2013-05-10T22:25:44.777 回答