какой способ переопределения метода в некотором коде - PullRequest
0 голосов
/ 23 февраля 2019

Предположим, у нас есть следующий код:

 class Base
    {
    public:
    virtual void foo() const 
    { cout << "In Base::foo\n"; }
    }

    class Derived : public Base
    {public:
    virtual void foo() 
    { cout << "In Derived::foo\n"; }
    }

    void main()
    {
     Base* b = new Derived();
     b->foo();
     delete b;
    }

Это даст нам следующий вывод: In Base::foo.

Теперь предположим, что я хочу получить - без изменения основной функции -следующий вывод вместо приведенного выше:

In Derived::foo

Насколько я понимаю, я должен переопределить функцию foo () of в базе, чтобы получить вывод метода foo () в наследующем классе, который является классом 'Derived'.Но проблема в том, что в этом случае я не могу использовать команду override, потому что метод в базе определяется как константа, а в другом классе это не так.

Итак, как я долженесли тогда переопределить этот метод?

1 Ответ

0 голосов
/ 23 февраля 2019

Чтобы переопределить функцию void foo() const базового класса, вы должны объявить функцию void foo() const в производном классе.Вместо этого вы объявили функцию void foo() (обратите внимание на отсутствие const), которая не переопределяет функцию в базе, потому что она имеет другое объявление.

Итак, какДолжен ли я тогда переопределить этот метод?

Добавить отсутствующий квалификатор const.


PS Несколько других ошибок в вашей программе:

  • main должен возвращать int.
  • Определения классов должны заканчиваться точкой с запятой.
  • Удаление производного объекта через указатель на базу имеет неопределенное поведение, если деструктор базы не является виртуальным.
...