※ ChatGPTを利用し、要約された質問です(原文:プログラムの出力の説明を教えてください。)
プログラムの出力の説明
このQ&Aのポイント
プログラムの出力には基本クラスのoperator=()が呼ばれる
coordクラスのoperator+()とoperator-()が使われる
coordオブジェクトが加算・減算され、象限が表示される
出力が、画像のようになるのですが、最後に基本クラスのoperator=()が呼ばれるのがわからないです。
なぜ、そのようになるのか教えてください。
/* +,-,=をcoordクラスに関してオーバーロードし、
そのcoordをquadの基本クラスとして使用する */
#include <iostream>
using namespace std;
class coord{
public:
int x, y; //座標
coord(int i = 0, int j = 0){ x = i; y = j; }
void get_xy(int &i, int &j){ i = x; j = y; }
coord operator+(coord ob2);
coord operator-(coord ob2);
coord operator=(coord ob2);
};
//+をcoordクラスに関してオーバーロードする
coord coord::operator+(coord ob2)
{
coord temp;
cout << "coord operator+()を使用" << endl;
temp.x = x + ob2.x;
temp.y = y + ob2.y;
return temp;
}
//-をcoordクラスに関してオーバーロードする
coord coord::operator-(coord ob2)
{
coord temp;
cout << "coord operator-()を使用" << endl;
temp.x = x - ob2.x;
temp.y = y - ob2.y;
}
//=をcoordクラスに関してオーバーロードする
coord coord::operator=(coord ob2)
{
cout << "coord operator=()を使用" << endl;
x = ob2.x;
y = ob2.y;
return *this; //代入先のオブジェクトを返す
}
class quad :public coord{
int quadrant;
public:
quad(){ x = 0; y = 0; quadrant = 0; }
quad(int x, int y) :coord(x, y)
{
if (x >= 0 && y >= 0)quadrant = 1;
else if (x<0 && y >= 0)quadrant = 2;
else if (x<0 && y<0)quadrant = 3;
else quadrant = 4;
}
void showq()
{
cout << "象限を示す:" << quadrant << endl;
}
quad operator=(coord ob2);
};
quad quad::operator=(coord ob2)
{
cout << "quad operator=()を使用" << endl;
x = ob2.x;
y = ob2.y;
if (x >= 0 && y >= 0)quadrant = 1;
else if (x<0 && y >= 0)quadrant = 2;
else if (x<0 && y<0)quadrant = 3;
else quadrant = 4;
return *this;
}
int main()
{
quad o1(10, 10), o2(15, 3), o3;
int x, y;
o3 = o1 + o2; //2つのオブジェクトの加算。演算子+()を呼ぶ
o3.get_xy(x, y);
o3.showq();
cout << "(o1+o2)X:" << x << ",Y:" << y << endl;
o3 = o1 - o2; //2つのオブジェクトの減算
o3.get_xy(x, y);
o3.showq();
cout << "(o1-o2)X:" << x << ",Y:" << y << endl;
o3 = o1; //オブジェクトを代入する
o3.get_xy(x, y);
o3.showq();
cout << "(o3=o1)X:" << x << ",Y:" << y << endl;
return 0;
}
お礼
ありがとうございました。 よくわかりました。 回答していただきありがとうございました。