09 2011 檔案
虛函數和多態 (二)
摘要: 是允許將父對象設置成為和一個或多個它的子對象相等的技術,比如Parent:=Child; 多態性使得能夠利用同一類(基類)類型的指針來引用不同類的對象,以及根據所引用對象的不同,以不同的方式執行相同的操作.
c++中多態更容易理解的概念為
閱讀全文
posted @
2011-09-30 23:17 Yu_ 閱讀(364) |
評論 (0) 編輯
虛函數和多態 (一)
摘要: 1、什么是虛函數?
①、虛函數必須是基類的非靜態成員函數
②、其訪問權限可以是protected或public。不能是private ,因為子類繼承時,子類不能訪問。
③、在編譯時是動態聯編的::編譯程序在編譯階段并不能確切知道將要調用的函數,只有在程序執行時才能確定將要調用的函數,為此要確切知道該調用的函數,要求聯編工作要在程序運行時進行,這種在程序運行時進行聯編工作被稱為動態聯編。 動態聯編規定,只能通過指向基類的指針或基類對象的引用來調用虛函數
2、定義形式。
virtual 函數返回值類型 虛函數名(形參表)
{ 函數體 }
純虛函數:virtual 函數名=0
3、虛函數內部機制。
①、每個實例對象里有自己的指針。
②、虛函數(Virtual Function)是通過一張虛函數表(Virtual Table)來實現的。
③、我們通過對象實例的地址得到這張虛函數表,然后就可以遍歷其中函數指針,并調用相應的函數。
閱讀全文
posted @
2011-09-30 21:58 Yu_ 閱讀(363) |
評論 (0) 編輯
類繼承和子類型 多繼承和虛擬繼承
摘要: 關于基類,派生類的相關補充:
1、 派生表中指定的類必須先被定義好,方可被指定為基類。
2、 派生類的前向聲明不能包括其派生表,而只需要類名即可。
3、 缺省的繼承是private。
4、 繼承而來的派生類的虛擬函數一般加上virtual較好,也可以省略。但基類中一定要聲明為virtual。
5、 對于基類的靜態成員,所有派生類對象都引用基類創建的這個相同,單一,共享的靜態成員,而不是創建該派生類的另一個獨立的靜態成員。
6、 友員關系不會被繼承,派生類沒有成為“向它的基類授權友誼的類”的友員。
閱讀全文
posted @
2011-09-30 16:18 Yu_ 閱讀(413) |
評論 (0) 編輯
GoF23小結
摘要: 一、 什么是設計模式。
毫無疑問,設計模式是前人總結下來,一些設計經驗經過被反復使用、并為多數人知曉、經過分類編目。模式是一種問題的解決思路,它已經適用于一個實踐環境,并且可以適用于其他壞境。
最終由GoF總結出23種設計模式。
二、 為什么要使用。
閱讀全文
posted @
2011-09-29 08:12 Yu_ 閱讀(374) |
評論 (0) 編輯
Bridge 橋模式
摘要: 1、什么是Bridge模式?
這個問題我用一言兩語實在無法概括其根本。不過我是這樣分析的:
①、對象這個概念可以認為是由“屬性”和“行為”兩個部分組成的。屬性我們可以認為是一種靜止的,是一種抽象;一般情況下,行為是包含在一個對象中,但是,在有的情況下,我們需要將這些行為也進行歸類,形成一個總的行為接口,這就是橋模式的用處。
②、Bridge模式是解決多層繼承的。如果你在實現應用中一個類,需要繼承兩個以上的類,并且這兩者之間又持有某種關系,它們兩個都會有多種變化。Bridge模式是把這兩個類,分解為一個抽象,一個實現,使它們兩個分離,這樣兩種類可以獨立的變化。舉一個例子:
閱讀全文
posted @
2011-09-27 18:42 Yu_ 閱讀(349) |
評論 (0) 編輯
深拷貝、淺拷貝 與拷貝構造函數的關系
摘要: 拷貝即是通常所說的復制(Copy)或克隆(Clone),對象的拷貝也就是從現有對象復制一個“一模一樣”的新對象出來。雖然都是復制對象,但是不同的復制方法,復制出來的新對象卻并非完全一模一樣,對象內部存在著一些差異。通常的拷貝方法有兩種,即深拷貝和淺拷貝,那二者之間有何區別呢?
我的理解是:
1、深拷貝和淺拷貝之間的區別在于是否復制了子對象。
2、如果一個類擁有資源(堆,或者是其它系統資源),,當這個類的對象發生復制過程的時候,資源重新分配,這個過程就是深拷貝,反之對象存在資源,但復制過程并未復制資源的情況視為淺拷貝。
閱讀全文
posted @
2011-09-27 01:24 Yu_ 閱讀(381) |
評論 (0) 編輯