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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

C++ 虚函数与纯虚函数

發(fā)布時(shí)間:2024/4/11 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 虚函数与纯虚函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
純虛函數(shù)定義如下: virtual functionname (parameter ) =0 ;
類的一個(gè)成員定位虛函數(shù)的實(shí)際意義在于讓C++知道該函數(shù)并無意義,它的作用只是為了讓派生類進(jìn)行函數(shù)重載保留位置。純虛函數(shù)的定義方法就是在類的虛函數(shù)后面加上 “ =0 ” 標(biāo)記,類中一旦出現(xiàn)了純虛函數(shù)的定義,那么此類為抽象類。

實(shí)例 1.
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;

//抽象類定義
class abstractcls
{
?? public:
???? abstractcls (float speed, int total) //構(gòu)造函數(shù)
???? {
??????????? abstractcls::speed=speed;
??????????? abstractcls::total=total;
?????? }
???? virtual void showmember()=0;??? //純虛函數(shù)的定義
?? protected:
????? float speed;
????? int total;
};

class car public : abstractcls???? //抽象類派生類
{
?? public:
????? //派生類的構(gòu)造函數(shù),實(shí)現(xiàn)基類的構(gòu)造函數(shù)
????? car(int aird, float speed, int total):abstractcls(speed,total)
????? {
???????? car::aird=aird;
?????? }
?? virtual void showmember() //派生類函數(shù)重載
?? {
????? cout<<speed<<"1"<<total<<"2"<<endl;
?? }
protected:
?? int aird;
};

調(diào)用如下:
?
int main(void)
{
car b(250,150,4);
???? b.showmember();
return 0;
}

總結(jié),什么情況下需要使用純虛函數(shù):
1,當(dāng)想要在基類中抽象出一個(gè)方法,且該類被繼承類而不能被實(shí)例化時(shí)。
2,基類的方法必須在派生類中被實(shí)現(xiàn)時(shí)。
3,多個(gè)對(duì)象具有公共的抽象屬性,但卻有不同的實(shí)現(xiàn)要求時(shí)。


實(shí)例2. 類A有兩個(gè)純虛成員函數(shù) Lock(),unLock() 和一個(gè)虛析構(gòu)函數(shù)

class A {
??? public:
????? virtual void Lock(void)=0;
????? virtual void unLock(void)=0;
????? virtual ~A(void);
};

??????? 類A實(shí)際上并沒有實(shí)現(xiàn)這些函數(shù),只是聲明了他們。因?yàn)榫哂屑兲摵瘮?shù)任何類不能用于創(chuàng)建運(yùn)行時(shí)的對(duì)象,為了使用這個(gè)類,用戶必須從這個(gè)抽象類派生出一個(gè)派生類來。而且為抽象類聲明的每一個(gè)純虛函數(shù)提供函數(shù)的定義與實(shí)現(xiàn)。
B類從A類派生,并提供了2個(gè)純虛函數(shù)的定義。

class B :public A
{
public:
??? B(void);
??? ~B(void);
??? virtual void Lock(void) {pthread_mutex_lock(x);}
??? virtual void unLock(void) {pthread_mutext_unlock(x);}
protectd:
???? pthread _mutex_t x;
};

?????? B類通過POSIX 函數(shù) pthread_mutext_lock() 和 pthread_mutext_unlock() 已經(jīng)實(shí)現(xiàn)了兩個(gè)純虛函數(shù)。如果B只實(shí)現(xiàn)了其中的一個(gè)純虛函數(shù),那么B類仍然認(rèn)為是一個(gè)純抽象類,因?yàn)樗匀话粋€(gè)純虛函數(shù)。

總結(jié): 純虛函數(shù)充當(dāng)實(shí)現(xiàn)策略,它的任何用戶在使用前必須實(shí)現(xiàn)純虛函數(shù)。所以抽象類提供了規(guī)范。

總結(jié)

以上是生活随笔為你收集整理的C++ 虚函数与纯虚函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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