Вызов метода базового класса из производного

class Base{
public:
  void foo(){
    cout<<"foo of Base";
  }
}
class Derived: public Base{
public:
  void foo(){
    cout<<"foo of Derived";
  }
}
int main() {
Derived test;
test.Base::foo();
return 0;
 
}

Почему возможно обратиться к методу базового класса через точку? Как я понимаю, в каждом объекте имеется какой-то указатель на базовый класс?


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

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

Почему возможно обратиться к методу базового класса через точку?

Потому что язык так сделан.

Как я понимаю, в каждом объекте имеется какой-то указатель на базовый класс?

Нет, там просто лежит объект базового класса, (примерно) как поле:

class Derived
{
    Base base;
    // ...

};

Вообще, причем здесь наследование и Base::? Вас же не смущает вот это:

struct A
{
    void foo() {}
};

int main()
{
    A a;
    a.foo();
}

Тоже запись с точкой, а указателей нет.

→ Ссылка