今日遇见的一个c++笔试题
今天遇见的一个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没什么关系,它们的指针不能转换。
[解决办法][解决办法][解决办法][解决办法]动态的,编译时没办法检查是否合法
资料上一般都会说成不安全转换
[解决办法]运行时类型转换。
C* pc = static_cast<C*>(vecObjects[0]); //没有转换成功
cout<<pc->b<<endl; //问题在这,pc为空