То же имя функции, одно с константой в хвосте - PullRequest
0 голосов
/ 31 августа 2011

С учетом следующего кода:

#include <iostream>
using namespace std;

class A
{
public:
    virtual void func() {cout << "func A" << endl;}
};

class B : public A
{
public:
    void func() const {cout << "func B" << endl;}
};

int main()
{
    A *pa = new B;
    pa->func();

    B *pb = new B;
    pb->func();
    return 0;
}

вывод:

func A  // pa->func();
func B  // pb->func();

Почему при выполнении pb->func(); метод B будет работать, а не другой (этот B унаследован от A)?

спасибо, Ронен

1 Ответ

0 голосов
/ 31 августа 2011

Метод в B не переопределяет метод в A, поэтому виртуальное объявление не должно (как оно не вызывает) вызывать метод в B.Рассмотрим:

class foo
{
public:
    void bar();
    void bar() const;
}

Это два разных метода, один из которых вызывается для неконстантного объекта, а другой - для константного объекта.

Чтобы ваш код работал так, как вам нужнометод в A также должен быть объявлен как const.

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