c++的多型性,我認為就是表達相同方法的函式在不同的類中的表現形式不同
舉個例子,比如:移動這一行為,人是用兩條腿在走路,烏龜是慢慢爬,蛇是爬行,老虎是四條腿在走,魚是在游動…….
這就是多型性
多型性使不同的物件但是又具有某種共同屬性的物件不但可以在一定程度上共享**,還能共享介面。
非靜態函式宣告的前面加上virtual修飾符,即可以把該函式宣告為虛函式
virtual
const
string name()const//函式宣告時在前面加virtual修飾符
1.虛函式可以被派生類重寫,從而提供該函式的適用於派生類的專門版本,這就表明了多型性,在不同的類中有不同的表現形式
2.虛函式可以不重寫,這樣繼承下來的虛函式保持其在基類中的定義,即派生類和基類使用同一函式版本
3.虛函式被重寫之後仍為虛函式,無論是否使用virtual修飾符
1.非多型呼叫
非多型呼叫是指不借助於指標或者引用的直接呼叫,非多型呼叫總是通過成員訪問符「.」進行,與普通的成員函式呼叫類似,不具備多型特徵
2.多型呼叫
借助於指標或者引用直接呼叫
在c++中,乙個基類的指標或者引用可以指向他的派生類物件,而且通過這樣的指標或者引用呼叫虛函式時,呼叫的是該指標或者引用實際所指向的物件所在類的那個重寫版本。
class base//宣告基類
//基類建構函式,並為變數賦初值
virtual
const
string my_name()const//虛函式的宣告
};class derived:public base//派生類宣告
const
string my_name()const//重寫基類虛函式,這就表明了一種多型性
};void show_ptr(base &p)
int main()
輸出結果:
base base
derived base//show_ptr引數為base類引用,但是卻返回派生類重寫的虛函式的值?
原因:
呼叫的是該指標或者引用實際所指向的物件所在類的那個重寫版本
因為第二次呼叫show_ptr的引數是派生類的引用dd,所以指向的是派生類所在的重寫了的虛函式,所以返回derived
注: 若把基類中my_name函式的virtual修飾符去掉,不宣告為虛函式,則輸出結果為:
base base
base base
此時呼叫show_ptr,返回的是基類中的my_name函式的返回值,因為show_ptr
函式的引數是基類的引用。
C 虛函式和多型性
c 為了實現多型性,提供了靜態繫結 早 或者叫做編譯期繫結 和動態繫結 晚 兩種機制。靜態繫結中包括 1 函式過載 2 運算子過載 3 子類繼承父類時,父類中的函式沒有新增virtual關鍵字 非虛函式 父類指標指向子類的位址時,呼叫和父類同名的函式則會預設呼叫父類的同名函式,子類同名函式的不會被呼...
c 多型性 虛函式
c 中多型性是指通過用virtual關鍵字來繫結同名同引數的函式,實現在編譯中進行後繫結,即在編譯過程中不繫結類,在執行時與具體的物件進行繫結,這樣就可以動態地與實際聯絡 比如乙個類 animal 有乙個虛函式breath 魚類 fish 也有函式breath 狗類 dog 函式breath 具體呼...
c 多型性 虛函式
虛函式與純虛函式的區別 1 擁有虛函式的類可以宣告物件,但擁有純虛函式的類不可以宣告物件 只能宣告乙個指標,並且不能給其分配記憶體 並且將這個類稱為抽象類 特點 1 虛函式是動態繫結的基礎。2 是非靜態的成員函式。在類的宣告中,在函式原型之前寫virtual。不能宣告為靜態函式 3 virtual ...