C:覆盖由另一个方法调用的受保护方法

前端之家收集整理的这篇文章主要介绍了C:覆盖由另一个方法调用的受保护方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个关于C中继承的非常基本的问题:
class A
{
public:
  void foo() { print(); }
protected:
  void print() {}
};

class B : public A
{
protected:
  void print() { std::cout << "test" << std:: endl; }
};

现在以下代码

B b;
b.foo();

不打印任何东西,所以foo()显然没有调用新定义的print().这只能通过虚拟方法解决吗?

解决方法

是的,您需要使虚拟打印才能使其正常工作.否则,A :: foo不知道后代可以提供打印的替代实现,愉快地调用A的版本.编译器甚至可以在编译A代码时内联foo内部的打印,使得B中的实现完全无关紧要.

猜你在找的C&C++相关文章