欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++ 虛函數(shù)與純虛函數(shù)的使用與區(qū)別

 更新時(shí)間:2021年08月11日 11:52:39   作者:胡小牧  
本文主要介紹了C++ 虛函數(shù)與純虛函數(shù)的使用與區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

什么是虛函數(shù):

虛函數(shù) 是在基類(lèi)中使用關(guān)鍵字 virtual 聲明的函數(shù),在C++ 語(yǔ)言中虛函數(shù)可以繼承,當(dāng)一個(gè)成員函數(shù)被聲明為虛函數(shù)之后,其派生類(lèi)中的同名函數(shù)都自動(dòng)生成為虛函數(shù),

虛函數(shù)主要體驗(yàn)C++的多態(tài)方面,(多態(tài)是參數(shù)個(gè)數(shù)和類(lèi)型相同而實(shí)現(xiàn)功能不同的函數(shù))

為了更好的里面虛函數(shù)請(qǐng)看下面的demo

#include <iostream>
#include <string>
using namespace std;
 
class Aname
{
public:
     virtual void function_name()
     {
          cout << "Aname調(diào)用了function_name" << endl;
     }
};
 
class Bname:public Aname
{
public:
     void function_name()
     {
          cout << "Bname調(diào)用了function_name" << endl;
     }
};
 
int main()
{
     Aname *a = new Bname();
     a->function_name();
     
}

這里由于類(lèi)Aname 里面的function_name 被聲明為虛函數(shù), 所以雖然指針a 指向Aname 卻調(diào)用了

Bname 里面的function_name

打印結(jié)果為

如果類(lèi)Aname 里面的函數(shù)沒(méi)有聲明虛函數(shù), 是調(diào)用A里面的函數(shù)的,

虛函數(shù)的注意事項(xiàng):

1 只有類(lèi)的成員函數(shù)才能為虛函數(shù)

2 靜態(tài)成員函數(shù)不能為虛函數(shù),內(nèi)聯(lián)函數(shù)和構(gòu)造函數(shù)不能為虛函數(shù)

純虛函數(shù)

是指被表明為不被具體實(shí)現(xiàn)的虛成員函數(shù),它不具備函數(shù)的功能,它在基類(lèi)中沒(méi)有定義,但要求任何派生類(lèi)都要定義自己的實(shí)現(xiàn)方法。在基類(lèi)中實(shí)現(xiàn)純虛函數(shù)的方法是在函數(shù)原型后加"=0"

例如:

virtual void funtion1()=0

demo 認(rèn)識(shí)下純虛函數(shù)

#include <iostream>
#include <string>
using namespace std;
 
class Aname
{
public:
     virtual void function_name() = 0;
};
 
class Bname : public Aname
{
public:
     void function_name()
     {
          cout << "Bname調(diào)用了function_name" << endl;
     }
};
 
int main()
{
     Aname *a = new Bname();
     a->function_name();
}

純虛函數(shù)的注意事項(xiàng):

1 純虛函數(shù)不能被實(shí)例化

2 virtual void function_name() = 0; 中 viertual 不能去掉,否則會(huì)報(bào)錯(cuò)

虛函數(shù)與純虛函數(shù)區(qū)別

1. 虛函數(shù)和純虛函數(shù)可以定義在同一個(gè)類(lèi)(class)中,含有純虛函數(shù)的類(lèi)被稱(chēng)為抽象類(lèi)(abstract class),而只含有虛函數(shù)的類(lèi)(class)不能被稱(chēng)為抽象類(lèi)(abstract class)。

2. 虛函數(shù)可以被直接使用,也可以被子類(lèi)(sub class)重載以后以多態(tài)的形式調(diào)用,而純虛函數(shù)必須在子類(lèi)(sub class)中實(shí)現(xiàn)該函數(shù)才可以使用,因?yàn)榧兲摵瘮?shù)在基類(lèi)(base class)只有聲明而沒(méi)有定義。

3. 虛函數(shù)和純虛函數(shù)都可以在子類(lèi)(sub class)中被重載,以多態(tài)的形式被調(diào)用。 

4. 虛函數(shù)和純虛函數(shù)通常存在于抽象基類(lèi)(abstract base class -ABC)之中,被繼承的子類(lèi)重載,目的是提供一個(gè)統(tǒng)一的接口。

5. 虛函數(shù)的定義形式:virtual {method body}

  純虛函數(shù)的定義形式:virtual { } = 0;

在虛函數(shù)和純虛函數(shù)的定義中不能有static標(biāo)識(shí)符,原因很簡(jiǎn)單,被static修飾的函數(shù)在編譯時(shí)候要求前期bind,然而虛函數(shù)卻是動(dòng)態(tài)綁定(run-time bind),而且被兩者修飾的函數(shù)生命周期(life recycle)也不一樣。 

6. 虛函數(shù)必須實(shí)現(xiàn),如果不實(shí)現(xiàn),編譯器將報(bào)錯(cuò),錯(cuò)誤提示為:

error LNK****: unresolved external symbol "public: virtual void __thiscall
ClassName::virtualFunctionName(void)"

7. 對(duì)于虛函數(shù)來(lái)說(shuō),父類(lèi)和子類(lèi)都有各自的版本。由多態(tài)方式調(diào)用的時(shí)候動(dòng)態(tài)綁定。 

