c++中普通函数调用虚函数问题

dreamswang dreamswang 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
今天去面试了,受打击鸟,下面是面试的一道题目(大概),不是很懂,忘解答....
class CA
{
public:
virtual void fun1()
{
cout<<"CA::fun1()"<<endl;
}
void fun2()
{
fun1();
cout<<"CA::fun2()"<<endl;
}
};
class CB:public CA
{
public:
virtual void fun1()
{
cout<<"CB::fun1()"<<endl;
}
void fun2()
{
fun1();
cout<<"CB::fun2()"<<endl;
}
};
void main()
{
CA *p =new CB();
p->fun1();
p->fun2();
}
上面代码输出是什么?有什么bug?如何解决?
我的回答是:因为CA中fun2不是虚函数,而CA *p =new CB()时会进行类型转换,所以输出的结果是
CB::fun1()
CA::fun1()
CA::fun2()
后面被面试官问的很狼狈啊,他的问题大概是:有什么bug,是编译过程、链接过程还是运行过程中会出现问题?
回来后自己运行了下程序,得到的结果是
CB::fun1
CB::fun1
CA::fun2
忘高手详细分析,谢谢
...全文
评论 12
收藏 已收藏
分享
返回顶部
dreamswang
C++ 语言 65,214 成员 250,514 内容