C 的中的繼承,多型和虛函式

2021-08-31 07:26:19 字數 2520 閱讀 3697

首先繼承,多型,虛函式,我們先了解一下各位的關係。

繼承是子類繼承父類,完成基礎功能的獲取,當然繼承有三種許可權,public,protect和private,如果不加許可權限定,預設繼承是私有繼承

許可權表如下:

所以可以看到凡私有成員,子類都不能用,不過有方法能用,這裡不討論。

多型:實際上就是通過繼承實現的,函式的多型性是指乙個函式被定義成多個不同引數的函式。當你呼叫這個函式時,就會呼叫不同的同名函式。當然是不同的物件,也就是不同的類進行了虛函式的重寫。

虛函式:虛函式有兩種,一種是純虛函式,一種是就是非純虛函式。純虛函式只要申明一下,不需要定義,但非純虛函式是需要定義的(實現的)。只要包含有純虛函式的類,就稱為抽象類。抽象類是不能被例項化的。

虛函式的申明:

虛函式

父類:virtual void getsize() const;

子類:void getsize() const override;

純虛函式:

父類:virtual void pest_virt() const = 0;

子類:void pest_virt() const override;

上面的const可以去掉,加上去的意思據說是防止過載,也就是防止引數變化

這裡以幾段**試了一下:

定義兩個類,annimal和pest

#ifndef duotaijingtai_animal_h

#define duotaijingtai_animal_h

#include class animal ; ///申明建構函式不能沒有中括號,否則會報錯,未定義的annimal,很懵逼

~animal(){};

static void print(std::string &a);

void gettpye();

static std::string type;

virtual void getsize() const;

virtual void who() ;

};class cat:animal;

void getsize() const override;

void who() ;

void claw();

};class pest;

virtual void pest_virt()=0;

};class worm:public pest;

virtual void pest_virt() override;

};#endif //duotaijingtai_animal_h

其中annimal是普通的基類,pest是抽象類

下面是兩個類的定義

#include #include "../include/animal.h"

void animal:: print(std::string &a)

下面是輸出的結果,符合意料之中:

hello delete

changed in print

changed in get type

hello delete change

changed in get type

changed in get type

cat size

i am cat

i am a worm

那麼如何實現多型c++中的多型是用虛函式實現的: 子類覆蓋父類的虛函式, 然後宣告乙個指向子類物件的父類指標,聽起來有些拗口,實際上很簡單,操作一下

如base *b = new derive();

當呼叫b->f()時, 呼叫的是子類的derive::f(),如果f()沒有被重寫,那麼結果是一樣的,如果被重寫了,那麼就會實現子類的功能。

用我上面的code示例:

animal *unkown = new cat();

unkown->who();

輸出的結果是i am a cat,當有多個子類的時候,那麼就可以實現多中動物的描述,但是注意:這時候的父類指標只能呼叫父類內部有的成員,如果成員是在子類新建立的,那麼將無法呼叫。

比如我用unknow呼叫cat的claw成員函式

unkown->claw();
編譯器直接報錯:以上。我是通過這些**熟悉了上述三個名詞的關係,我覺的看再多還是要實際動手,當然我這只是入門級的理解,不過慢慢來,c++primer多看看,多寫**,自然就理解深刻了,加油,c++的同志們

C 虛函式和多型繼承

指標和引用是很好理解的,變數的引用相當於給變數取了個別名,在函式呼叫時,傳引用是會將引數列表的值改變的。include using namespace std int main 最終輸出的結果都是0x7ffdd9aff7b4,即為記憶體中儲存整型變數m的位址。對於虛函式,它是實現多型公有繼承的關鍵。...

C 繼承中的多型 虛函式 虛析構函式

從c 繼承中的相容原則中我們知道 父類指標可以直接指向子類物件,父類引用可以直接引用子類物件。當父類和子類有相同方法時呼叫的是父類方法,即是根據指標型別或引用型別來確定呼叫的方法型別的。如果我們想根據指標實際指向的物件型別 引用實際引用的型別 來決定呼叫的方法型別,需要把這個函式宣告為虛函式,這就是...

C 繼承 多型 虛函式

c 支援多繼承 class parent class parent2 class child public parent,private parent2公有繼承和私有繼承的區別 public parent 公有繼承,private和public都會繼承 private parent 私有繼承,只繼承...