虛擬函式正是為了對「如果你以個基礎類別之指標指向一個衍生類別之物件,那麼透過該指標你就只能夠呼叫基礎類別所定義之成員函式」這條規則反其道而行的設計。
純虛擬函式不需定義其實際動作,它的存在只是為了在衍生類別中被重新定義
抽象類別不能產生出物件實體,但是我們可以擁有指向抽象類別之指標,以便於操作抽象類別的各個衍生類別。
節錄自《深入淺出MFC》-侯俊傑
心得:
基礎類別指標指向衍生類別時,想透過指標呼叫衍生類別特有之函數,所以要在基類別定義衍生類別會用到的函式,並設定成虛擬函式。
換句話說,在封裝基礎類別時,就定義衍生類別會用到的特性函數成虛擬函數(=給衍生用的函數)
在指標指定衍生類別時可以呼叫,但是自己本身並沒有(或無法表現)這個函數特性。
如果設定成基礎→衍生→衍生的話,只要設定基礎指標有虛擬函數就可以呼叫衍生→衍生。
Ex:
虛擬函式
可被繼承、呼叫、設定為實做。
class abc
{
public:
virtual void display();
};
純虛擬函式
可被繼承、不可呼叫、不可設定為實做。
class abc
{
public:
virtual void display()=0;
};
多型(Polymorphism) 的目的,就是要讓處理「基礎類別之物件」的程式碼,能夠完全透通地繼續適當處理「衍生類別之物件」
節錄自《深入淺出MFC》-侯俊傑
static 成員變數不屬於物件的㆒部份,而是類別的㆒部份,所以程式可以在還沒有誕生任
何物件的時候就處理此種成員變數。但首先你必須初始化它。
節錄自《深入淺出MFC》-侯俊傑
沒有留言:
張貼留言
(什麼是留言欄訊息?)