首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

今日遇见的一个c++笔试题

2012-10-27 
今天遇见的一个c++笔试题C/C++ code#include iostream#include string#include vectorusing namespa

今天遇见的一个c++笔试题

C/C++ code
#include <iostream>#include <string>#include <vector>using namespace std;class IObject{};class B:public IObject{public:    B():nB(1){}    int nB;};class C:public IObject{public:    C():b("abc"){}    string b;    };int main(){    vector<IObject*> vecObjects;    vecObjects.push_back(new B);    vecObjects.push_back(new C);    C* pc = static_cast<C*>(vecObjects[0]);    cout<<pc->b<<endl;    return 0;}


大家帮忙看看这段代码存在哪些问题?

特别令我我不理的是,为啥调试的时候可以过,但是运行的时候就会出现错误啊?

[解决办法]
B和C没继承关系 转过去必然是错的。
[解决办法]
C* pc = static_cast<C*>(vecObjects[0]);
b和c没什么关系,它们的指针不能转换。
[解决办法]
探讨
B和C没继承关系 转过去必然是错的。

[解决办法]
探讨

那为什么调试运行的时候不报错呢?引用:

B和C没继承关系 转过去必然是错的。

[解决办法]
探讨
那为什么调试运行的时候不报错呢?

引用:

B和C没继承关系 转过去必然是错的。

[解决办法]
动态的,编译时没办法检查是否合法
资料上一般都会说成不安全转换
[解决办法]
运行时类型转换。
C* pc = static_cast<C*>(vecObjects[0]); //没有转换成功
cout<<pc->b<<endl; //问题在这,pc为空

热点排行