c++的繼承,說到底就是使用父類(基類)來完成某一樣事情嘛…
換一種說法,繼承就是為了復用父類的方法。
繼承之後,父類的public成員相當於變成子類的public成員,能在外部直接使用;而父類的protected成員變成子類的protected成員;父類的private成員卻不能通過子類來訪問。
繼承之後,父類的public和protected成員變成子類的protected的成員;父類的private成員依舊不能通過子類來訪問。
這個時候,父類的public、protected成員變成子類的private成員;這個時候,父類的private成員依舊不能通過子類來訪問。
因為父類的有些東西不能與子類共有,或者不能被繼承。比如,父親的年齡被定義在private,兒子繼承父親的年齡能幹嘛?這個屬性是父親特有的私有的。
呼叫子類的。
構造時候,先子類後父類;析構時候,先父類後子類。遵循棧規則,即先進先後,後進先出。
需要在子類的建構函式中顯式呼叫,比如dog():animal("zhou")
。
//外部定義的建構函式
dog::
dog(
int myage)
:animal
("zhou"),
age(myage)
//類中的宣告
class
dog:
public animal
;
外部定義時候,可以給父類建構函式傳參,同時也可以初始化子類的屬性。編譯器可以區別出不同的符號,因為animal這個符號是class定義時候繼承而來。
在類的宣告中,建構函式不需要帶初始列表,不然會報錯。
void dog::
test()
子類繼承父類,本質是子類例項化的時候,在開闢一片空間儲存父類,所以,父類的同名函式也儲存下來。
在子類中,直接呼叫的函式優先呼叫自身類中的成員函式,因為呼叫1,實際是呼叫2。而3 是從作用域的角度來呼叫函式。利用這個特點,我們可以呼叫父類的同名函式。
這是c++的隱藏規則在作怪。直接呼叫 1 ,其實隱藏了很多細節;而使用作用域的方式呼叫,可以繞過這些隱藏規則。
可以,這相當於子類物件可以無條件地隱式型別轉換為父類物件。不過父類指標物件只能呼叫子類中繼承父類的那一部分方法,子類自身的方法不能被呼叫,這規則也適用於子類和父類同名的函式。
比如圓和橢圓的問題,是圓繼承橢圓,還是橢圓繼承圓?不論誰繼承誰,都很不妥,比如,圓有半徑,而橢圓有長軸和短軸,這些屬性在另乙個類中都用不上。雖然類的有些方法有些方法被復用,但是是硬是要繼承,還是造成不良的繼承。歸根到底,這兩者不具備傳遞性。
就是乙個class內使用其它多個class的物件作為成員。類似於乙個結構體,包含了其它的結構體。
比如,定義乙個人,人有兩隻腳,我們可以這樣定義:
class
leg;
class
person
;
在oo設計原則中,優先選擇組合的方式,然後才是繼承。但也有缺點,它會令系統的物件增多。
第一種二義性:父類的有同名的函式
classa;
};classb;
};classc:
public a,
public b
;
int
main()
這種情況下,c1呼叫hello()會產生歧義,不知道呼叫a的,還是b的hello().
解決的方法:顯式指定呼叫的物件。c1.a::hello();
第二種二義性:菱形繼承問題,使用虛函式來解決
什麼是菱形繼承問題?就是孫子類c中繼承了b1和b2,而b1和b2同時繼承了相同的乙個父類a,這樣就導致孫子類有兩份a。
解決方案是讓b1和b2虛繼承a,c再正常多繼承b1和b2即可.
原理解釋:
虛函式是在程式執行時候才去鏈結執行,從而實現多型。
類中帶有純虛函式,那麼這個類就是抽象類。抽象類不能被例項化。
抽象類是為了讓語法和語義保持一致。比如,父類animal 和 子類cat。我們知道,動物可以吃食物,可以叫,但是具體怎麼吃,怎麼叫,我們不知道,為了保持語法和語義的一致性,我們把吃和叫的方法現在父類中宣告為純虛函式。而子類cat就可以具體實現吃和叫的方法。
還有乙個作用,就是讓程式設計師檢視父類,就知道animal大概有什麼方法了可以使用,否則,需要檢視相應的子類。
C 類的繼承
繼承是物件導向程式設計的主要特徵之一,它可以讓你重用 可以節省程式設計的時間。1.object類的作用。object object為別名 是所有類的基類,在c 中所有的類都直接或間接繼承於object,如果在乙個類的宣告中沒有指定它繼承於哪個類則是繼承於object類。2.類繼承的實現。以下定義兩個...
C 類的繼承
複習下c 類的繼承,先看下面例子 class a public可以在類內部 派生類 類的例項訪問 protected void test2 protected可以在類內部 派生類訪問 private int m a m a為private,只能在本類使用 class b public a class...
c 類的繼承
類的繼承有三種方式 1 公有繼承 2 私有繼承3 保護繼承 基類中的私有成員在派生類中時隱藏的,只能在基類中訪問 派生類中的成員不能訪問基類中的私有成員,但是可以訪問基類中的公有成員和保護成員。派生類從基類公有繼承時,基類的公有成員和保護成員仍然是派生類中的公有成員和保護成員 私有繼承時,公有成員和...