C++--多重继承

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:29   932   0


在实际中,一个派生类可以派生出两个或者多个基类,派生类从两个或者多个基类中继承所需要的属性,在这种情况下,C++允许一个派生类同时继承多个基类。这称为多重继承。

多重继承的声明方法:

class D:public A,private:B,protected C
{
  类D新增的成员
}
D是多重继承的派生类,它以公有继承的方式继承A类,以私有继承的方式继承B类,以保护继承的方式继承C类。按照不同的方式继承A,B,C属性,确定各基类的成员在派生中的访问权限。

多重派生的构造函数

派生类构造函数名(总参数列表)基类1构造函数(参数列表),基类2构造函数(参数列表),基类2构造函数(参数列表),基类3构造函数(参数列表)
{
派生类中新增成员数据初始化语句
}
多重继承会继承引起二义性问题

(1)两个基类中有同名的成员

class A
{
 public:
 int a;
 void display();
};
classB
{
 public:
 int a;
 void display();
};
class C:public A, public B
{
 public:
 int b;
 void show();
};
在main函数中定义了C类对象C1:

C C1;
C1.a=3;
C1.display();
由于基类中A和B中都有成员 a 和成员函数 display,编译系统无法判别要访问的哪一个基类成员。可以用基类名限定:

C1.A::a =3;
C1.A:display();
(2)两个基类和派生类中都有同名成员,修改C类:

class C:public A, public B
{
 public:
 int a;
 void display();
};

同样的,在main中如下定义:

C C1;
C1.a=3;
C1.display();

则系统访问的是派生C中成员。

规则是:基类中的派生类成员被覆盖,屏蔽,或者说是不可见的,或者说是:派生类中的同名成员覆盖了基类的同名函数。

(3)类A和B是从同一个基类派生的。

class N
{
public:
    int a;
    void display();
};
class A:public N
{
    int a1;
};
class B:public N
{
    int a2;
};
class C:public A,public B
{
public:
    int a3;
    void show();
};
int main()
{
    C c1;
}
从程序中,我们可以得到C类中的数据成员和成员函数:

数据成员:

int A::a;

int A::a1;

int B::a;

int B::a2;

int a3;

成员函数:

void A::display();

void B:display();

void show();

如果要访问类N的派生类A的基类成员

c1.A::a=3;
c1.A::display();










分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP