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 に答える