返回信息流sina 的一道笔试题 大意如下:
#include <iostream>
using namespace std;
class base
{
public:
void fun1()
{
cout<<"base fun1()"<<endl;
}
virtual void fun2()
{
cout<<"base fun2()"<<endl;
}
};
class derived : public base
{
public:
void fun1()
{
cout<<"derived fun1()"<<endl;
}
virtual void fun2()
{
cout<<"derived fun2()"<<endl;
}
};
int main()
{
base *p = new derived();
p->fun1();
p->fun2();
((derived*)p)->fun1();
((derived*)p)->fun2();
system("pause");
return 0;
}
请问输出是什么及其原因?
这是一条镜像帖。来源:北邮人论坛 / cpp / #31428同步于 2009/11/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
把基类的指针强制转换为派生类指针会出现问题吗?
AAJ
2009/11/16镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
【 在 AAJ 的大作中提到: 】
: sina 的一道笔试题 大意如下:
: #include <iostream>
: using namespace std;
: ...................
这个题很基本吧,主要是理解多态了~
这题的情况下没有错误
但是当基类指针指向的是基类对象的时候,旧式c的转换方式会产生很严重的问题,因为它在转换之前不会做类型检查,程序因此会出现莫名的错误
使用dynamic_cast在转换之前进行运行时检查,检查指针的动态类型是否和目标类型一致,若不用则返回0指针
【 在 AAJ 的大作中提到: 】
: sina 的一道笔试题 大意如下:
: #include <iostream>
: using namespace std;
: ...................