读书人

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

发布时间: 2012-10-27 10:42:26 作者: rapoo

今天遇见的一个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为空

读书人网 >C++

热点推荐