C 中組合和繼承的聯合

2022-06-29 19:51:14 字數 857 閱讀 7887

c對b進行了繼承並且有乙個型別a的成員物件(「由型別a的成員物件組合而成」)。 可以看到,建構函式的初始化表示式表中呼叫了基類建構函式和成員物件建構函式。 函式c:f()重定義了它所繼承的b:f(),但同時還呼叫基類版本。另外,它還調 用了a.f()。注意,只有通過繼承,才能重新定義它的函式。而對於成員物件,只能操 作這個物件的公共介面,而不能重定義它。另外,如果c:f()還沒有被定義,則對型別 c的乙個物件呼叫f()就不會呼叫a.f(),而會呼叫b:f()。 自動析構函式呼叫 雖然常常需要在初始化表示式表中做顯式構造函式呼叫,但並不需要做顯式的析構函 數呼叫,因為對於任何型別只有乙個析構函式,並且它並不取任何引數。然而,編譯器仍 要保證所有的析構函式被呼叫,這意味著,在整個層次中的所有析構函式中,從派生最底 層的析構函式開始呼叫,一直到根層。 值得強調的是,在每一層中建構函式和析構函式都被呼叫的情況相當罕見。然而對於 通常的成員函式,只是這個函式被呼叫,而它的那些基類版本並不會被呼叫。如果還想調 用過載過的成員函式的基類版本,則必須顯式地去做。

c 繼承和組合

當建立乙個物件時,編譯器總是確保呼叫了所有的子物件的建構函式,如果子物件有自己的預設建構函式,那麼編譯器可以自動地呼叫它們。但是,如果子物件沒有預設建構函式,或者想改變建構函式的某個預設引數,這就會出現問題,因為這個新類的建構函式沒有權利訪問這個子物件的私有資料成員,所有不能直接對它們初始化。解決的...

C 繼承和組合的區別

1.什麼是繼承 a繼承b,說明a是b的一種,並且b的所有行為對a都有意義 eg a woman b human a 鴕鳥 b 鳥 不行 因為鳥會飛,但是鴕鳥不會。2.什麼是組合 若在邏輯上a是b的 一部分 a part of 則不允許b從a派生,而是要用a和其它東西組合出b。例如眼 eye 鼻 no...

c 繼承和組合的區別

1 什麼是繼承 a繼承b,說明a是b的一種,並且b的所有行為對a都有意義 eg a woman b human a 鴕鳥 b 鳥 不行 因為鳥會飛,但是鴕鳥不會。2.什麼是組合 若在邏輯上a是b的 一部分 a part of 則不允許b從a派生,而是要用a和其它東西組合出b。例如眼 eye 鼻 no...