最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ 多態(tài)性虛函數(shù)和動態(tài)綁定學習筆記

 更新時間:2023年10月26日 09:33:51   作者:Totn  
這篇文章主要為大家介紹了C++ 多態(tài)性虛函數(shù)和動態(tài)綁定學習筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

C++ 多態(tài)性

C++中的多態(tài)性通過虛函數(shù)和動態(tài)綁定來實現(xiàn), 下面簡單介紹一下多態(tài)的實現(xiàn):

  • 虛函數(shù):在基類中聲明虛函數(shù),通過在成員函數(shù)前面加上virtual關(guān)鍵字來標識。虛函數(shù)允許子類對其進行重寫(覆蓋),從而實現(xiàn)多態(tài)。基類中的虛函數(shù)只有函數(shù)聲明,沒有具體的實現(xiàn)。
  • 動態(tài)綁定:基于對象的類型來選擇調(diào)用的函數(shù),而不是基于指針或引用的類型。在編譯時,編譯器會根據(jù)指針或引用的靜態(tài)類型進行函數(shù)調(diào)用;而在運行時,根據(jù)指針或引用所指向的對象的實際類型來決定調(diào)用哪個函數(shù)。這種在運行時確定調(diào)用的函數(shù)稱為動態(tài)綁定。
  • 虛函數(shù)表(vtable):編譯器會為每一個包含虛函數(shù)的類生成一個虛函數(shù)表,該表存儲了虛函數(shù)的地址。對象的內(nèi)存布局中會包含一個指向虛函數(shù)表的指針,稱為虛函數(shù)指針(vptr)。虛函數(shù)指針指向當前對象的虛函數(shù)表,通過虛函數(shù)表來找到具體的虛函數(shù)地址。
  • 多態(tài)調(diào)用過程:當通過指針或引用調(diào)用虛函數(shù)時,首先會根據(jù)指針或引用的靜態(tài)類型找到對應(yīng)的虛函數(shù)表,然后根據(jù)虛函數(shù)表中的偏移量找到具體的虛函數(shù)地址,最終調(diào)用對應(yīng)的函數(shù)。

示例代碼

class Animal {
public:
    virtual void sound() {
        std::cout << "動物能叫" << std::endl;
    }
};
class Dog : public Animal {
public:
    void sound() override {
        std::cout << "Dog's voice sounds like Wangwang." << std::endl;
    }
};
class Cat : public Animal {
public:
    void sound() override {
        std::cout << "Cat's voice sounds like Miaomiao." << std::endl;
    }
};
int main() {
    Animal* animalPtr;
    Dog dog;
    Cat cat;
    animalPtr = &dog;
    animalPtr->sound();  // 輸出: Dog's voice sounds like Wangwang.
    animalPtr = &cat;
    animalPtr->sound();  // 輸出: Cat's voice sounds like Miaomiao.
    return 0;
}

在上述示例中,Animal類是基類,DogCat類分別是派生類。它們都重寫(覆蓋)了基類的sound函數(shù)。通過基類指針animalPtr指向不同的派生類對象,并調(diào)用sound函數(shù)。在運行時,根據(jù)指針所指向的對象的實際類型來選擇調(diào)用哪個函數(shù),實現(xiàn)了多態(tài)性。

總之,C++中的多態(tài)通過虛函數(shù)和動態(tài)綁定來實現(xiàn)。虛函數(shù)允許子類對其進行重寫,動態(tài)綁定根據(jù)對象的實際類型來確定調(diào)用哪個函數(shù)。使用虛函數(shù)表和虛函數(shù)指針來實現(xiàn)動態(tài)綁定。這種機制能夠提供更靈活的代碼設(shè)計和對象行為的多樣性。

