[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;
}
但是前面兩個運行不出來結果,請問是怎麼回事?