派生類賦值給基類的一些問題

2022-05-10 15:12:46 字數 918 閱讀 8757

物件導向中(包括c++),繼承是用來描述「是一種」關係,比如說: 中國人是人類的派生類,這裡就有」是一種「關係,你是中國人當然也是人了。

派生類繼承了基類的所有成員,派生類物件理所當然可以當做基類物件來用(相當於兒子繼承了父親所有的遺產,所以兒子可以用父親的錢)。

c++中,一般是將派生類物件傳遞給基類引用,或者是將派生類的位址傳遞給基類指標變數,這樣才能產生正確的多型行為,並且不會出現截斷問題。

比如有兩個類(父親)和(孩子),其中 (孩子) 類從 (父親) 派生,現在用 (孩子) 類產生乙個物件(兒童),那麼 (兒童) 的型別既是 (孩子) 型別,也是 (父親) 型別

反之不成立的意思就是說,用 (父親) 類產生乙個物件(fu),那麼(fu)的型別是 (父親) 型的,但不是 (孩子) 型別的

你如果直接將派生類的物件賦值給基類物件,派生類自身的成員就會被丟棄,只保留基類繼承來的成員,這就相當於你定義了乙個基類物件(b的自身成員被丟棄,只保留基類繼承過來的成員),然後將這個物件賦給另乙個基類物件。

問題解答:為什麼派生類賦值給基類,派生類自身成員會被丟棄

因為基類產生的物件就是基類,如果將乙個派生類所有成員賦值給了基類,相當於基類可以繼承派生類所有成員,哪

就是說父類也可以叫子類,不成立。

用人類話說,孩子可以叫父親(因為隨著時間的推移孩子會長大結婚生兒子成父親),而父親不能被叫做孩子,所以不能把孩子這個稱號和孩子的一些屬性給父親。

也就是說派生類賦值給基類,就會把派生類所有的屬性給丟棄,只保留派生類從基類繼承過來的屬性,如果是這樣,相當於把乙個基類賦值給乙個基類,也就是自己賦值給自己。

a& rbase=b; 加不加引用 都輸出基類。

c 派生類物件賦值給基類物件

基類物件和派生類物件之間的賦值關係具體是指 基類的物件可不可以賦值給子類物件或者子類物件可不可以賦值給基類物件。一般來說,只有派生類的物件可以賦值給基類的物件,反之,則不可以。例如 cpp view plain copy father a 基類物件 son b 派生類物件 a b 可以 b a 不可...

C 派生類與基類的賦值

class a class b a void main 可以把派生類賦值給基類。我們知道賦值,是呼叫了類的賦值運算子。所以當派生類給基類賦值時,呼叫了基類的複製運算子函式,該函式的引數是基類物件的const 引用,那麼 a b,實際就是用基類引用派生類,然後將派生類中基類部分賦值給對應的基類成員。而...

day4 4 9(向上轉型)派生類賦值給基類

在 c c 中經常會發生資料型別的轉換,例如將 int 型別的資料賦值給 float 型別的變數時,編譯器會先把 int 型別的資料轉換為 float 型別再賦值 反過來,float 型別的資料在經過型別轉換後也可以賦值給 int 型別的變數 資料型別轉換的前提是,編譯器知道如何對資料進行取捨 大的...