返回信息流只知道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.
这是一条镜像帖。来源:北邮人论坛 / cpp / #46859同步于 2010/11/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[求助]:C++里的static_cast
VisualUUBALL
2010/11/25镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复