Вызов переопределенной функции из переменной базового класса

#include <iostream>

using namespace std;

class Parent
{
public:
    virtual void say()
    {
        cout << "I'm a parent!" << endl;
    }
};

class Child : public Parent
{
public:
    virtual void say()
    {
        cout << "I'm a child!" << endl;
    }
};

int main()
{
    Child c;
    Parent p = c;
    p.say();
    cout << "Hello World!" << endl;
    return 0;
}

Данный код выдает в консоль:

I'm a parent!
Hello World!

Можно ли вызвать переопределенную функцию из переменной базового класса? (тоесть, чтобы выводилось I'm a child!) Если нельзя, то можно ли как-нибудь вызвать ее каким-либо способом, кроме использования указателей?


Ответы (1 шт):

Автор решения: Harry

Можно. Но только для этого надо использовать ссылку:

Parent& p = c;

Так, как написали вы - вы получаете объект Parent (со срезкой), и вызывается, соответственно, его метод - здесь нет никакого Child.

→ Ссылка