#include <iostream>
using namespace std;
class Alpha
{
public:
int num;
};
class Beta : public Alpha
{
};
Alpha operator+(const Alpha& x, const Alpha& y)
{
Alpha tmp;
tmp.num = x.num + y.num;
return tmp;
}
Beta operator+(const Beta& x, const Beta& y)
{
Beta tmp;
tmp.num = x.num * y.num;
return tmp;
}
int main()
{
Alpha a1;
Alpha a2;
a1.num = 10;
a2.num = 20;
Beta b1;
Beta b2;
b1.num = 10;
b2.num = 20;
Alpha a3 = a1 + a2;
Beta b3 = b1 + b2;
cout << a3.num << endl;
cout << b3.num << endl;
Alpha a4 = b1 + b2;
//Beta b4 = a1 + a2;
cout << a4.num << endl;
Alpha& _ar1 = b1;
Alpha& _ar2 = b2;
//오버로딩은 정적타입 결합이다.
//실제 가르키는 것보다 객체의 타입만 본다.
Alpha a5 = _ar1 + _ar2;
cout << a5.num << endl;
}
결과
30
200
200
30