程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++中多繼承同名隱藏的兩種繼承方式

c++中多繼承同名隱藏的兩種繼承方式

編輯:C++入門知識

[cpp] 
虛基類的作用是為了避免派生類從基類中繼承過來的同名成員同時產生多個副本。 
圖解:
祖父類->兩個父親類-》一個孩子類
[cpp] 
#include<iostream> www.2cto.com
using namespace std; 
class base0{ 
    public: 
    int var0; 
    void fun0(){cout<<"member of baseo"<<endl;} 
}; 
class base1:virtual public base0{ 
    public: 
    int var1; 
}; 
class base2:virtual public base0{ 
    public : 
     
    int var2; 
}; 
class base:public base1,public base2{ 
    int var; 
    void fun(){cout<<"member of base"<<endl;} 
}; 
int mian(){ 
    base bb; 
    bb.var0=2; 
    bb.fun0(); 
    return 0; 

不用虛基類時

[cpp] 
#include<iostream> 
using namespace std; 
class base0{ 
    public: 
    int var0; 
    void fun0(){cout<<"member of baseo"<<endl;} 
}; 
class base1:public base0{ 
    public: 
    int var1; 
}; 
class base2:public base0{ 
    public : 
     
    int var2; 
}; 
class base:public base1,public base2{ 
    int var; 
    void fun(){cout<<"member of base"<<endl;} 
}; 
int mian(){ 
    base bb; 
    bb.base1::var0=2; 
    bb.base1::fun0(); 
    bb.base2::var0=3; 
    bb.base2::fun0(); 
    return 0; 

多繼承同名隱藏舉例
如果某派生類的多個基類擁有同名的成員,同時,派生類又新增了這樣的同名成員,在這種情況下,派生類的成員將隱藏所有基類的同名成員。
一個父親-》兩個孩子類

[cpp] 
#include<iostream> 
using namespace std; 
class base1{ 
    public: 
    int var; 
    void fun(){cout<<"member of bse1"<<endl;} 
}; 
class base2{ 
    public: 
    int var; 
    void fun(){cout<<"member of base2"<<endl;} 
}; 
class base:public base1,public base2{ 
    public: 
    int var; 
    void fun(){cout<<"member of base3"<<endl;} 
}; 
int main(){ 
    base bb; 
    base *mm=&bb; 
    bb.var=1; 
    bb.fun(); 
    bb.base1::var=2; 
    bb.base1::fun(); 
    mm->base2::var=3; 
    mm->base2::fun(); 
    return 0; 

但是前面兩個運行不出來結果,請問是怎麼回事?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved