多重继承下的访问方式(P195)

/*

多重继承:
C++允许从多个类派生一个类,即一个派生类可同时有多个基类。
格式如下:
class 派生类名:继承方式说明符 基类名 1,继承方式说明符 基类名 2,~
{
类体
};

a、如果派生类中新增了同名成员,则派生类成员将隐藏所有基类的同名成员。使用“派生类对象名.成员名”或“派生类对象指针->成员名”的方式可以唯一标识和访问派生类新增成员。

b、如果派生类中没有新增同名成员,当满足访问权限时,使用“派生类对象名.成员名”或“派生类对象指针->成员名”方式时,系统无法判断到底是调用哪个基类成员,从而产生二义性。为了避免二义性,必须通过基类名和作用域分辨符来标识 成员。

*/

#include<iostream>
using namespace std;

class CB1
{
public:
int a; //重名
CB1(int x)
{
a=x;
}
void showa() //重名
{
cout<<"Class CB1==>a="<<a<<endl;
}
};

class CB2
{
public:
int a; //重名
CB2(int x)
{
a=x;
}
void showa() //重名
{
cout<<"Class CB2==>a="<<a<<endl;
}
};

class CD:public CB1,public CB2 //多重继承,两个基类
{
public:
int a;
CD(int x,int y,int z):CB1(x),CB2(y)
{
a=z;
}
void showa() //与两个基类成员变量a重名
{
cout<<"Class CD ==>a="<<a<<endl;
}
void print3a() //分别输出派生类的a及其两个基类的重名成员a
{
cout<<"a="<<endl;
cout<<"CB1::a="<<CB1::a<<endl;
cout<<"CB2::a="<<CB2::a<<endl;
}
};

int main()
{
CB1 CB1obj(11);
CB1obj.showa();
CD CDobj(101,202,909);
CDobj.showa(); //调用派生类showa()
CDobj.CB1::showa(); //调用基类shaowa()
cout<<"CDobj.a="<<CDobj.a<<endl; //访问派生类成员a
cout<<"CDobj.CB2::a="<<CDobj.CB2::a<<endl; //访问基类CB2中的成员a
return 0;
}

posted @ 2020-03-23 12:08  CollisionDimension  阅读(181)  评论(0)    收藏  举报