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