C ++ - многоуровневое наследование - PullRequest
0 голосов
/ 21 апреля 2020

Я новичок в C ++, и я впервые изучаю наследование. У меня есть некоторая путаница в отношении многоуровневого наследования, которую я хотел обсудить.

Рассмотрим этот код:

class Parent 
{
  ...
  virtual void foo() {...} // virtual function
  ...
}
class Child
  : public Parent
{
  ...
  virtual void foo() override {...} // 1
  ...
}
Class GrandChild
  : public Child
{
  ...
  void foo() override {...} // 2
  ...
}

Теперь,

  1. Я знаю, что 1 переопределяет Parent метод класса.
  2. Но я не уверен насчет 2. Какой метод он отменяет, тот, что в Parent или тот, в Child?

Пожалуйста, поправьте меня, если я ошибаюсь. Кроме того, если есть какие-либо полезные статьи по этому поводу, пожалуйста, отправьте их мне.

1 Ответ

2 голосов
/ 21 апреля 2020

Я бы сказал, что класс GrandChild здесь переопределяет метод Child. Однако это не очень полезное различие, поскольку GrandChild наследуется от Child и Parent (косвенно). Следовательно, вы можете выполнить все следующие действия:

int main() {
    Parent* p1 = new Child();
    p1->foo(); // calls Child::foo

    Parent* p2 = new GrandChild();
    p2->foo(); // calls GrandChild::foo

    Child* c = new GrandChild();
    c->foo();  // calls GrandChild::foo

    // cleanup all of the pointers
}
...