如何解釋C 中的多型

2021-10-19 14:45:24 字數 1257 閱讀 8486

靜態(編譯時期)的多型:

1.函式過載

2.模板(函式模板、類模板)

動態(執行時期)的多型:

定義:在繼承結構中,基類指標/引用指向派生類物件,再通過該指標呼叫同名覆蓋方法(虛函式)。

基類指標指向哪個派生類物件就會呼叫哪個派生類物件的同名覆蓋方法,稱為『多型』

多型底層通過動態繫結實現。通過解引用訪問到派生類物件,再通過物件中的vfptr訪問它的vftable,再得到它的虛函式位址

#include#includeusing namespace std;

class animal

virtual void bark() = 0;

protected:

string _name;

};class cat :public animal

void bark()

};class mouse :public animal

void bark()

};class dog :public animal

void bark()

};//通過引用的動態繫結

//下面的bark api介面無法做到軟體設計要求的「開-閉」原則、高內聚低耦合

//「開-閉」原則:對修改關閉,對擴充套件開發。比如再增加或減少animal類時也不用刪掉bark api介面

/*void bark(cat& cat)

void bark(mouse& mouse)

void bark(dog& dog)

*///多型

//做到了低耦合,不會隨派生類改變而改變

void bark(animal& p)

int main()

繼承與多型的意義:

1.**的復用

2.在基類中提供統一的虛函式藉口,讓派生類進行重寫,然後使用多型(設計乙個基類指標指向不同的派生類物件)

抽象類:

//擁有純虛函式的類叫做抽象類

//抽象類不能例項化物件,只能定義指標/引用變數

class

animal

//純虛函式

//純虛函式是一種特殊的虛函式,在許多情況下,在基類中不能對虛函式給出有意義的實現,而把它宣告為純虛函式,它的實現留給該基類的派生類去做

virtual

void

bark()

=0;protected

: string _name;

};

如何解釋泛型

面試遇到的問題,當時回答的不是很好,再查詢一些資料後,把自己的心得寫下來 定義 泛型是一種特殊的型別,它把指定型別的工作推遲到客戶端 宣告並例項化類或方法的時候進行。這是泛型的基本定義,泛型可說是自.net 2.0中推出的眾多特性中相當重要的乙個,它解決了原先無法避免的容器操作的裝箱 拆箱問題。和....

我們如何解釋他人 歸因

性格歸因,即我們將行為解釋為行為者的內部原因,如性格 物質 情境歸因,即將行為解釋為外部環境的原因。我們每天都在做歸因,比如今天同事遲到了,我們就會在不覺中做一下歸因 這廝今天肯定是又犯懶賴床了 性格歸因 或者是他今天可能運氣不好碰上堵車了 情境歸因 我們在日常生活的歸因中普遍用到的手法可以由凱利的...

多型的解釋

多型就是指程式中定義的引用變數所指向的具體型別和通過該引用變數發出的方法呼叫在程式設計時並不確定,而是在程式執行期間才確定,即乙個引用變數倒底會指向哪個類的例項物件,該引用變數發出的方法呼叫到底是哪個類中實現的方法,必須在由程式執行期間才能決定。因為在程式執行時才確定具體的類,這樣,不用修改源程式 ...