gpt4 book ai didi

c++ - C++ 中的虚函数

转载 作者:太空狗 更新时间:2023-10-29 20:21:52 27 4
gpt4 key购买 nike

在下面的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 调用门功能?这个问题是在采访中被问到的。我想知道这是否可能

感谢您的回复

最佳答案

(假设 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 相比会有额外的运行时开销。

关于c++ - C++ 中的虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40937492/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com