前端之家收集整理的这篇文章主要介绍了
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中的实现完全无关紧要.
原文链接:https://www.f2er.com/c/119578.html