新手问题,如何判断子类的类型
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的意义。