以上就是C++ 多態(tài)性虛函數(shù)和動態(tài)綁定學習筆記的詳細內(nèi)容,更多關(guān)于C++ 多態(tài)虛函數(shù)動態(tài)綁定的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C語言指針超詳細講解下篇

    C語言指針超詳細講解下篇

    指針提供了對地址操作的一種方法,因此,使用指針可使得?C?語言能夠更高效地實現(xiàn)對計算機底層硬件的操作。另外,通過指針可以更便捷地操作數(shù)組。在一定意義上可以說,指針是?C?語言的精髓
    2022-04-04
  • C語言中常用的幾個頭文件及庫函數(shù)

    C語言中常用的幾個頭文件及庫函數(shù)

    這篇文章主要介紹了C語言中常用的幾個頭文件及庫函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • 深入分析C中不安全的sprintf與strcpy

    深入分析C中不安全的sprintf與strcpy

    本篇文章是對C中不安全的sprintf與strcpy函數(shù)的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 淺析Boost智能指針:scoped_ptr shared_ptr weak_ptr

    淺析Boost智能指針:scoped_ptr shared_ptr weak_ptr

    雖然通過弱引用指針可以有效的解除循環(huán)引用,但這種方式必須在程序員能預見會出現(xiàn)循環(huán)引用的情況下才能使用,也可以是說這個僅僅是一種編譯期的解決方案,如果程序在運行過程中出現(xiàn)了循環(huán)引用,還是會造成內(nèi)存泄漏的
    2013-09-09
  • 解決 VSCode 編寫 C++11 代碼報紅問題分析

    解決 VSCode 編寫 C++11 代碼報紅問題分析

    今天在寫 C++ 代碼的時候用上 C++11 的特性,然后發(fā)現(xiàn) VSCode 雖然可以編譯通過,但是會在相應(yīng)位置報紅,這是怎么回事呢?下面小編給大家?guī)砹私鉀Q方法,一起看看吧
    2021-09-09
  • opengl實現(xiàn)任意兩點間畫圓柱體

    opengl實現(xiàn)任意兩點間畫圓柱體

    這篇文章主要為大家詳細介紹了opengl實現(xiàn)任意兩點間畫圓柱體,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • C語言 基本語法示例講解

    C語言 基本語法示例講解

    本篇文章主要講解C語言 基本語法,這里提供簡單的示例和代碼來詳細講解C語言的基本語法,開始學習C語言的朋友可以看一下
    2016-08-08
  • C++Vector容器常用函數(shù)接口詳解

    C++Vector容器常用函數(shù)接口詳解

    最近我學習了C++中的STL庫中的vector容器,對于常用容器,我們不僅要會使用其常用的函數(shù)接口,我們還有明白這些接口在其底層是如何實現(xiàn)的。所以特意整理出來一篇博客供我們學習
    2022-08-08
  • 詳解C語言解決經(jīng)典問題之兔子產(chǎn)子

    詳解C語言解決經(jīng)典問題之兔子產(chǎn)子

    有一對兔子,從出生后的第 3 個月起每個月都生一對兔子。小兔子長到第 3 個月后每個月又生一對兔子,假設(shè)所有的兔子都不死,問 30 個月內(nèi)每個月的兔子總數(shù)為多少?本文將用C語言解決這一經(jīng)典問題,需要的可以參考一下
    2022-03-03
  • 深入理解線程安全與Singleton

    深入理解線程安全與Singleton

    在編譯器未優(yōu)化的情況下順序如下:1.new operator分配適當?shù)膬?nèi)存;2.在分配的內(nèi)存上構(gòu)造Singleton對象;3.內(nèi)存地址賦值給_instance
    2013-09-09

最新評論

沁源县| 保定市| 遂溪县| 南丰县| 容城县| 桑植县| 远安县| 潼关县| 双辽市| 班玛县| 枣庄市| 乌拉特前旗| 红安县| 铁力市| 静海县| 元谋县| 林州市| 滨州市| 突泉县| 九台市| 洪湖市| 扶余县| 新巴尔虎左旗| 潞西市| 茌平县| 菏泽市| 灵宝市| 德州市| 城步| 广饶县| 托克托县| 定陶县| 香港| 道孚县| 巫溪县| 收藏| 太湖县| 扎兰屯市| 湖州市| 土默特右旗| 巴彦县|