1.虛函式:virtual關鍵字來定義,主要是基類的派生類,作用是為了派生類可以在相同函式名的時候,可以有自己的功能,而不用執行基類的行為。
class pp
;void pp::test()
結果是:test tt tt
2.關鍵字:static(靜態成員):
靜態成員如果有n個同類的物件,那麼每乙個物件都分別有自己的資料成員,不同物件的資料成員各自有值,互不相干。但是有時人們希望有某乙個或幾個資料成員為所有物件所共有。這樣可以實現資料共享。
如果想在同類的多個物件之間實現資料共享,也不要用全域性物件,可以用靜態的資料成員。
如果只宣告了類而未定義物件,則類的一般資料成員是不佔記憶體空間的,只有在定義物件時,才為物件的資料成員分配空間。
但是靜態資料成員不屬於某乙個物件,在為物件所分配的空間中不包括靜態資料成員所佔的空間。靜態資料成員是在所有物件之外單獨開闢空間。只要在類中定義了靜態資料成員,即使不定義物件,也為靜態資料成員分配空間,它可以被引用。在乙個類中可以有乙個或多個靜態資料成員,所有的物件共享這些靜態資料成員,都可以引用它。
靜態資料成員是在程式編譯時被分配空間的,到程式結束時才釋放空間。
靜態資料成員既可以通過物件名引用,也可以通過類名來引用。這就驗證了所有物件的靜態資料成員實際上是同乙個資料成員。同時也說明靜態資料成員並不是屬於物件的,而是屬於類的,但類的物件可以引用它。
3.final關鍵字的作用:
1). 乙個類或結構體不希望被繼承。6.pure virtual (純虛函式):含有純虛函式的類稱為抽象類。在基類中,只告訴乙個介面,而不需要告訴具體做什麼,這樣就變成了純虛函式,class base final
; // 錯誤,derive不能從base派生。
class derive : public base
;2). 乙個虛函式不希望被override(覆蓋)。
class base
};class derive : public base
class pp
;void pp::test()
;intstack::getcount(void)const
乙個純虛函式只是提供乙個介面,不去具體實現它,而通過子類去實現,這樣就實現了資料隱藏和多型。 1)
實現了純虛函式的子類,該純虛函式在子類中就變成了虛函式,子類的子類即孫子類可以覆蓋
該虛函式,由多型方式呼叫的時候動態繫結。
2)純虛函式必須在子類
(sub class)
中實現該函式才可以使用,因為純虛函式在基類
(base class)
只有宣告而沒有定義。
純虛函式的定義:=0必須在virtual中定義,告訴編譯器這只是個介面,作用還不確定。
class pp
;
C Primer 物件導向程式設計
1.要注意區分類和類物件,物件只能訪問public成員,而類和友元可以訪問private成員。而對於基類的protected成員,派生類可以訪問其基類的protected成員 友元中也可以訪問protected成員 不能通過派生類物件在類外訪問protected成員 這點與private類似 值得注...
c primer 物件導向程式設計
1.重構現象 因為派生類的建構函式只能初始化它的直接基類,所以這樣就出現了一種新的現象 重構,重構是很常見的,它是指在子類中重新定義父類的建構函式,已達到自己想要的建構函式。重構要注意的是一旦被重構,編譯器必須重新編譯這些類的 class pp class d1 public base class ...
C Primer 物件導向程式設計
1 在c 中,基類將型別相關的函式與派生類不做改變直接繼承的函式區分對待。對於某些函式,基類希望它的派生類各自定義適合自身的版本,此時基類就將這些函式宣告成虛函式 virtual function 2 在c 中,當我們使用基類的引用 或指標 呼叫乙個虛函式時將發生動態繫結。3 關鍵字virtual只...