读书人

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

发布时间: 2013-04-26 16:27:53 作者: rapoo

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

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的意义。

读书人网 >C++

热点推荐