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

C++多繼承多態(tài)的實例詳解

 更新時間:2017年06月12日 17:12:29   投稿:lqh  
這篇文章主要介紹了C++多繼承多態(tài)的實例詳解的相關(guān)資料,需要的朋友可以參考下

C++多繼承多態(tài)的實現(xiàn)

如果一個類中存在虛函數(shù),在聲明類的對象時,編譯器就會給該對象生成一個虛函數(shù)指針,該虛函數(shù)指針指向該類對應(yīng)的虛函數(shù)表。

多態(tài)的實現(xiàn)是因為使用了一種動態(tài)綁定的機(jī)制,在編譯期間不確定調(diào)用函數(shù)的地址,在調(diào)用虛函數(shù)的時候,去查詢虛函數(shù)指針?biāo)赶虻奶摵瘮?shù)表。

派生類生成的對象中的虛函數(shù)指針指向的是派生類的虛函數(shù)表,因此無論是基類還是派生來調(diào)用,都是查詢的是派生類的表,調(diào)用的是派生類的函數(shù)。

如果發(fā)生了多繼承,多個基類中都有虛函數(shù),那么該是怎樣的呢?虛函數(shù)指針如何排列,多個基類的指針為什么能夠同時指向派生類對象,同時發(fā)生多態(tài)?

請看下面這段程序

#include <stdio.h>
#include <iostream>
using namespace std;

class Base1{

  public:
  void fun()
  {
    printf("this is Base1 fun\n");
  }
  virtual void fun1()
  {
    printf("this is Base1 fun1\n");
  }
};

class Base2{
  public:
  void fun()
  {
    printf("this is Base2 fun\n");
  }
  virtual void fun2()
  {
    printf("this is Base2 fun1\n");
  }
};

class Derived : public Base1,public Base2{
  public:
  void fun()
  {
    printf("this is Derived fun\n");
  }
  void fun1()
  {
    printf("this is Derived fun1\n");
  }
  void fun2()
  {
    printf("this is Derived fun2\n");
  }
};

int main()
{
  Derived *pd = new Derived();
  Base1 *p1 = (Base1 *)pd;
  Base2 *p2 = (Base2 *)pd;
  p1->fun();
  p2->fun();
  p1->fun1();
  p2->fun2();
  printf("Base1 p1:%x\n", p1);
  printf("Base2 p2:%x\n", p2);
  return 0;
}

運行結(jié)果如下

feng@mint ~/code/c++/cpp_muti_drived 
$ ./muti_derived 
this is Base1 fun
this is Base2 fun
this is Derived fun1
this is Derived fun2
Base1 p1:2097c20
Base2 p2:2097c28

Derived類分別繼承了Base1和Base2,根據(jù)結(jié)果來看,均發(fā)生了多態(tài)?;愔羔樥{(diào)用函數(shù),調(diào)用的均是派生類的對象。

通過打印出了p1和p2的地址,發(fā)現(xiàn)他們相差了8個字節(jié),就能明白了,在做類型轉(zhuǎn)換的過程中,如果把地址傳給第二個基類的指針的時候會自動把地址減去8,在64位系統(tǒng)下,剛好是一個指針的長度。因此p2指向的實際上是第二個虛函數(shù)指針的地址,這樣,就能夠?qū)崿F(xiàn)多繼承的多態(tài)了。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • C++?超詳細(xì)講解stack與queue的使用

    C++?超詳細(xì)講解stack與queue的使用

    C++?Stack(堆棧)?是一個容器類的改編,為程序員提供了堆棧的全部功能,也就是說實現(xiàn)了一個先進(jìn)后出(FILO)的數(shù)據(jù)結(jié)構(gòu),許多程序都使用了?queue?容器。queue?容器可以用來表示超市的結(jié)賬隊列或服務(wù)器上等待執(zhí)行的數(shù)據(jù)庫事務(wù)隊列
    2022-03-03
  • Java C++題解leetcode856括號的分?jǐn)?shù)

    Java C++題解leetcode856括號的分?jǐn)?shù)

    這篇文章主要為大家介紹了Java C++題解leetcode856括號的分?jǐn)?shù)實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 利用C語言解決八皇后問題以及解析

    利用C語言解決八皇后問題以及解析

    這篇文章主要給大家介紹了關(guān)于利用C語言解決八皇后問題以及解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • C語言中g(shù)etopt()函數(shù)和select()函數(shù)的使用方法

    C語言中g(shù)etopt()函數(shù)和select()函數(shù)的使用方法

    這篇文章主要介紹了C語言中g(shù)etopt()函數(shù)和select()函數(shù)的使用方法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C語言深入分析數(shù)組指針和指針數(shù)組的應(yīng)用

    C語言深入分析數(shù)組指針和指針數(shù)組的應(yīng)用

    在C語言和C++等語言中,數(shù)組元素全為指針變量的數(shù)組稱為指針數(shù)組,指針數(shù)組中的元素都必須具有相同的存儲類型、指向相同數(shù)據(jù)類型的指針變量。指針數(shù)組比較適合用來指向若干個字符串,使字符串處理更加方便、靈活
    2022-04-04
  • C++實現(xiàn)LeetCode(55.跳躍游戲)

    C++實現(xiàn)LeetCode(55.跳躍游戲)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(55.跳躍游戲),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++ COM編程之QueryInterface函數(shù)(一)

    C++ COM編程之QueryInterface函數(shù)(一)

    這篇文章主要介紹了C++ COM編程之QueryInterface函數(shù)(一),QueryInterface是組件本身提供對自己查詢的一個接口,需要的朋友可以參考下
    2014-10-10
  • C++中string替換所有指定字符串的方法

    C++中string替換所有指定字符串的方法

    這篇文章主要介紹了C++中string替換所有指定字符串的實例代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • C++關(guān)鍵字之likely和unlikely詳解

    C++關(guān)鍵字之likely和unlikely詳解

    這篇文章主要介紹了C++關(guān)鍵字之likely和unlikely,C++20之前的,likely和unlikely只不過是一對自定義的宏,而C++20中正式將likely和unlikely確定為屬性關(guān)鍵字,本文給大家詳細(xì)講解,需要的朋友可以參考下
    2022-10-10
  • c++中typename和class的區(qū)別介紹

    c++中typename和class的區(qū)別介紹

    在c++Template中,很多地方都用到了typename與class這兩個關(guān)鍵字,而且好像可以替換,是不是這兩個關(guān)鍵字完全一樣呢?
    2013-03-03

最新評論

乌鲁木齐县| 康保县| 兰坪| 台安县| 兴宁市| 革吉县| 上饶市| 兴山县| 定安县| 无极县| 神池县| 呼和浩特市| 泌阳县| 化州市| 珠海市| 纳雍县| 雷波县| 万宁市| 资源县| 鲁山县| 隆安县| 临高县| 祁门县| 西丰县| 大港区| 且末县| 桐梓县| 平度市| 稷山县| 平乡县| 呈贡县| 三明市| 彩票| 白玉县| 利辛县| 明星| 岳池县| 土默特右旗| 武威市| 温州市| 平果县|