Я наткнулся на это в одном из постов на SO. Мне трудно понять следующий код.
class A
{
public:
virtual void foo() = 0;
private:
virtual void bar() = 0;
};
class B : public A
{
private:
virtual void foo()
{
std::cout << "B in Foo \n";
}
public:
virtual void bar()
{
std::cout << "bar in Foo \n";
}
};
void f(A& a, B& b)
{
a.foo(); // ok --->Line A
//b.foo(); // error: B::foo is private
//a.bar(); // error: A::bar is private
b.bar(); // ok (B::bar is public, even though A::bar is private) --> Line B
}
int main()
{
B b;
f(b, b);
}
Теперь я хотел знать, как возможна линия А? Обычно classA
будет интерфейсом, и вы не сможете создать его экземпляр. Вы сможете только создать экземпляр его реализации. Я был бы признателен, если бы кто-нибудь мог объяснить мне, что здесь происходит.
Обновлять :
можно ли рассматривать a
в LineA как реализацию b ?