在下面的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() called\n";
    }

    void door(){
        cout << "Child::door() called \n";
    }
};


int main(){

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

如何使用base_ptr调用Door函数?
在采访中问了这个问题。
我想知道是否有可能

感谢您的回覆

最佳答案

(假定无法修改BaseChild。)

您可以使用static_castbase_ptr转换为Child*

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

只要您确保 base_ptr实际上指向Child实例,这是安全的。

如果您不知道base_ptr指向什么派生实例类型,请考虑使用dynamic_cast:
if(auto child = dynamic_cast<Child*>(base_ptr))
{
    child->door();
}

除非编译器设法积极地对其进行优化,否则dynamic_caststatic_cast相比具有额外的运行时开销。

07-24 09:44
查看更多