如何使用虚方法区分类

时间:2014-11-14 09:43:21

标签: c++ virtual-functions

我有基类和2个继承者。

class A{
    virtual double calc();
    /.../
}

class B: public class A{
    virtual double calc(){} 
    /..../  
}

class C: public class A{
    virtual double calc(){} 
    /..../  
}

还有一个功能:

void func(A *input1, A* input2){
....
}

以这种方式调用:

C ptrC;
B ptrB;
func(&ptrB, &ptrC);

那么,如果参数input1,input2具有相同或不同的类型,我怎么能理解func内部?

3 个答案:

答案 0 :(得分:0)

你可以typeid(*input1) == typeid(*input2)。但要仔细考虑这是否真的是你想要的,或者你是否真的在寻找Binary Method Problem的解决方案。

答案 1 :(得分:0)

if(typeid(*input1)==typeid(*input2)){
    //do something
}

您必须启用rtti

答案 2 :(得分:0)

您可以使用dynamic_cast或typeinfo获取信息: -

B* b = dynamic_cast<B*>(input)
if ( b == NULL )
   //Object of type C.

OR

if (typeid(A) == typeid(input) )
   //Object is of type A.

但是你应该完全避免这些事情。这是虚函数的全部本质。