c 學習筆記(三)多型性

2021-07-04 18:13:57 字數 1751 閱讀 6454

本文介紹了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 向上轉型 虛擬方法呼叫 通過父類的引用指向子類的物件實體,所以在方法呼叫時,實際執行的是子類...