Я просто запутался в крошечной программе по наследованию ниже:
#include<iostream>
using namespace std;
struct B {
virtual int f() { return 1; }
}; // f is public in B
class D : public B {
int f() { return 2; }
}; // f is private in D
int main()
{
D d;
B& b = d;
cout<<b.f()<<endl; // OK: B::f() is public, D::f() is invoked even though it private
cout<<d.f()<<endl; // error: D::f() is private
}
- Я не могу понять, почему
D::f()
является приватным,D
является публичным унаследованным изB
, поэтому открытая функцияf
вB
также публично вD
(я знаю, что без наследования, доступ по умолчанию является закрытым по умолчанию) -
f
- это виртуальная функция вB
, поэтому, если мы вызываемb.f()
, мы на самом деле вызываемD::f()
, но, как упоминалось выше, почемуD::f()
может быть вызван, хотя он частный?
Можно ли подробно объяснить проблему простого наследования?