日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++中虚函数、纯虚函数、普通函数三者的区别

發(fā)布時(shí)間:2024/7/23 c/c++ 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中虚函数、纯虚函数、普通函数三者的区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自:https://www.cnblogs.com/cj2014/p/7692707.html
1.虛函數(shù)(impure virtual)
  C++的虛函數(shù)主要作用是“運(yùn)行時(shí)多態(tài)”,父類中提供虛函數(shù)的實(shí)現(xiàn),為子類提供默認(rèn)的函數(shù)實(shí)現(xiàn)。
子類可以重寫父類的虛函數(shù)實(shí)現(xiàn)子類的特殊化。
如下就是一個(gè)父類中的虛函數(shù):

class A { public:virtual void out2(string s){cout<<"A(out2):"<<s<<endl;} };

2.純虛函數(shù)(pure virtual)

  C++中包含純虛函數(shù)的類,被稱為是“抽象類”。抽象類不能使用new出對(duì)象,只有實(shí)現(xiàn)了這個(gè)純虛函數(shù)的子類才能new出對(duì)象。
  C++中的純虛函數(shù)更像是“只提供申明,沒有實(shí)現(xiàn)”,是對(duì)子類的約束,是“接口繼承”。
  C++中的純虛函數(shù)也是一種“運(yùn)行時(shí)多態(tài)”。
  如下面的類包含純虛函數(shù),就是“抽象類”:

class A { public:virtual void out1(string s)=0;virtual void out2(string s){cout<<"A(out2):"<<s<<endl;} };

3.普通函數(shù)(no-virtual)

  普通函數(shù)是靜態(tài)編譯的,沒有運(yùn)行時(shí)多態(tài),只會(huì)根據(jù)指針或引用的“字面值”類對(duì)象,調(diào)用自己的普通函數(shù)。
  普通函數(shù)是父類為子類提供的“強(qiáng)制實(shí)現(xiàn)”。
  因此,在繼承關(guān)系中,子類不應(yīng)該重寫父類的普通函數(shù),因?yàn)楹瘮?shù)的調(diào)用至于類對(duì)象的字面值有關(guān)。

4.程序綜合實(shí)例

#include <iostream> using namespace std;class A { public:virtual void out1()=0; //由子類實(shí)現(xiàn):純虛函數(shù)由子類實(shí)現(xiàn)virtual ~A(){};virtual void out2() //默認(rèn)實(shí)現(xiàn):子類可以重寫函數(shù)。虛函數(shù)是為了允許用基類的指針來(lái)調(diào)用子類的函數(shù){cout<<"A(out2)"<<endl;}void out3() //強(qiáng)制實(shí)現(xiàn):子類不應(yīng)該重寫函數(shù){cout<<"A(out3)"<<endl;} };class B:public A { public:virtual ~B(){};void out1(){cout<<"B(out1)"<<endl;}void out2(){cout<<"B(out2)"<<endl;}void out3(){cout<<"B(out3)"<<endl;}//自己添加的void out4()//子類中可以有父類沒有的函數(shù){cout<<"B(out4)"<<endl;} }; int main() { A *ab=new B; ab->out1(); ab->out2(); ab->out3(); cout<<"************************"<<endl; B *bb=new B; bb->out1(); bb->out2(); bb->out3(); delete ab; delete bb; return 0; }

運(yùn)行結(jié)果:

B(out1) B(out2) A(out3) ***************** B(out1) B(out2) B(out3)

定義一個(gè)函數(shù)為虛函數(shù),不代表函數(shù)為不被實(shí)現(xiàn)的函數(shù)。
定義他為虛函數(shù)是為了允許用基類的指針來(lái)調(diào)用子類的這個(gè)函數(shù)。
定義一個(gè)函數(shù)為純虛函數(shù),才代表函數(shù)沒有被實(shí)現(xiàn)。
定義純虛函數(shù)是為了實(shí)現(xiàn)一個(gè)接口,起到一個(gè)規(guī)范的作用,規(guī)范繼承這個(gè)類的程序員必須實(shí)現(xiàn)這個(gè)函數(shù)

總結(jié)

以上是生活随笔為你收集整理的C++中虚函数、纯虚函数、普通函数三者的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。