[MFC]C++概念

virtual function
宣告時機:
相同的函數名稱,但因為不同的衍生類別,而有不同的行為時,可以宣告成虛擬函數
優點:
可以根據你的類別做出函數對應的行為

使用方法:利用base class指標指向derive class物件記憶體位置,再由指標變數呼叫base class的虛擬函數,,就會執行derive class相同函數名稱的程式碼(若不使用指標其虛擬函數與一般函數是沒有什麼分別)
performance比較:
非虛擬函數,在編譯時就決定哪一個函數會被呼叫,此為static binding;虛擬函數,必須要等到程式執行時才能知道哪個函數會被呼叫,稱為dynamic binding.故虛擬函數效率會低於非虛擬函數.
應用:
把解構子宣告成虛擬函數,在回收base class 指標指向動態配置出來的derive class記憶體空間時,藉由dynamic binding,解決類別不正常解構,讓記憶體完整的釋回.

-----------------------------------------------------------------------------

static data member:
1.屬於class層級的資料,所有object共享一份static data member。
2.存取static member不需要透過任何的object,在無任何object時已透過member selection operators 來存取。
3.所有的存取都會被compiler轉化為extern實體的直接參考動作
static member function:
1.只允許存取static member variable或function
2.不用宣告實體物件即可呼叫該function
Public:
1.可在程式內的任何敘述存取。
2.類別的成員函數之存取等級,大多為public等級,以便供類別以外程式敘述存取屬性。
Protect:
1.可存取類別的成員函數。
2.繼承該類別之衍生類別的成員函數。
3.等級介於public和private之間
1)類別以外的敘述,protected等級的成員,跟private同等。
2)對於類別的衍生類別,protected等級的成員,相當於public的等級。
Private:
1.可以存取該類別的成員函數或是該類別的friend 類別或friend函數。
2.不被任意存取。

Friend function:
1.依照資料隱藏的特性,被宣告為private的成員函數和資料成員不能被外界呼叫和存取。
2.Friend function本身並非類別內的成員函數,卻被允許直接取用private成員。
3.一個函數無法宣告自己是某類別的friend函數,必需由類別宣告才可以。
4.要在類別內宣告friend函數只要在函數的宣告之前加上friend就可以。
5.使用friend函數比較接近傳統的語言,確保有以物件導向為基礎的程式設計。代價是在friend函數的定義內,每個成員都必須加上物件的名稱。
-----------------------------------------------------------------------------

留言

這個網誌中的熱門文章

電腦網路project