2010年10月29日 星期五

虛擬函式

虛擬函式正是為了對「如果你以個基礎類別之指標指向一個衍生類別之物件,那麼透過該指標你就只能夠呼叫基礎類別所定義之成員函式」這條規則反其道而行的設計。

 純虛擬函式不需定義其實際動作,它的存在只是為了在衍生類別中被重新定義
抽象類別不能產生出物件實體,但是我們可以擁有指向抽象類別之指標,以便於操作抽象類別的各個衍生類別

 節錄自《深入淺出MFC》-侯俊傑



心得
基礎類別指標指向衍生類別時,想透過指標呼叫衍生類別特有之函數,所以要在基類別定義衍生類別會用到的函式,並設定成虛擬函式。

 換句話說,在封裝基礎類別時,就定義衍生類別會用到的特性函數虛擬函數(=給衍生用的函數)
在指標指定衍生類別時可以呼叫,但是自己本身並沒有(或無法表現)這個函數特性。
 如果設定成基礎→衍生→衍生的話,只要設定基礎指標虛擬函數就可以呼叫衍生→衍生。

 Ex:
虛擬函式可被繼承、呼叫、設定為實做。
 class abc
 {
 public:  
     virtual void display();
 };


純虛擬函式可被繼承、不可呼叫、不可設定為實做
 class abc
 {
 public:  
     virtual void display()=0;
 };


多型(Polymorphism) 的目的,就是要讓處理「基礎類別之物件」的程式碼,能夠完全透通地繼續適當處理「衍生類別之物件」

 節錄自《深入淺出MFC》-侯俊傑


static 成員變數不屬於物件的㆒部份,而是類別的㆒部份,所以程式可以在還沒有誕生任
 何物件的時候就處理此種成員變數。但首先你必須初始化它。

 節錄自《深入淺出MFC》-侯俊傑

沒有留言:

張貼留言