c++虚基类问题

2025-05-06 09:10:16
推荐回答(2个)
回答1:

这里是 ”虚基类和支配“的概念,如果使用的是虚基类,如上述的A和B,
A就是B的虚基类。
虚基类与非虚基类在解释二义性方面有所不同,
虚基类解释二义性时更加宽容。对于虚基类,如果某个名称优先于(dominates)其他所有名称, 则使用它,即使不用限定符,也不会导致二义性。dominates 有时也叫支配,
但这是不易理解的翻译方法。优先于(或者支配)的含义是,派生类中的名称优先于(或支配) 直接或者间接祖先类中的相同名称
在这里就是B的f()优先于A的f(),或者叫做B的f()支配A的f(),在main()函数中的d.f()用的就是class B 的版本,没有限定符,就是用优先的版本
说的够清楚吧,明白了吧

回答2:

"B中定义的f()支配A中定义的f()"

意思就是子类B中如果复写了父类的f()方法,那么当创建一个B类对象后,调用f()方法时,将调用的是B类的f()方法。如果B类没有复写f()方法(即B类里没有f()方法),那么, 那么当创建一个B类对象后,调用f()方法时,将调用的是A类的f()方法。