Я просто запутался в крошечной программе по наследованию ниже:
#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()может быть вызван, хотя он частный?
Можно ли подробно объяснить проблему простого наследования?
