Как вызвать дочернюю функцию при получении от родителя с идентичной виртуальной функцией - PullRequest
2 голосов
/ 21 марта 2012

Допустим, у меня есть родительский класс:

Class Parent{
public:
virtual void doSomething(){}
}

и двое детей:

Class Son: public Parent{
public:
  void doSomething(){
  // Do one thing
  }
}

Class Daughter: public Parent{
public:
  void doSomething(){
  // Do another thing
  }
}

Если я настрою экземпляр дочернего класса следующим образом:

Parent obj = Son();

Как правильно вызвать метод doSomething(), который определяется Son, а не пустой функцией в Parent

1 Ответ

7 голосов
/ 21 марта 2012

Для этого вам нужно сделать объявление Parent указателем или ссылкой.

Parent* obj = new Son();

В текущей форме вы объявили obj экземпляром Parent.Это означает, что присвоение из Son() не создает ссылку на экземпляр Son, вместо этого оно разбивает объект на значение Parent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...