在下面的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函数?
在采访中问了这个问题。
我想知道是否有可能
感谢您的回覆
最佳答案
(假定无法修改Base
和Child
。)
您可以使用static_cast
将base_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_cast
与static_cast
相比具有额外的运行时开销。