如何解决如何确保被覆盖的函数被调用
示例:
#include <iostream>
class Base
{
public:
virtual void func()
{
std::cout << "Really important code was ran" << std::endl;
}
};
class ChildExplicit : public Base
{
void func() override
{
Base::func();
std::cout << "child class explicitly calling Base::func" << std::endl;
}
};
class ChildImplicit : public Base
{
void func() override
{
std::cout << "child not explicitly calling Base::func" << std::endl;
}
};
int main()
{
Base* explicitChild = new ChildExplicit();
Base* implicitChild = new ChildImplicit();
explicitChild->func();
std::cout << std::endl;
implicitChild->func();
}
这应该输出:
Really important code was ran
child class explicitly calling Base::func
Really important code was ran
child not explicitly calling Base::func
或产生某种错误,即 Base::func
未在 ChildImplicit::func
中调用。
一种可能的解决方案是使 func
非虚拟并创建将在 Base::func
中调用的第二个受保护的函数,然后子类将覆盖受保护的函数。但是您可以想象,如果将其应用于 Base 类场景的 Base 类的 Base 类,并且必须调用每个实现,这会变得非常混乱。是否有其他方法可以实现相同的目标?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。