关于C++类型转换的有关问题
关于C++类型转换的问题
如下类,我需要一个方法判断传入指针是什么类型
------解决思路----------------------
在基类里声明一个纯虚的 enum XXX getClassType() =0; ,每个派生类返回自己的标志。
------解决思路----------------------
class IData
{
public:
IData(){}
virtual ~IData(){}
virtual string GetName() = 0;
}
class CDataName : public IData
{
public:
string GetName(){ return name;}
private:
string name;
}
class CDataAlias : public IData
{
public:
string GetName(){ return alias;}
private:
string alias;
}
class CDataOperate
{
public:
CDataOperate(){}
~CDataOperate(){}
void MyOperate(IData *in_data)
{
//if IData is CDataName, return name.
//if IData is CDataAlias, return alias.
//IData 可能存在多个子类,什么办法可以优化下面的逻辑,希望可以达到立马判断出类类型的方法
printf("%s\n", in_pdata->GetName().c_str());
}
}
------解决思路----------------------
如果要自己判断不同的派生类然后采取不同的做法,那就不该用继承,虚函数就是为了使用统一的接口来达到不同的效果。
如下类,我需要一个方法判断传入指针是什么类型
class IData
{
public:
IData(){}
virtual ~IData(){}
}
class CDataName : public IData
{
public:
string GetName(){ return name;}
private:
string name;
}
class CDataAlias : public IData
{
public:
string GetAlias(){ return alias;}
private:
string alias;
}
class CDataOperate
{
public:
CDataOperate(){}
~CDataOperate(){}
void MyOperate(IData *in_data)
{
//if IData is CDataName, return name.
//if IData is CDataAlias, return alias.
//IData 可能存在多个子类,什么办法可以优化下面的逻辑,希望可以达到立马判断出类类型的方法
CDataName *tmp_data = (CDataName *)in_data;
if( tmp_data != null)
{
return NotifData(tmp_data);
}
CDataAlias *tmp_data1 = (CDataAlias *)in_data;
if( tmp_data1 != null)
{
return NotifData(tmp_data);
}
}
private:
void NotifData(CDataName *in_pdata)
{
printf("%s\n", in_pdata->GetName().c_str());
}
void NotifData(CDataAlias *in_pdata)
{
printf("%s\n", in_pdata->GetAlias().c_str());
}
}
------解决思路----------------------
在基类里声明一个纯虚的 enum XXX getClassType() =0; ,每个派生类返回自己的标志。
------解决思路----------------------
class IData
{
public:
IData(){}
virtual ~IData(){}
virtual string GetName() = 0;
}
class CDataName : public IData
{
public:
string GetName(){ return name;}
private:
string name;
}
class CDataAlias : public IData
{
public:
string GetName(){ return alias;}
private:
string alias;
}
class CDataOperate
{
public:
CDataOperate(){}
~CDataOperate(){}
void MyOperate(IData *in_data)
{
//if IData is CDataName, return name.
//if IData is CDataAlias, return alias.
//IData 可能存在多个子类,什么办法可以优化下面的逻辑,希望可以达到立马判断出类类型的方法
printf("%s\n", in_pdata->GetName().c_str());
}
}
------解决思路----------------------
如果要自己判断不同的派生类然后采取不同的做法,那就不该用继承,虚函数就是为了使用统一的接口来达到不同的效果。