Перезапись переменной при наследовании от родительского класса - PullRequest
0 голосов
/ 16 января 2012

у меня простой класс

class Foo {
    public:
        float m;
        Foo();
}

Foo::Foo(){
    this->m = 1.0f;
}

Затем я расширяю его на

class Bar: public Foo {
    public:
        float m;
        Bar()
}

Bar::Bar(){
    this->m = 10.0f;
}

Затем я создаю экземпляр Bar(), но Bar.m по-прежнему равен 1.0f. Есть ли причина для этого?

1 Ответ

4 голосов
/ 16 января 2012

В C ++ вы не можете переопределить поле.Только методы могут быть переопределены.Следовательно, ваше объявление переменной m в классе Bar - это новое поле, которое скрывает версию m базового класса Foo.

Если вы хотите получить доступ к Foom из Bar, тогда вы можете использовать этот синтаксис:

Bar::Bar(){
    this->Foo::m = 10.0f;
}

, который явно указывает компилятору записать в Foo версию m.Кроме того, вы можете оставить this-> и просто написать

Bar::Bar(){
    Foo::m = 10.0f;
}

Надеюсь, это поможет!

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