首页 > 解决方案 > 在基类中调用的虚拟基函数,C++

问题描述

我有一堂课:

class B
{
public:
  FuncCallingFoo();

protected:
   virtual Foo (const arg argument);
}:

现在,函数 Foo 在类 B 的主体中使用,即它在 FuncCallingFoo 的定义中的某处被调用。

我也有类 A,它继承自 B 并有自己的 Foo 实现:

class A:B
{
...

protected:
   Foo (const arg argument);
};

假设我创建了一个类 A 的实例:

A a;

此外,假设我执行以下调用:

a.FuncCallingFoo();

这会导致调用类 A 中的 Foo 的实现吗?

标签: c++

解决方案


不,因为您已Foo在 and 中声明为受保护class A并且B您没有请求public继承:(class A:B是的,这仍然是有效的 C++)。

实际上,由于此问题,您的程序将无法编译(在修复默认返回值和参数错误之后)。

请参阅:私有、公共和受保护继承之间的区别


推荐阅读