面向對象中(包括C++),繼承是用來描述“是一種”關系,比如說: 中國人是人類的派生類,這里就有”是一種“關系,你是中國人當然也是人了。
派生類繼承了基類的所有成員,派生類對象理所當然可以當做基類對象來用(相當於兒子繼承了父親所有的遺產,所以兒子可以用父親的錢)。
C++中,一般是將派生類對象傳遞給基類引用,或者是將派生類的地址傳遞給基類指針變量,這樣才能產生正確的多態行為,並且不會出現截斷問題。
比如有兩個類(父親)和(孩子),其中 (孩子) 類從 (父親) 派生,現在用 (孩子) 類產生一個對象(兒童),那么 (兒童) 的類型既是 (孩子) 類型,也是 (父親) 類型
反之不成立的意思就是說,用 (父親) 類產生一個對象(Fu),那么(Fu)的類型是 (父親) 型的,但不是 (孩子) 類型的
你如果直接將派生類的對象賦值給基類對象,派生類自身的成員就會被丟棄,只保留基類繼承來的成員,這就相當於你定義了一個基類對象(b的自身成員被丟棄,只保留基類繼承過來的成員),然后將這個對象賦給另一個基類對象。
問題解答:為什么派生類賦值給基類,派生類自身成員會被丟棄
因為基類產生的對象就是基類,如果將一個派生類所有成員賦值給了基類,相當於基類可以繼承派生類所有成員,哪就是說父類也可以叫子類,不成立。
用人類話說,孩子可以叫父親(因為隨着時間的推移孩子會長大結婚生兒子成父親),而父親不能被叫做孩子,所以不能把孩子這個稱號和孩子的一些屬性給父親。
也就是說派生類賦值給基類,就會把派生類所有的屬性給丟棄,只保留派生類從基類繼承過來的屬性,如果是這樣,相當於把一個基類賦值給一個基類,也就是自己賦值給自己。
A& rBase=b; 加不加引用 都輸出基類。
