C 虛函式與多型

2021-08-19 20:08:37 字數 1808 閱讀 2761

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 函式預設不使用動態繫結,除非滿足兩個條...