0

ここでは、パラメーター化されたコンストラクターが宣言されていますが、そのコンストラクターに対応するオブジェクトは作成されていません。しかし、出力はパラメーター化されたコンストラクターの実行である 10 20 です。なぜですか?

#include<iostream>
using namespace std;

class constructor
{
    int x, y; 
    public:
    constructor(int a = 10, int b = 20 )
    {
        x = a; 
        y = b;
    }
    void Display()
    {
        cout<< x << " " << y << endl;
    } 
};

int main()
{
    constructor objBix;     
    objBix.Display(); 
    return 0;
}
4

5 に答える 5

3

すべての既定の引数を使用してカスタム コンストラクターを定義したので、それが既定のコンストラクターとして機能します。どの関数を呼び出すかを決定する際にあいまいさが生じるため、コンパイラは別のデフォルトの関数を生成しません。したがって、実際に呼び出されるのは、すべてのデフォルト引数が使用されたカスタム コンストラクターです。コンパイラによって生成された「デフォルト」はまったく存在しません。

参照: CppReference

デフォルトコンストラクターは、引数なしで呼び出すことができるコンストラクターです (空のパラメーターリストで定義されるか、すべてのパラメーターに提供されるデフォルト引数で定義されます)。

于 2018-01-07T15:15:45.077 に答える
1

cppreference の引用:

デフォルト コンストラクターは、引数なしで呼び出すことができるコンストラクターです (空のパラメーター リストで定義されるか、すべてのパラメーターに提供されるデフォルト引数で定義されます)。

コンパイラーは、他のコンストラクターが提供されていない場合にのみ暗黙的にデフォルトのコンストラクターを生成するため、この例では生成されません。

于 2018-01-07T15:14:25.763 に答える
0

デフォルトのコンストラクターをオーバーライドして、引数なしのコンストラクターを定義しました。パラメータにデフォルト値を指定したため、引数なしで呼び出すことができ、デフォルトが使用されます。

于 2018-01-07T15:14:55.627 に答える