BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #46859同步于 2010/11/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[求助]:C++里的static_cast

VisualUUBALL
2010/11/25镜像同步1 回复
只知道static_cast不会做类型检查,写了个测试,如下: #include "RTTI.h" #include <iostream> #include <vector> using namespace std; int main(int argc, char **argv) { vector<Base*> vec; vec.push_back(new Derived1); vec.push_back(new Derived2); vector<Base*>::iterator iter=vec.begin(); for(iter;iter!=vec.end();++iter) { Derived1 *d=static_cast<Derived1*>(*iter); if(d!=NULL) { d->printSelf(); } else { cout<<"This is not Derived!"<<endl; } } } 头文件: #ifndef _H_RTTI #define _H_RTTI #include <iostream> using namespace std; class Base { public: Base(int param=0):m_iFlag(param){cout<<"Construct Base..."<<endl;} ~Base(){} virtual void printSelf(){cout<<"Here is Base Class"<<endl;} private: int m_iFlag; }; class Derived1:public Base { public: Derived1():Base(1),m_iDerived(10){cout<<"Construct Derived1"<<endl;} ~Derived1(){} virtual void printSelf(){cout<<"Here is Derived1 Class"<<endl;} private: int m_iDerived; }; class Derived2:public Base { public: Derived2():Base(2),m_iDerived2(20){cout<<"Construct Derived2"<<endl;} ~Derived2(){} virtual void printSelf(){cout<<"Here is Derived2 Class"<<endl;} private: int m_iDerived2; }; #endif 输出是: Construct Base... Construct Derived1 Construct Base... Construct Derived2 Here is Derived1 Class Here is Derived2 Class 不明白为什么static_cast会将Base转换为Derived2.
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
VisualUUBALL机器人#1 · 2010/11/25
main里的判断是用dynamic_cast做对照时的残留物,可以忽略。。