1.1 虛函式概念
1.定義:在乙個類的成員函式前面加上virtual關鍵字,則該函式就稱為虛函式。
2.如果乙個函式不是類的成員函式,則該函式不能定義為虛函式。(即就是類外面不能使用virtual關鍵字)
1.2 純虛函式與抽象類
1.純虛函式:在虛函式的後面加上=0;
virtual
void display() = 0;
2.包含純虛函式的類稱為抽象類,抽象類不能例項化出物件;
3.如果乙個類繼承了抽象類,則該類也變成了抽象類(因為這個類繼承了抽象類裡面的純虛函式),如果該派生類想例項化出物件,則該派生類必須重寫這個純虛函式;重寫之後父類仍然不能例項化出物件,只有子類才可以。所以將抽象類稱為介面類,保證了只要將父類的虛函式定義成純虛函式,則其子類必須重寫這個虛函式。
例如:student類重寫了person類的虛函式display,則子類可以示例化出物件。
1.多型就是多種形態;
2.多型的分類:靜態多型和動態多型
2.1 靜態多型
在系統編譯期間就可以確定程式執行到當前位置需要執行哪個函式,例如c++中的函式過載與泛型程式設計就屬於靜態多型。
2.2 動態多型
在系統編譯期間並不確定該程式需要執行哪個函式,只有在程式執行時才確定執行哪個函式。c++採用虛函式實現動態多型。
2.3 多型的構成條件
①父類物件的指標或引用;
②虛函式的重寫。
2.3.1 重寫
在不同的作用域下(乙個在父類乙個在子類)兩個函式的函式名,引數,返回值完全相同(協變除外)。
class aa
private:
int _a;
};class bb :public aa
private:
int _b;
};int main()
2.4 構成多型的示例:class person
protected:
string _name;
};class student :public person
protected:
int _num;
};int main()
執行結果如下:
2.5 不構成多型的場景:
場景1:沒有虛函式的重寫
class person
protected:
string _name;
};class student :public person
protected:
int _num;
};int main()
場景2:沒有父類物件的指標或引用
class person
protected:
string _name;
};class student :public person
protected:
int _num;
};int main()
c 多型與虛函式
多型按字面的意思就是多種形態。當類之間存在層次結構,並且類之間是通過繼承關聯時,就會用到多型。c 多型意味著呼叫成員函式時,會根據呼叫函式的物件的型別來執行不同的函式。下面的例項中,基類 shape 被派生為兩個類,如下所示 include using namespace std class sha...
C 多型與虛函式
這一篇介紹一下 c 物件導向三大特徵之一的多型 之前面試某大廠的實習生被問到多型,後來又了解到一些設計模式,才體會到多型的強大,在這裡把對多型的一點點淺顯認識總結一下 虛表 class test cout sizeof test endl test p new test p vfunc 將類指標p強...
虛函式與多型 C
引用和指標的靜態型別 編譯時可知的引用型別或指標型別 和動態型別 指標或引用所繫結的物件的型別,執行時獲知 可以不同。因此,可以用基類的指標或引用指向派生類的物件,再通過基類的指標或引用來呼叫虛函式,所執行的虛函式是引用或指標所指向的物件所屬型別定義的版本。c 函式預設不使用動態繫結,除非滿足兩個條...