4

重複の可能性:
パラメーターを使用してコンストラクターを作成すると、デフォルトのパラメーターなしコンストラクターがなくなるのはなぜですか

私は次のプログラムを書きました

#include <iostream>
class A {
public:
    A(int i) {std::cout<<"Overloaded constructor"<<std::endl;}
}

int main() {
A obj;
return 0;
}

プログラムをコンパイルすると、次のエラーが発生します。

A :: A()候補を呼び出すための一致する関数はありません:A :: A(int)A :: A(const A&)

4

4 に答える 4

7

この場合のデフォルトコンストラクターの存在は、それを定義するかどうかによって異なります。別のコンストラクターを自分で定義した場合、暗黙的に定義されなくなります。幸いなことに、持ち帰るのは簡単です。

A() = default;

「デフォルトのコンストラクター」という用語は、引数なしで呼び出される可能性のあるコンストラクター(12.1p5)を指すことに注意してください。暗黙的に定義されることもあるコンストラクターだけではありません。

于 2012-09-04T21:45:18.440 に答える
5

いいえ、標準のデフォルトによれば、このような場合、コンストラクターは生成されません。ただし、C ++ 11では、次を使用してデフォルトのコンストラクターを生成することを宣言できます。

class A {
public:
  A() = default;
  A(int);
};
于 2012-09-04T21:47:42.850 に答える
0
  • 上記のようにデフォルトのコンストラクターを作成し、maing関数を作成することができます。

    A* obj = new A();

  • たとえば、メイン関数に書き込むことができます

    A* obj = new A(5);

  • コンストラクターで設定できます

    public:
    A(int i=0) 
    { 
        cout << "My own  constructor!"; 
    }; 
    

    そのクラスのオブジェクトを作成するときに、次のいずれかを記述できます。

    `A* obj = new A(5);`
    

    これにより、変数iが値を持つように変更されます5
    。または、次のようにオブジェクトを初期化することもできます。

    `A* obj = new A();` 
    

    これにより、変数iはデフォルト値のままになります0

于 2012-09-04T21:52:13.730 に答える
0

これはC++の規則です。ユーザー定義のコンストラクターを作成した場合、暗黙の非パラメーターコンストラクターは必要ないと想定されます。理解できるので覚えておいてください。

于 2012-09-05T02:48:05.773 に答える