c++ 类的多承继承中,第一层的父类中的虚函数

2024-10-31 02:20:05
推荐回答(2个)
回答(1):

  你的问题是C++中的多继承机制导致的 菱形继承问题(如下图所示) 的一个特例。

  1. 菱形问题是指R1中的成员在C1中会有两个拷贝。

  2. 当A1、B1使用virtual来继承R1时,菱形问题得到解决。


  3. 当A1、B1分别重载实现了R1中的相同的成员函数时,问题又来了:

  C1中有两个签名完全相同的函数,分别来自A1(void A1::print( ) )、B1(void B1::print( ) ),当C1对象调用print时,是调用 A1::print 还是 B1::print? 无法判断。


  4. 如果C1中也实现了 void print( )函数,那么C1对象调用print时自然会调用C1::print( ),问题得以解决。这也是为什么“C类中没有 写print 会产生上面说的错误”的原因。

回答(2):

你这样会有动态绑定,试试每个print()都写成虚函数。