能否用同乙個呼叫形式來呼叫派生類和基類的同名函式。在程式中,不是通過不同的物件名去呼叫不同派生層次中的同名函式,而是通過指標呼叫它們。
c++中的虛函式就是用來解決動態多型問題的。所謂虛函式,就是在基類宣告函式是虛擬的,並不是實際存在的函式,然後在派生類中才正式定義此函式。
下面給出乙個例子
#include #include using namespace std;
const double pi = 3.14;
class student
void display()
};class gradstudent:public student
void display()
};int main()
執行結果如下圖
程式說明:基類指標是用來指向基類物件的,如果用它指向派生類物件,則自動進行指標型別轉換,這樣基類指標指向的是派生類物件中的基類部分。
虛函式突破了以上的限制,在基類中的display函式被宣告為虛函式。在宣告派生類時被過載,這時派生類的同名函式display就取代了其基類中的虛函式。
當把基類的某個成員函式宣告為虛函式後,允許在其派生類中對該函式重新定義,賦予它新的功能,並且可以通過指向基類的指標指向同一類族中不同類的物件,從而呼叫其中的同名函式。
虛函式的使用方法:
(1)在基類中用virtual宣告成員函式為虛函式。在類外定義虛函式時,不必再加virtual。
(2)在派生類中重新定義此函式時,函式名、函式型別、函式引數個數和型別必須與基類的虛函式相同,函式體根據派生函式的需要重新定義。
當乙個成員函式被定義為虛函式時,其派生類中的同名函式都自動成為虛函式。
(3)定義乙個指向基類物件的指標變數,並使它指向同一類族中需要呼叫該函式的物件。
(4)通過該指標變數呼叫此函式,此時呼叫的就是指標變數指向的物件的同名函式。
虛函式處理的是不同派生層次上的同名函式的問題。
修改為虛函式後
#include #include using namespace std;
const double pi = 3.14;
class student
virtual void display()
};class gradstudent:public student
void display()
};int main()
結果如下:
多型性 虛函式
先來講講賦值相容規則。前面說過,派生類如果是從基類公有繼承的,則它會包含基類中除建構函式和析構函式外的所有成員,基類的公有成員也成為派生類的公有成員,又因為物件只能訪問類的公有成員,所以基類物件具有的功能,派生類物件都有。這樣就引出了賦值相容規則。賦值相容規則就是指在基類物件可以使用的地方都可以用公...
多型性 虛函式
虛函式是過載的另一種表現形式,是一種動態的過載方式。虛函式呼叫與函式體之間的聯絡在執行時才建立。c 中可以用基類的物件指標可以指向它的公有派生物件,當它指向公有派生類物件時,只能訪問派生類中從基類繼承來的成員,而不能訪問派生類中定義的成員。當指標指向不同的物件時,分別呼叫不同類的成員函式,如果將函式...
多型性和虛函式
11.27 多型指的是同樣的資訊被不同型別的物件接收導致不同的行為,包括 靜態多型性和動態多型性。靜態多型性包括 函式過載和運算子過載 動態多型主要 由虛函式實現。虛函式宣告 virsual 型別說明符 函式名 參數列 純虛函式 virtual 函式型別 函式名 參數列 0 在派生類中定義 抽象類 ...