7

非パラメーター コンストラクター 1 つ、パラメーター コンストラクター 1 つ、コピー コンストラクター 2 つ、代入演算子 1 つ、プラス演算子 1 つを使用して、単純な C++ クラスの例を作成しました。

class Complex {
protected:
    float real, img;
public:
    Complex () : real(0), img(0) {
        cout << "Default constructor\n";
    }

    Complex (float a, float b) {
        cout << "Param constructor" << a << " " << b << endl;
        real = a;
        img = b;
    }

    // 2 copy constructors
    Complex( const Complex& other ) {
        cout << "1st copy constructor " << other.real << " " << other.img << endl;
        real = other.real;
        img = other.img;
    }

    Complex( Complex& other ) {
        cout << "2nd copy constructor " << other.real << " " << other.img << endl;
        real = other.real;
        img = other.img;
    }

    // assignment overloading operator
    void operator= (const Complex& other) {
        cout << "assignment operator " << other.real << " " << other.img << endl;
        real = other.real;
        img = other.img;
    }

    // plus overloading operator
    Complex operator+ (const Complex& other) {
        cout << "plus operator " << other.real << " " << other.img << endl;
        float a = real + other.real;
        float b = img + other.img;
        return Complex(a, b);
    }

    float getReal () {
        return real;
    }

    float getImg () {
        return img;
    }
};

このクラスをメインで次のように使用しました。

int main() {
    Complex a(1,5);
    Complex b(5,7);
    Complex c = a+b; // Statement 1
    system("pause");
    return 0;
}

結果は次のように出力されます。

Param constructor 1 5
Param constructor 5 7
plus operator 5 7
Param constructor 6 12

ステートメント 1 ではコピー コンストラクターを使用する必要があると思いますが、どのコンストラクターが呼び出されるのかはよくわかりません。どちらを教えてください、なぜですか?どうもありがとう

4

1 に答える 1