我有一个关于 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()。这只能通过使用虚拟方法来解决吗?
是的,你需要做print
虚拟才能使其发挥作用。否则,A::foo
不知道后代可以提供替代实现print
,高兴地打电话A
的版本。编译器甚至可以内联print
inside foo
当时A
的代码被编译,使得实现B
完全无关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)