C++ 子 class 是否与他们自己及其父 class 属于同一类型?

C++ Are child classes of the same type as themselves AND their parent class?

在一个没有使用 C++ 的学期之后,Java 我现在有很多新问题。

给定 class baseClassclass childClass : public baseClass 定义,假设实例 baseClass bClass(); childClass cClass();,在 Java 等效上下文中(尽管在 C++ 中)将 cClass instanceof bClasstrue?

而且,如果是这样(现在是多态性),函数 add(baseClass &left, baseClass &right) 是否能够期望 baseClass 的任何子代作为 left and/or right?

我想最后一个问题可能会产生误导,但它仍然取决于第一个问题是否正确,所以如果需要,我会在之后进一步展开。

谢谢!

would cClass instanceof bClass be true?

would a function add(baseClass &left, baseClass &right) be able to expect ANY of the baseClass's children as the left and/or right?

是的。这称为 upcasting(因为您正在向上移动层次结构)并且是 C++ 中运行时多态性背后的概念。考虑下面的例子

class A
{
public:
  func()
  {
    cout << "A";
  }
};

class B : public A
{
public:
  func()
  {
    cout << "B";
  }
};

void foo(A &obj)
{
  obj.func();
}

int main()
{
  A a;
  B b;

  foo(a);

  cout << endl;

  foo(b);

  return 0;
}

输出:

A 
B

我们可以安全地将子 class 对象的引用提供给期望引用基 class 对象的函数,因为基 class 中存在的任何内容都将存在于子 class.