假设我们有:
Class Base
{
virtual void f(){g();};
virtual void g(){//Do some Base related code;}
};
Class Derived : public Base
{
virtual void f(){Base::f();};
virtual void g(){//Do some Derived related code};
};
int main()
{
Base *pBase = new Derived;
pBase->f();
return 0;
}
将从 Base::f()
调用哪个 g()
? Base::g()
还是 Derived::g()
?
谢谢...
最佳答案
将调用派生类的g。如果要调用base中的函数,调用
Base::g();
相反。如果您想调用派生版本,但仍希望调用基础版本,请安排 g 的派生版本在其第一条语句中调用基础版本:
virtual void g() {
Base::g();
// some work related to derived
}
模板方法设计模式中使用了来自基类的函数可以调用虚方法并将控制权转移到派生类的事实。对于 C++,它更广为人知的是 Non-Virtual-Interface .它在 C++ 标准库中也被广泛使用(例如,C++ 流缓冲区有函数 pub...
调用执行实际工作的虚函数。例如 pubseekoff
调用 protected seekoff
)。我在这个答案中写了一个例子:How do you validate an object’s internal state?
关于c++ - 从基类调用虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/397404/