基類對象和派生類對象之間的賦值關係

        基類對象和派生類對象之間的賦值關係具體是指:基類的對象可不可以賦值給子類對象或者子類對象可不可以賦值給基類對象。

        一般來說,只有派生類的對象可以賦值給基類的對象,反之,則不可以。例如:

Father a ;    // 基類對象
Son b ;       // 派生類對象
a = b ;       // 可以
b = a ;       // 不可以

       爲什麼派生類對象可以給基類對象賦值呢?反之則不可以呢?這是因爲基類對象a的成員比派生類對象b的成員少。所以基類對象賦值給派生類對象時會出錯。上面是一種情況,還有另外一種情況:

Father a ;                  // 基類對象
Son b ;                     // 派生類對象
Father *pa = &b ;     // 可以
Son *pb = &a ;         // 不可以

       上面的指針賦值也就是說:基類的指針可以指向派生類對象,但是反過來則不行,派生類的指針不可以指向基類的指針。這是爲什麼呢?這是因爲派生類的對象所佔的存儲空間通常要比基類的對象大,原因就是派生類除了繼承基類的成員之外,還擁有自己的成員,所以基類的指針操作派生類的對象時,由於基類指針會向操作基類對象那樣操作派生類對象,而基類對象所佔用的內存空間通常小於派生類對象,所以基類指針不會超出派生類對象去操作數據。

       同樣的道理,基類的引用可以作爲派生類對象的別名,但是反過來則不行,派生類的引用不可以作爲基類對象的別名。例如:

Father a ; // 基類對象
Son b ;    // 派生類對象
Father &f = b ; // 可以
Son &s = a ;    // 不可以 


 


 

 

發佈了111 篇原創文章 · 獲贊 14 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章