當前位置:
首頁 > 知識 > c++虛函數和純虛函數的幾點說明

c++虛函數和純虛函數的幾點說明

概念

虛函數

在類的成員函數定義前加 virtual 關鍵字,該函數將被作為虛函數。虛函數被繼承後仍為虛函數。虛函數的在子類中可以被override(覆蓋)、overload (重載 )

virtual string toString(){

}

1

2

3

純虛函數

純虛函數除了有virtual 關鍵字外,還令它等於0,以表為純虛函數。擁有純虛函數的類稱為 抽象類 。抽象類不能被實例化。類的繼承往往越往後越具體,相反地,越往祖先越抽象,以至於沒法實例代,其實也根本沒必要實例化。按照某本書上所說,之所以定義抽象類,是為了給以後的子類留下公共介面。我想有一定道理。

virtual string toString()=0;

1

一般地,我們不希望純虛函數的構造函數暴露。所以我們把構造函數設為 protected

class test {

int property1;

int attribute2;

virtual string toString() = 0;

protected:

test() {}

test(int p1, int p2) {

property1 = p1;

attribute2 = p2;

}

};

1

2

3

4

5

6

7

8

9

10

11

純虛函數被繼承後為 虛函數 ,請看下例。我們並沒有給類 sun 類中的 toString() 函數 virtual關鍵字卻實現了多態*,可見其從test類中繼承了的toString()函數為虛函數。

#include<iostream>

#include<string>

using namespace std;

class test {

virtual string toString() = 0;

};

struct child:test {

string toString() {

return "ccc";

}

};

struct sun:child

{

string toString() {

return "sss";

}

};

int main() {

sun s;

child* c;

c = &s;

cout<<c->toString()<<endl;

system("pause");

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

結果:

注意

重載函數雖同名,但其實是不同的函數,我們讓其中一種成為虛函數或者純虛函數,其它的同名函數(如果其它的都不加virtual)並不會成為虛函數或者純虛函數。在子類中,若重載了繼承過來的虛函數,那麼新的重載形式(即你的在子類中定義而在父類中沒有的同名函數)的函數不會是虛函數。在此就不再實驗,讀者自證之。

c++虛函數和純虛函數的幾點說明

打開今日頭條,查看更多精彩圖片
喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

nginx log記錄請求響應時間
pc端通過拖放實現添加、刪除功能

TAG:程序員小新人學習 |