class A
{
}
Class B:public A
{
}
A aobject;
B bobject;
有關(guān)
(1)aboject=bobject;
(2)bobject=aboject;
的說明。
=============================================================================
(1)aobject=bobject; 調(diào)用default A::operator =,由編譯器自動生成,它的函數(shù)聲明大致類似于:A operator = (A rhs),反正=號右邊要求是一個A的對象,bobject作為A的子類對象亦是可行的,只不過傳遞過程中會產(chǎn)生“截斷”。
(2)bobject=aobject; 調(diào)用default B::operator =,也由編譯器自動生成,它的函數(shù)聲明大致類似于:B operator = (B rhs),這里=號右邊要求是一個B的對象,aobject這時就不可行了。
這時,單單重載B::operator =也無濟于事,因為你無法改變operator = 函數(shù)參數(shù)必須是B對象的這個事實。要實現(xiàn)bobject=aobject;可以重載強制類型轉(zhuǎn)換函數(shù),也可以利用編譯器隱式類型轉(zhuǎn)換的能力,如:
class A
{
public:
A(){}
};
class B:public A
{
public:
B(){}
B(A a){}
};
A aobject;
B bobject;
int main()
{
aobject=bobject;
bobject=aobject;
return 0;
}
ps:這是我在csdn論壇上的一個問題,感謝 RookieStar(★)(巴巴羅薩) 等網(wǎng)友的回答。