c++ - 从基类调用虚函数

标签 c++ polymorphism virtual

假设我们有:


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/

相关文章:

c++ - Boost 条件变量等效于 CRITICAL_SECTION

Android Studio 上的 Android 虚拟设备错误

c++ - 链接器错误让我头疼

c++ - 如何从十六进制字符串中获取小数

ruby-on-rails-3 - Rails 3 - 在多态评论模型上显示提交错误

polymorphism - 我可以编写像 C++ 模板函数一样工作 "whenever possible"的 I Julia 方法吗?

C++:具有 STL 类型和自定义类型的优雅 "polymorphism"?

C# 在继承链下覆盖多个派生类的基类方法

c++ - 对 `vtable for DigitalClock' 的 undefined reference - 对 `DigitalClock::staticMetaObject' 的 undefined reference - Qt

c++ - 大文件中的 C++ 文件读取错误