1. 程式人生 > >基類與派生類的指針和成員函數調用原理

基類與派生類的指針和成員函數調用原理

而且 font 重新定義 -s 繼承 轉型 center span enter

基類與派生類的指針和成員函數調用原理

1.如果以一個基礎類指針指向一個衍生類對象(派生類對象),那麽經由該指針只能訪問基礎類定義的函數(靜態聯翩)

2.如果以一個衍生類指針指向一個基礎類對象,必須先做強制轉型動作(explicit cast),這種做法很危險,也不符合生活習慣,在程序設計上也會給程序員帶來困擾。(一般不會這麽去定義)

3.如果基礎類和衍生類定義了相同名稱的成員函數(非虛函數),那麽通過對象指針調用成員函數時,到底調用哪個函數要根據指針的類型(基類指針or派生類指針)來確定,而不是根據指針實際指向的對象類型確定。

4.如果基礎類和衍生類定義了相同名稱的成員函數(虛函數virtual),那麽通過對象指針調用成員函數時,到底調用哪個函數要根據指針實際指向的對象類型(基類對象or派生類對象)來確定,而不是根據指針的類型確定。

5.純虛擬函數:
  virtual void myfunc ( ) =0;

5.1純虛擬函數不許定義其具體動作,它的存在只是為了在衍生類中被重新定義。只要是擁有純虛擬函數的類,就是抽象類,它們是不能夠被實例化的(只能被繼承)。如果一個繼承類沒有改寫父類中的純虛函數,那麽他也是抽象類,也不能被實例化。

5.2抽象類不能被實例化,不過我們可以擁有指向抽象類的指針,以便於操縱各個衍生類。

5.3虛擬函數衍生下去仍然是虛擬函數,而且還可以省略掉關鍵字“virtual”。

——如有不對的地方,非常歡迎給予指導!

基類與派生類的指針和成員函數調用原理