【发布时间】:2018-08-22 19:39:26
【问题描述】:
我有两个类(A0 和 A1),它们有一个函数 foo(),一个 A0 有一个函数 bar(),它只调用 foo()。还有一个继承自 A0 和 A1 的 B 类。
B 除了从 A0 和 A1 继承之外什么都不做。
为什么拨打B->bar()没有歧义?
一个小代码示例
class A0
{
protected:
/*virtual*/ void foo() {std::cout << "A0" << std::endl; }
public:
void bar() {foo(); }
};
class A1
{
protected:
/*virtual*/ void foo() {std::cout << "A1" << std::endl; }
};
class B : public A0, public A1
{
protected:
//virtual void foo() override {A1::foo(); }
};
int main()
{
B *lPtr = new B;
lPtr->bar(); //"A0" without the override, "A1" with the override
delete lPtr;
return 0;
}
如果我取消注释虚拟和函数覆盖,仍然没有歧义,但它调用了另一个 foo。
为什么还是没有歧义,又为什么叫对方呢?
【问题讨论】:
标签: c++ inheritance