C ++是与自己和父类相同类型的子类吗?

时间:2016-07-23 18:53:25

标签: c++ inheritance polymorphism instanceof

在没有C ++但是大量Java的学期之后我现在有很多新问题。

给定class baseClassclass childClass : public baseClass定义,并且,比如说,实例baseClass bClass(); childClass cClass();,在Java等效上下文中(尽管在C ++中)cClass instanceof bClass将是true add(baseClass &left, baseClass &right)

并且,如果是这样(现在在多态性上),函数baseClass是否能够将left个孩子中的任何一个视为right和/或{ {1}}?

我认为最后一个问题可能会产生误导,但仍然取决于第一个问题是否属实,所以如果需要,我会在之后进一步扩展。

谢谢!

1 个答案:

答案 0 :(得分:3)

  

cClass instanceof bClass是真的吗?

  

函数add(baseClass& left,baseClass& right)能否指望任何baseClass的子元素为left和/或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

我们可以安全地向期望引用基类对象的函数提供对子类对象的引用,因为子类中存在的子类将存在于子类中。