Cześć w toku nauki dowiedziałem się, że funkcja przyjmująca jako argument obiekt klasy podstawowej może być wywołana na rzecz obiektu klasy pochodnej. Tutaj jest to funkcja globalna. W przypadku dziedziczenia public wszystko działa sprawnie, natomiast nie rozumiem dlaczego nie działa jeśli dziedziczenie będzie private. Przecież private oznacza, że funkcja pochodna nie może co do zasady korzystać ze składników klasy podstawowej. Natomiast w tej sytuacji korzystam z funkcji globalnej. Gdzie leży problem?
#include <iostream>
class B {
};
class K : public B { //lub private
};
void f (B* ptrB) {
std::cout << "Ptr: accepted" << std::endl;
}
void f (B& refB) {
std::cout << "Ref: accepted" << std::endl;
}
int main() {
B objB;
K objK;
f (&objK);
f (objK);