C++中的多继承

多重继承:类有多个直接基类的继承。派生类继承所有基类的成员,通过在派生列表中指定多个基类而定义多个基类,每个基类需要一个单独的访问标号。若不定义访问标号,默认为private。

class DerivedPoint :public PointA,public PointB 
{


};


派生类构造函数初始化所有基类

构造函数初始化式只能控制用于初始化基类的值,不能控制基类的构造次序。基类构造函数按照基类构造函数在类派生列表中的出现次序调用。

构造函数调用次序既不受构造函数初始化列表中出现的基类的影响,也不受基类在构造函数初始化列表中的出现次序的影响。

析构函数调用的次序与构造函数相反。

 

多重继承下的名字查找

多个基类作用域可以包含子类作用域。成员函数中使用的名字查找首先在函数本身进行,如果不能在本地找到名字,就继续在成员的类中查找,然后依次查找每个基类。在多重继承下,查找同时检查所有基类继承子树,如果在多个子树中找到该名字,则那个名字的使用必须显示指定使用哪个基类,否则,改名字的使用是二义性的。

如果两个基类都定义了同一个函数:

void print();

但是在派生类中更没有定义该函数,在使用该类的对象调用函数print()时,将产生二义性。必须明确的声明调用哪个基类的print()函数。dp.PointA::print();

 

首先发生名字查找

 

即使两个print()函数函数的形参表不同也是二义性。两个print()函数在两个基类中的一个对于子类可见,为public一个不可见为private,也是二义性。这是因为编译器首先找到一个匹配的声明,找到两个就是有二义性。然后才判断找到的声明是否合法。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值