在任何需要基類物件的地方都可以用公有派生類的物件來代替,這條規則稱賦值相容規則。它包括以下情況:
私有派生和保護派生不具備賦值相容性!示例**: ( **測試: )
1 #include 23using
std::cout ;
4using
std::endl ;56
class
base710
11 ~base( )
1213 base& operator=( const base&)
1418
19} ;
2021
class publicinherit : public
base
2225
26 ~publicinherit( )
2728
} ;29
30class privateinherit : private
base
3134
35 ~privateinherit( )
3637
} ;38
class protectinherit : protected
base
3942
43 ~protectinherit( )
4445
} ;46
47int main( int argc, char **ar** )
48
執行結果:
1 --------------- create obj ! ---------------2 create the base obj !
3 create the base obj !
4 create the publicinherit obj !
5 create the base obj !
6 create the privateinherit obj !
7 create the base obj !
8 create the protectinherit obj !
910 -------- assignment occur to obj ! --------
11 assignment operator occur to the base obj !
1213 ------ assignment occur to pointer ! -------
1415 -------------- destroy obj ! ---------------
16 destroy the protectinherit obj !
17 destroy the base obj !
18 destroy the privateinherit obj !
19 destroy the base obj !
20 destroy the publicinherit obj !
21 destroy the base obj !
22 destroy the base obj !
C 派生類與基類的賦值
class a class b a void main 可以把派生類賦值給基類。我們知道賦值,是呼叫了類的賦值運算子。所以當派生類給基類賦值時,呼叫了基類的複製運算子函式,該函式的引數是基類物件的const 引用,那麼 a b,實際就是用基類引用派生類,然後將派生類中基類部分賦值給對應的基類成員。而...
派生類與基類間的轉化
派生類到基類 呼叫函式時 將派生類物件傳遞給希望接受基類引用的函式,此時並不發生派生類到基類的型別轉化。因為引用直接繫結到派生類上,物件並沒有複製,只是將派生類的基類部分的位址傳遞給基型別的引用。將派生類物件傳遞給接受基類物件 並非它的引用 的函式時,形參型別是固定的,只是用派生類物件中的基類部分初...
派生類與基類間的轉化
派生類到基類 呼叫函式時 將派生類物件傳遞給希望接受基類引用的函式,此時並不發生派生類到基類的型別轉化。因為引用直接繫結到派生類上,物件並沒有複製,只是將派生類的基類部分的位址傳遞給基型別的引用。將派生類物件傳遞給接受基類物件 並非它的引用 的函式時,形參型別是固定的,只是用派生類物件中的基類部分初...