C C 中虛函式詳解及其作用介紹

2022-09-27 10:24:14 字數 2862 閱讀 6145

目錄

虛函式 (virtual function) 指可以被子類繼承和覆蓋的函式.

基類宣告成員函式為虛函式的方法:

virtual [型別] 函式名([參數列列])

注: 在類外定義虛函式時, 不需再加 virtual.

虛函式的特點:

通過關聯 (binding), 我們可以把乙個識別符號和乙個儲存位址聯絡起來, 或者把乙個函式名與乙個類物件**在一起.

靜態關聯 (static binding) 指通過物件名呼叫虛函式. 在編譯時即可確定其呼叫的虛函式屬於哪一類

動態關聯 (dynamic binding) 是指通過基類指標與虛函式, 在執行階段確定關聯關係. 動態關聯提供動態的多型性, 即執行階段的多型性.

square 類:

#ifndef project6_square_h

#define project6_square_h

class square ;

int area() const

};#endif //project6_square_h

rectangle 類:

#ifndef project6_rectangle_h

#define project6_rectangle_h

#include "square.h"

class rectangle : public square;

int area() const

};#endif //project6_rectangle_h

main:

#include

#include "square.h"

#include "rectangle.h"

using namespace std;

int main()

輸出結果:

49 // 輸出的是底面積

此時呼叫的是 square 類的area()函式.

square 類:

#ifndef project6_square_h

#define project6_square_h

class square ;

virtual int area() const

};#endif //project6_square_h

rectangle 類:

#ifn程式設計客棧def project6_rectangle_h

#define project6_rectangle_h

#include "square.h"

class rectangle : public square;

int area() const

};#endif //project6_rectangle_h

main:

#include

#include "square.h"

#include "rectangle.h"

using namespace std;

int main()

輸出結果:

454 // 長方體的面積

此時呼叫的是 rectangle 類的area()函式.

animal 類:

#ifndef project6_animal_h

#define project6_animal_h

#include

using namespace std;

class animal

};#endif //project6_animal_h

dog 類:

#ifndef project6_dog_h

#define project6_dog_h

#include "animal.h"

class dog : public animal

};#endif //project6_dog_h

cat 類:

#ifndef project6_cat_h

#define project6_cat_h

#include "animal.h"

class cat : public animal

};#endif //project6_cat_h

pig 類:

#ifndef project6_pig_h

#define project6_pig_h

#include "animal.h"

class pig : public animal

};#endif //project6_pig_h

main:

#include

#include "animal.h"

#include "dog.h"

#include "cat.h"

#include "pig.h"

using namespace std;

int main()

輸出結果:

咋叫?汪汪!喵喵!

哼哼!虛函式只能是類的成員函式, 而不能將類外的普通函式宣告為虛函式. 虛函式的作用是允許在派生類中對基類的虛函式重新定義 (函式覆蓋), 只能用於類的繼承層次結構中.

虛函式能有效減少空間開銷. 當乙個類帶有虛函式時, 編譯系統會為該類構造乙個虛函式表 (乙個指標陣列), 用於存放每個虛函式的入口位址.

什麼時候應該使用虛函式:

有時候在定義虛函式的時候, 我們無需定義其函式體. 它的作用只是定義了乙個虛函式名, 具體的功能留給派生類去新增, 也就是純虛函式. 例如我們在上面的 animal 類的bark()函式就應該宣告為純虛函式, 因為 animal 為基類, 定義bark()函式實體並無意義.

本文標題: c/c++中虛函式詳解及其作用介紹

本文位址: /ruanjian/c/420718.html

C C 中組合詳解及其作用介紹

目錄 組合 composition 指在乙個類中另一類的物件作為資料成員.在平面上兩點連成一條直線,求直線的長度和直線中點的座標.要求 dot 類 ifndef project5 dot h define project5 dot h include using namespace std clas...

C C 中抽象類詳解及其作用介紹

目錄 抽象類 abstract class 是一些不用來定義物件程式設計客棧,而只作為基類被繼承的類.由於抽象類常用作基類,所以通常稱為抽象基類 abstract base class 定義抽象類的唯一目的,就是去建立派生類.我們在抽象類基礎上要定義出功能各異的派生類,再用這些派生類去建立物件.凡是...

C C 中字串流詳解及其作用介紹

目錄 檔案流類和字串流類都是 ostream,istream 和 iostream 類的派生類,因此對它們的操作方法是基本相同的.檔案流字串流 概念檔案流是以外存檔案為輸入輸出物件的資料流 字串流也 稱為記憶體流,以記憶體中使用者定義的字元陣列 字串 為輸入輸出的物件 相關流類 ifstream,o...