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

single constructor to create objects with different data types

本文关键字:对象 单个 构造函数 数据类型 创建      更新时间:2023-10-16

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

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 An";
    }   
};
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); 
}