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

C++多重繼承二義性原理實(shí)例解析

 更新時(shí)間:2020年06月25日 11:18:40   作者:知道了呀  
這篇文章主要介紹了C++多重繼承二義性原理實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

在派生類中對(duì)基類成員訪問(wèn)應(yīng)該是唯一的,但是在多繼承時(shí),可能會(huì)導(dǎo)致對(duì)基類某成員訪問(wèn)出現(xiàn)不一致的情況,這就是C++多繼承中的二義性。

有兩種繼承的情況會(huì)產(chǎn)生多義性

一、如果一個(gè)派生類從多個(gè)基類派生,而這些基類又有一個(gè)共同的基類,則在對(duì)該基類中聲明的成員變量進(jìn)行訪問(wèn)時(shí),可能產(chǎn)生二義性,繼承關(guān)系如下圖所示:

#include <iostream>
using namespace std;
 
class A{
public:
  int a;
};
 
class B1 : public A{
public:
  int b1;
};
 
class B2 : public A{
public:
  int b2;
};
 
class C : public B1, public B2{
public:
  int c;
};
int main(){
  C c1;
  c1.b1 = 100;
  c1.b2 = 200;
  c1.c = 300;
 
  c1.a = 500; //報(bào)錯(cuò),不能確定成員變量a具體在那個(gè)類
 
  cout << "end..." << endl;
  system("pause");
  return 0;
}

解決方法:虛繼承

注意:C++編譯系統(tǒng)在實(shí)例化C類時(shí),只會(huì)將虛基類A的構(gòu)造函數(shù)調(diào)用一次,忽略虛基類的其他派生類(class B1,class B2)對(duì)虛繼承的構(gòu)造函數(shù)的調(diào)用,從而保證了虛基類的數(shù)據(jù)成員不會(huì)被多次初始化。

在虛基類A中有一個(gè)虛指針指向一個(gè)虛表,虛表中記錄了虛基類與本類的地址偏移,通過(guò)這個(gè)地址偏移可以找到虛基類的成員變量a的地址

#include <iostream>
using namespace std;
 
class A{
public:
  int a;
};
 
class B1 : virtual public A{
public:
  int b1;
};
 
class B2 : virtual public A{
public:
  int b2;
};
 
class C : public B1, public B2{
public:
  int c1;
};
 
int main(){
  C c1;
  c1.b1 = 100;
  c1.b2 = 200;
  c1.c1 = 300;
 
  c1.a = 500; //虛繼承使得成員變量a只有一份拷貝,通過(guò)虛指針可以確定地址
 
  cout << "end..." << endl;
  system("pause");
  return 0;
}

二、一個(gè)派生類同時(shí)繼承兩個(gè)基類,這兩個(gè)基類存在相同的成員函數(shù)

#include<iostream>
using namespace std;
 
 
class Base1 {
public:
  void fun() {
    cout << "I am base-1 " << endl;
  };
};
 
class Base2
{
public:
  void fun() {
    cout << "I am base-2 " << endl;
  };
};
 
class A: public Base1, public Base2 {
public:
  void print() {
  }
};
 
int main() {
  A obj;
  obj.fun();  //調(diào)用的方法產(chǎn)生歧義
  system("pause");
  return 0;
}

解決方法:使用作用域運(yùn)算符::來(lái)解決,明確指向的方法,例如obj.Base1::fun()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++深入分析STL中map容器的使用

    C++深入分析STL中map容器的使用

    map在編程中是經(jīng)常使用的一個(gè)容器,本文來(lái)講解一下STL中的map,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • c++string字符串的比較是否相等問(wèn)題

    c++string字符串的比較是否相等問(wèn)題

    這篇文章主要介紹了c++string字符串的比較是否相等問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語(yǔ)言指針超詳細(xì)講解上篇

    C語(yǔ)言指針超詳細(xì)講解上篇

    指針提供了對(duì)地址操作的一種方法,因此,使用指針可使得?C?語(yǔ)言能夠更高效地實(shí)現(xiàn)對(duì)計(jì)算機(jī)底層硬件的操作。另外,通過(guò)指針可以更便捷地操作數(shù)組。在一定意義上可以說(shuō),指針是?C?語(yǔ)言的精髓
    2022-04-04
  • C++?棧和隊(duì)列的實(shí)現(xiàn)超詳細(xì)解析

    C++?棧和隊(duì)列的實(shí)現(xiàn)超詳細(xì)解析

    棧和隊(duì)列,嚴(yán)格意義上來(lái)說(shuō),也屬于線性表,因?yàn)樗鼈円捕加糜诖鎯?chǔ)邏輯關(guān)系為?"一對(duì)一"?的數(shù)據(jù),但由于它們比較特殊,因此將其單獨(dú)作為一章,做重點(diǎn)講解
    2022-03-03
  • c語(yǔ)言中static的用法詳細(xì)示例分析

    c語(yǔ)言中static的用法詳細(xì)示例分析

    以下是對(duì)c語(yǔ)言中static函數(shù)的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • strcat函數(shù)與strncat函數(shù)的深入分析

    strcat函數(shù)與strncat函數(shù)的深入分析

    本篇文章是對(duì)strcat函數(shù)與strncat函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++二叉樹(shù)的創(chuàng)建及遍歷詳情

    C++二叉樹(shù)的創(chuàng)建及遍歷詳情

    這篇文章主要介紹了C++二叉樹(shù)的創(chuàng)建及遍歷詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-07-07
  • C語(yǔ)言實(shí)現(xiàn)支持動(dòng)態(tài)拓展和銷(xiāo)毀的線程池

    C語(yǔ)言實(shí)現(xiàn)支持動(dòng)態(tài)拓展和銷(xiāo)毀的線程池

    這篇文章主要為大家介紹了C語(yǔ)言實(shí)現(xiàn)支持動(dòng)態(tài)拓展和銷(xiāo)毀的線程池,感興趣的小伙伴們可以參考一下
    2016-01-01
  • C++ windows LOG4plus的使用小結(jié)

    C++ windows LOG4plus的使用小結(jié)

    這篇文章主要介紹了C++ windows LOG4plus的使用小結(jié),本文通過(guò)圖文示例代碼相結(jié)合給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • C++ 中時(shí)間與時(shí)間戳的轉(zhuǎn)換實(shí)例詳解

    C++ 中時(shí)間與時(shí)間戳的轉(zhuǎn)換實(shí)例詳解

    這篇文章主要介紹了C++ 中時(shí)間與時(shí)間戳的轉(zhuǎn)換實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06

最新評(píng)論

昭苏县| 合川市| 北辰区| 青铜峡市| 云阳县| 万源市| 格尔木市| 三门峡市| 泸西县| 蓝田县| 开远市| 东宁县| 镶黄旗| 曲阳县| 英山县| 咸丰县| 永修县| 海林市| 云林县| 钟山县| 宝坻区| 鹤峰县| 班玛县| 德州市| 额济纳旗| 阿坝县| 修武县| 新源县| 涪陵区| 湟源县| 富锦市| 平阳县| 元阳县| 辽宁省| 邳州市| 揭阳市| 绥德县| 潞西市| 建德市| 双流县| 金门县|