проблема виртуальной функции - PullRequest
4 голосов
/ 11 марта 2010

Я использую нативный C ++ с VSTS 2008. Быстрый вопрос о виртуальной функции. В моем примере ниже, есть ли какие-либо различия, если я объявлю Foo виртуальным void Foo () или void Foo () в классе Derived? Есть ли какое-либо влияние на будущие классы, которые будут производными от класса Derived?

class Base
{
public:

    Base()
    {
    }

    virtual void Foo()
    {
        cout << "In base" << endl;
    }
};

class Derived : public Base
{
public:

    Derived()
    {

    }

    void Foo()
    {
        cout << "In derived " << endl;
    }
};

Ответы [ 2 ]

9 голосов
/ 11 марта 2010

Без разницы. Но для удобства чтения я всегда держу virtual, когда он есть.

4 голосов
/ 11 марта 2010

Нет, если она имеет такую ​​же сигнатуру, что и функция-член в базовом классе, она будет автоматически сделана виртуальной. Однако вы должны сделать его явно виртуальным, чтобы не вводить в заблуждение любого, кто читает код.

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