本文介紹了c++程式設計中的多型性的概念及用法,多型性即是同樣的訊息發給不同派生類物件會產生多種形式的結果。
通過基類的指標或引用(指標控制代碼或引用控制代碼)呼叫乙個virtual函式時,c++動態地(在執行時)根據物件初始化的類選擇正確的函式來執行。
**如下:
#ifndef commission_h
#define commission_h
#include #include using std::string;
using std::cout;
class commissionemployee
void setname(const string &yourname )
string getname()const
void setnumber(const string &yournumb )
string getnumber()const
void setgrosssales(double sales )
double getgrosssales()const
void setcommissionrate( double rate)
double getcommissionrate()const
virtual double earning()const
virtual void print()const
void setbasesalary(double yoursalary)
double getbasesalary()const
virtual double earning()const
virtual void print()const
可以看出將基類和派生類的成員函式doubleearning()const和void print()const前加上virtual宣告為虛函式,並且將派生類物件位址賦給基類指標,基類指標呼叫
earning()和print()函式時,即可呼叫派生類的相應成員函式;相反,當不使用virtual時,基類指標呼叫的是基類自己的earning()和print()函式。當基類中的虛函式無意義時,可以將其宣告為純虛函式,及沒有任何實現的函式
如virtualearing() const =0或virtual earing() =0;
這樣在派生類中必須給出這一虛函式的各自的實現,也即各自過載基類的純虛函式 結果
basepluscommissionemployee *deriveptr = //使用向下強制轉換符dynamic_cast
dynamic_cast(commissionemployeeptr); //將基類指標轉換為派生類指標deriveptr
deriveptr->print();
此方法也可實現呼叫派生類的成員函式
當刪除乙個具有非虛析構函式的派生類物件,而乙個基類指標卻指向了該物件,則對它應用delete運算子,c++標準會指出這一行為未定義。這種問題的簡單方法,即在基類中建立virtua析構函式(在析構函式前加上virtual關鍵字),即使所有派生類的析構函式與基類的析構函式不同名。這樣,如果對乙個基類指標用delete運算子來顯示刪除它所指的類層次中的某個物件,那麼系統會根據指標所指物件呼叫相應類的析構函式。基類的析構函式在派生類析構函式呼叫之後呼叫。
物件導向的特徵三 多型性
1.多型性的理解 可以理解為乙個事物的多種形態 2.何為多型性 物件的多型性 父類的引用指向子類的物件 或子類的物件賦給父類的應用 person p new man object obj new date 3.多型性的使用 虛擬方法的呼叫 有了物件的多型性以後,我們在編譯期,只能呼叫父類中宣告的方法...
C 學習 多型性
多型性是指為乙個函式名關連多種含義的能力。具體來說,多型性指的是通過名為 晚期繫結 的一種特殊機制來為函式名稱關聯多個含義。多型性是物件導向程式設計的核心概念之一。這裡先舉乙個例子來,定義乙個基類figure類,基類中有個成員函式center,作用是將乙個圖形放在介面中心,具體實現是先呼叫刪除函式,...
java學習筆記 多型性
多型性 可以理解為乙個事物的多種表現形態 屬性不存在覆蓋的情況,所以不具有多型性。多型性的體現 1 方法的過載與重寫 2 子類物件的多型性 父類的引用指向子類物件person p new subperson 向上轉型 虛擬方法呼叫 通過父類的引用指向子類的物件實體,所以在方法呼叫時,實際執行的是子類...