首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手有关问题,怎么判断子类的类型

2013-04-26 
新手问题,如何判断子类的类型class AAA{}class BBB: public AAA{}class CCC: public AAA{}void test(AA

新手问题,如何判断子类的类型

class AAA
{
    
};

class BBB: public AAA
{
    
};

class CCC: public AAA
{
    
};

void test(AAA *obj)
{
    // 如何判断obj是BBB还是CCC ??
}

[解决办法]
class AAA
{
public:
    virtual string Type(){ return "AAA"; }
};
[解决办法]
你是要获取类型名呢还是要根据不同类型做不同的事?
不过如果类是空的,typeid也判断不出真正的类型了。。
[解决办法]
用dynamic_cast转换类型,然后判断是否空指针。
#include <iostream>

using namespace std;

class AAA
{
public:
virtual ~AAA() {}
};

class BBB: public AAA
{
};

class CCC:public AAA
{
};

void test(AAA* obj)
{
BBB* pb;
CCC* pc;

pb = dynamic_cast<BBB*>(obj);
pc = dynamic_cast<CCC*>(obj);

if (pb)
{
cout << "BBB object\n";
}

if (pc)
{
cout << "CCC object\n";
}
}

int main()
{
BBB b;
CCC c;

test(&b);
test(&c);

return 0;
}


运行结果:
BBB object
CCC object
[解决办法]
一般来说,需要判断子类的设计都有缺陷,违反lsp原则。 
[解决办法]
同意5L的观点。
是让你用接口的,而不是直接用子类的类型的。
如果要子类的类型,就失去了OO的意义。

热点排行