c++ - 检查派生类型 (C++)

标签 c++ design-patterns

如何在运行时检查对象是 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/

相关文章:

c++ - 何时在 std::shared_lock 上使用 defer_lock?

用于 int 数组的 C++ 哈希函数

c++ - Map迭代器遍历技术

适用于 Windows 的 C++ 动态代码分析工具

java - 创建 `Copyable` 类型接口(interface)而不是使用 `Cloneable` 是否有意义?

perl - 新方法何去何从?

c++ - 数组式链表实现C++

scala - 我的 Scala 应用程序使用哪种设计模式?

java - 验证库设计模式选择

design-patterns - 开发人员在编码时主要关注什么?