如何在运行时检查对象是 ClassA 类型还是派生类型 ClassB?在一种情况下,我必须分别处理这两个实例
ClassA* SomeClass::doSomething ( ClassA* )
{
if( /* parameter is of type base class */) {
} else if { /* derived class */ ) {
}
}
也许我可以说派生类 ClassB 有一些特殊的能力。但是,如何在不更改现有类 ClassA 的情况下做到这一点?
最佳答案
打开这样的确切类型通常是一个非常糟糕的主意。通过这样做,您可以将您的方法与 ClassA
的派生类紧密耦合。你应该使用多态性。在类 A 中引入一个 virtual
方法,在类 B 中覆盖它,然后在您的方法中简单地调用它。
即使出于某种原因我被迫处理外部函数本身的功能,我也会这样做:
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 {
}
}
关于c++ - 检查派生类型 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2355195/