小弟想在main.cpp里面写个函数,该函数的参数是一个基类(如:A)的某个继承类(如B,C其中之一);请教前辈,怎么能让函数识别传入的参数是那个继承类(究竟是B还是C)? 应当用什么办法实现这个东西那?
谢谢。
------解决方案--------------------------------------------------------
百度搜索 rtti.
rtti 需要在编译之前启用rtti的编译选项才可以使用。
并且 rtti 需要基类具备多态性。
启用 rtti后,支持C++ type_id() 和 dynamic_cast.
如下例:
#include<iostream>
using namespace std;
class A
{
virtual void test() = 0;
};
class B : public A
{
void test()
{
cout << "this is b test()." << endl;
}
};
class C : public A
{
void test()
{
cout << "this is c test()." << endl;
}
};
void func(A* pParam)
{
B* p = NULL;
p = dynamic_cast<B*>(pParam);
if( p == NULL)
{
cout << "not b"<< endl;
}
else
{
cout << "is b"<<endl;
}
}
int main(int argc,char** argv)
{
A* b = new B();
A* c = new C();
func(b);
func(c);
delete b;
b = NULL;
delete c;
c = NULL;
return 0;
}
另外需要注意 rtti 貌似会出现一些移植不兼容的问题。比如苹果的 xcode 似乎就不支持 rtti.
感觉楼主这样的做法其实并不合理,如果想处理不同的参数,完全可以写不同的函数。
更好的办法等楼下解答 。
------解决方案--------------------------------------------------------
http://www.cnblogs.com/ustc11wj/archive/2012/08/11/2637319
------解决方案--------------------------------------------------------
不太建议去区分类型,直接利用多态的特性。
------解决方案--------------------------------------------------------
最简单的方法,你可以在基类增加一个变量来指示类别
------解决方案--------------------------------------------------------
没有虚函数 那你用基类的指针指向派生类的对象不就没有意义了么
没有虚函数 你怎么用基类的指针去调用派生类的函数实现呢