8. 實(shí)現(xiàn)了純虛函數(shù)的子類(lèi),該純虛函數(shù)在子類(lèi)中就編程了虛函數(shù),子類(lèi)的子類(lèi)即孫子類(lèi)可以覆蓋

該虛函數(shù),由多態(tài)方式調(diào)用的時(shí)候動(dòng)態(tài)綁定。

9. 虛函數(shù)是C++中用于實(shí)現(xiàn)多態(tài)(polymorphism)的機(jī)制。核心理念就是通過(guò)基類(lèi)訪問(wèn)派生類(lèi)定義的

函數(shù)

10. 多態(tài)性指相同對(duì)象收到不同消息或不同對(duì)象收到相同消息時(shí)產(chǎn)生不同的實(shí)現(xiàn)動(dòng)作。C++支持兩種多態(tài)性:編譯時(shí)多態(tài)性,運(yùn)行時(shí)多態(tài)性。
a.編譯時(shí)多態(tài)性:通過(guò)重載函數(shù)實(shí)現(xiàn)
b 運(yùn)行時(shí)多態(tài)性:通過(guò)虛函數(shù)實(shí)現(xiàn)。

11. 如果一個(gè)類(lèi)中含有純虛函數(shù),那么任何試圖對(duì)該類(lèi)進(jìn)行實(shí)例化的語(yǔ)句都將導(dǎo)致錯(cuò)誤的產(chǎn)生,因?yàn)槌橄蠡?lèi)(ABC)是不能被直接調(diào)用的。必須被子類(lèi)繼承重載以后,根據(jù)要求調(diào)用其子類(lèi)的方法。

到此這篇關(guān)于C++ 虛函數(shù)與存虛函數(shù)的使用與區(qū)別的文章就介紹到這了,更多相關(guān)C++ 虛函數(shù)與存虛函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++初級(jí)線程管理

    C++初級(jí)線程管理

    這篇文章主要介紹了C++初級(jí)線程管理,C++11中提供了std::thread庫(kù),本文將從線程的啟動(dòng)、線程等待、線程分離、線程傳參、線程識(shí)別等幾個(gè)方面介紹初級(jí)線程管理的知識(shí),需要的朋友可以參考一下
    2021-12-12
  • MFC創(chuàng)建模態(tài)對(duì)話框和非模態(tài)對(duì)話框的方法

    MFC創(chuàng)建模態(tài)對(duì)話框和非模態(tài)對(duì)話框的方法

    這篇文章主要介紹了MFC創(chuàng)建模態(tài)對(duì)話框和非模態(tài)對(duì)話框的方法,需要的朋友可以參考下
    2014-07-07
  • Dashboard Interface 應(yīng)用實(shí)現(xiàn)操作

    Dashboard Interface 應(yīng)用實(shí)現(xiàn)操作

    Dashboard Server Remote Control Interface是一個(gè)關(guān)鍵的功能,它為用戶提供了通過(guò)TCP/IP協(xié)議遠(yuǎn)程控制機(jī)器人的能力,執(zhí)行包括開(kāi)關(guān)機(jī)、加載程序、檢查機(jī)器人狀態(tài)以及設(shè)置機(jī)器人操作模式等多種操作,本文介紹Dashboard Interface 應(yīng)用操作,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • QT編寫(xiě)簡(jiǎn)單登錄界面的實(shí)現(xiàn)示例

    QT編寫(xiě)簡(jiǎn)單登錄界面的實(shí)現(xiàn)示例

    登陸界面是網(wǎng)頁(yè)中常見(jiàn)的界面,本文主要介紹了QT編寫(xiě)簡(jiǎn)單登錄界面的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • 基于Windows API分解路徑問(wèn)題的詳解

    基于Windows API分解路徑問(wèn)題的詳解

    本篇文章是對(duì)Windows API分解路徑進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++多重繼承及多態(tài)性原理實(shí)例詳解

    C++多重繼承及多態(tài)性原理實(shí)例詳解

    這篇文章主要介紹了C++多重繼承及多態(tài)性原理實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • C++結(jié)構(gòu)體數(shù)組詳細(xì)解析

    C++結(jié)構(gòu)體數(shù)組詳細(xì)解析

    定義結(jié)構(gòu)體數(shù)組和定義結(jié)構(gòu)體變量類(lèi)似,定義結(jié)構(gòu)體數(shù)組時(shí)只需聲明其為數(shù)組即可
    2013-10-10
  • C++中的三大函數(shù)和操作符重載(Boolan)

    C++中的三大函數(shù)和操作符重載(Boolan)

    本文主要介紹了C++中的三大函數(shù)和操作符重載(Boolan)的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • C++實(shí)現(xiàn)坦克大戰(zhàn)小游戲EGE圖形界面

    C++實(shí)現(xiàn)坦克大戰(zhàn)小游戲EGE圖形界面

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)坦克大戰(zhàn)小游戲EGE圖形界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Linux頁(yè)面置換算法的C語(yǔ)言實(shí)現(xiàn)

    Linux頁(yè)面置換算法的C語(yǔ)言實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Linux頁(yè)面置換算法的C語(yǔ)言實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12

最新評(píng)論