C 中的多型性和純虛函式

2021-06-29 11:13:06 字數 2051 閱讀 9653

c++的多型性:

將子類物件的位址賦給父類物件的指標

,用該指標呼叫函式時,當子類中有這樣的函式,則呼叫子類的函式,如果沒有,則呼叫父類的函式,這種技術也被稱為

遲繫結技術

。。如果父類的函式沒有加virtual,則此時會呼叫父類的函式,這也被稱為早期繫結。下面看例子:

animal.h

[cpp]view plain

copy

print?

#ifndef animal_h_h

#define animal_h_h

class

animal;  

#endif

fish.h

[cpp]view plain

copy

print?

#include "animal.h"

#ifndef fish_h_h

#define fish_h_h

class

fish:

public

animal;  

#endif

animal.cpp

[cpp]view plain

copy

print?

#include "animal.h"

#include 

animal::animal(int

width,

intheight)  

void

animal::eat()  

void

animal::sleep()  

void

animal::breath()  

fish.cpp

[cpp]view plain

copy

print?

#include "fish.h"

#include 

fish::fish():animal(400,300),a(1)  

void

fish::breath()  

main.cpp

[cpp]view plain

copy

print?

#include "animal.h"

#include "fish.h"

intmain()  

此時就是延遲繫結,執行結果會顯示fish bubble,,如果將animal中breath函式的virtual去掉,則會顯示animal breath這就是早期繫結技術。

另外這段**還可以結合函式覆蓋 隱藏使用 將會更複雜,,下面有段**和執行結果,大家自己看看並思考:

[cpp]view plain

copy

print?

#include 

class

base  

void

yfn(

float

f)  

void

zfn()  

};  

class

derived : 

public

base  

void

yfn(

intc)  

void

zfn()  

};  

intmain()  

執行結果:

最後介紹下純虛函式,純虛函式沒有函式體實現,如同 virtual void breath()=0;此時對應的animal類就變成了抽象類(

含有純虛函式的類稱之為抽象類),抽象類不能例項化乙個物件,但可以有指標。具體的實現由其派生類來實現。

純虛函式多用在一些方法行為的設計上,在設計基類時,不太好確定或將來的行為多種多樣,而此行為又是必須的,我們就可以在基類的設計中,以純虛函式來宣告此種行為而不具體實現它。

c 多型性和純虛函式

多型性 多型性作用於基類和子類之間,如果基類的函式加了virtual稱為虛函式,則物件呼叫的函式則是他自己的函式 就是子類則呼叫它自己的函式,不會呼叫基類同名的虛函式 反之如果基類和子類之間同時存在同名函式,則呼叫基類函式。include using namespace std class anim...

C 多型性和虛函式

c 的多型性,我認為就是表達相同方法的函式在不同的類中的表現形式不同 舉個例子,比如 移動這一行為,人是用兩條腿在走路,烏龜是慢慢爬,蛇是爬行,老虎是四條腿在走,魚是在游動 這就是多型性 多型性使不同的物件但是又具有某種共同屬性的物件不但可以在一定程度上共享 還能共享介面。非靜態函式宣告的前面加上v...

C 虛函式和多型性

c 為了實現多型性,提供了靜態繫結 早 或者叫做編譯期繫結 和動態繫結 晚 兩種機制。靜態繫結中包括 1 函式過載 2 運算子過載 3 子類繼承父類時,父類中的函式沒有新增virtual關鍵字 非虛函式 父類指標指向子類的位址時,呼叫和父類同名的函式則會預設呼叫父類的同名函式,子類同名函式的不會被呼...