Закрытое наследование в C++
Не каждое наследование должно быть публичным для всей программы.
При class SecretUser : private User публичные поля
и методы базы становятся private у потомка.
Снаружи их не вызвать, внутри методов SecretUser
доступ остается. Запишем такую обертку:
#include <iostream>
class User {
public:
void greet() {
std::cout << "user\n";
}
};
class SecretUser : private User {
public:
void sayHello() {
greet();
}
};
Создадим объект класса SecretUser и вызовем его метод:
int main() {
SecretUser user;
user.sayHello();
return 0;
}
Сделайте class Helper : private User
и публичный метод, который внутри вызывает
унаследованный greet. Убедитесь,
что прямой вызов greet
из main не компилируется.