单个构造函数来创建具有不同数据类型的对象

时间:2013-01-10 04:38:08

标签: c++ constructor

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

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

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

5 个答案:

答案 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); 
}