Check for derived type (C++)

前端 未结 6 655
暗喜
暗喜 2020-12-09 12:18

How do I check at runtime if an object is of type ClassA or of derived type ClassB? In one case I have to handle both instances separately

ClassA* SomeClass:         


        
6条回答
  •  情书的邮戳
    2020-12-09 12:46

    It's generally a very bad idea to switch on the exact type like that. By doing this, you are tightly coupling your method to derived classes of ClassA. You should use polymorphism. Introduce a virtual method in class A, override it in class B and simply call it in your method.

    Even if I was forced to handle the functionality in the external function itself for some reason, I would do something like:

    class ClassA { 
      public: virtual bool hasSpecificFunctionality() { return false; }
    };
    
    class ClassB : public ClassA {
      public: virtual bool hasSpecificFunctionality() { return true; }
    };
    
    ClassA* SomeClass::doSomething ( ClassA* arg )
    {
        if (arg->hasSpecificFunctionality()) {
    
        } else {
    
        }
    }
    

提交回复
热议问题