Zak*_*aks 3 c++ virtual-functions dynamic-binding
在下面的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;
}
Run Code Online (Sandbox Code Playgroud)
如何使用base_ptr调用门功能?在一次采访中询问了这个问题.我想知道它是否可能
谢谢你的回复
(假设Base并且Child无法修改.)
您可以使用static_cast转换base_ptr为Child*.
static_cast<Child*>(base_ptr)->door()
Run Code Online (Sandbox Code Playgroud)
只要您确定base_ptr实际指向Child实例,这是安全的.
如果您不知道派生实例类型base_ptr指向的是什么,请考虑使用dynamic_cast:
if(auto child = dynamic_cast<Child*>(base_ptr))
{
child->door();
}
Run Code Online (Sandbox Code Playgroud)
除非编译器设法积极地优化它,否则与dynamic_cast额外的运行时开销相比static_cast.