C 中的虚拟功能



在以下C 代码中使用虚拟函数

#include<iostream>
using namespace std;
class Base{
    public:
    virtual void fun(){
        cout << "Base::fun()called n";
    }
};
class Child : public Base {
    public:
    void fun() {
        cout << "Child::fun() calledn";
    }
    void door(){
        cout << "Child::door() called n";
    }
};

int main(){
    Base *base_ptr = new Child();
    base_ptr->fun();
    return 0;
}

如何使用base_ptr调用门功能?这个问题是在接受采访中提出的。我想知道是否可能

感谢您的答复

(假设无法修改BaseChild。)

您可以使用static_castbase_ptr转换为Child*

static_cast<Child*>(base_ptr)->door()

只要您是 sure base_ptr实际上指向Child实例。


如果您不知道派生的实例类型base_ptr指向什么,请考虑使用dynamic_cast

if(auto child = dynamic_cast<Child*>(base_ptr))
{
    child->door();
}

除非编译器设法优化它,否则dynamic_caststatic_cast相比具有额外的运行时开销。

因为Base没有door()方法,您显然不能简单地调用base_ptr->door()

但是,如果您知道base_ptrChild,则可以施放它,然后致电door()

Child* child_ptr = static_cast<Child*>(base_ptr);
child_ptr->door();

相关内容

  • 没有找到相关文章

最新更新