国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C++ 繼承,虛繼承(內存結構)詳解

C++ 繼承,虛繼承(內存結構)詳解

2022-01-10 15:15很酷很愛笑 C/C++

C++繼承和虛繼承的內存模型是一個老生常談的話題,實現方法主要依賴于編譯器,本文從多個角度通過代碼詳解C++中虛繼承的內存模型知識,感興趣的朋友跟隨小編一起看看吧

普通的公有繼承

class test1
{
public:
  test1(int i) :num1(i) {}
private:
  int num1;
};
class test2 : public test1
{
public:
  test2(int i,int j) : test1(i), num2(j)
  {
  }
private:
  int num2;
};
void main()
{
  test2 t2(1,2);
}

(test2內存結構)查看內存發現父類在子類的上面

C++ 繼承,虛繼承(內存結構)詳解

 

多重繼承

在原有的代碼基礎上增加了test3類

test3類繼承了 test2和test1

class test1
{
public:
  test1(int i) :num1(i) {}
private:
  int num1;
};
class test2
{
public:
  test2(int i) : num2(i)
  {
  }
private:
  int num2;
};
class test3 :public test2 ,public test1
{
public:
  test3(int i, int j,int k) :test1(i), test2(j),num3(k) {}
private:
  int num3;
};
void main()
{
  test3 t3(1, 2, 3);
}

(test3內存地址 ) 依舊是父類在子類上

但是現在有兩個父類為什么test2在test1上?

這和我們的繼承順序有關 我們先繼承了test2又繼承了test1 更換內存繼承順序 內存的情況也會有所變化

C++ 繼承,虛繼承(內存結構)詳解

 

虛繼承

class test1
{
public:
  test1(int i) :num1(i) {}
private:
  int num1;
};
class test2: virtual public test1
{
public:
  test2(int i,int j) :test1(i), num2(j)
  {
  }
private:
  int num2;
};
void main()
{
  test2 t2(1, 2);
}

(t2的內存) 我們發現虛繼承以后父類成員數據在子類成員數據下面了 首地址處莫名其妙多了四字節

這四字節就是我們的虛基類表的地址

C++ 繼承,虛繼承(內存結構)詳解

跟隨虛繼承表 其中存儲了本類距離父類對象的差值 通過差值能夠找到父類對象

C++ 繼承,虛繼承(內存結構)詳解

我們再看這個內存0x0082fbd8是t2的首地址 0x0082fbe0是父類的位置

0x0082fbd8 - 0x0082fbe0 == 8

就是本類距離父類對象的差值

C++ 繼承,虛繼承(內存結構)詳解

 

虛繼承(菱形繼承)

class test1
{
public:
  test1(int i) :num1(i) {}
private:
  int num1;
};
class test2: virtual public test1
{
public:
  test2(int i,int j) :test1(i), num2(j)
  {
  }
private:
  int num2;
};
class test3 :virtual public test1
{
public:
  test3(int i, int j) :test1(i), num3(j){}
private:
  int num3;
};
class test4 :public test2, public test3
{
public:
  test4(int i, int j, int k) :test1(i),test2(i,j), test3(i,j),num4(k)
  {
  }
private:
  int num4;
};
void main()
{
  test4 t4(1, 2,3);
}


test4的內存 我們看到 t2和t3都有自己的虛基類表地址 記錄了自己和父類的偏移

C++ 繼承,虛繼承(內存結構)詳解

兩個虛基類表的內容

現在我們計算一下 到爺爺類的差值是否正確

0x00FAFD50 - 0x00fafd3c == 14

0x00FAFD50 - 0x00fafd44 == C

C++ 繼承,虛繼承(內存結構)詳解

 

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/weixin_45012273/article/details/120401539

延伸 · 閱讀

精彩推薦
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
主站蜘蛛池模板: 成人av高清在线 | 国产亚洲精品久久久久动 | 一区二区三区国产视频 | 日韩精品一区二区在线观看视频 | 久久久91视频| 日本免费在线视频 | 狠狠操av| 亚洲一区中文字幕 | 毛片在线一区二区观看精品 | 免费在线看污视频 | 国产精品毛片久久久久久久 | 成人亚洲天堂 | 毛片国产 | 亚洲一区二区三区在线免费观看 | 国产精品一区在线 | 搞黄免费视频 | 91在线麻豆 | 日韩不卡一区二区三区 | 日本不卡高字幕在线2019 | 成人av观看 | 日韩一区二区不卡 | 日本午夜视频 | 亚洲男人av | 国产在线精品一区二区 | 国产在线精品一区 | 久艹在线 | 亚洲国产精品久久久久秋霞不卡 | 久久一二 | 成人影视免费 | 欧美大片aaaa在线观看 | 蜜桃免费一区二区三区 | 国产精品一二三区视频 | 大象视频成人在线观看 | 国产精品久久久久免费a∨ 欧美黄色精品 | 污视频免费网站 | 美日韩一区 | 瑟瑟视频在线观看 | 午夜视频在线观看网站 | 香蕉夜色 | 久久免费黄色网址 | 蜜桃视频一区二区 |