Закрытые члены базы в C++
Приватное не наследуется. Так сохраняют границу класса:
потомок не видит чужое private.
Потомок может работать с таким полем через публичный метод родителя. Обращение к приватному имени базы из потомка не компилируется.
Запишем пример с ошибкой в комментарии и рабочий вызов публичного метода:
#include <string>
class User {
public:
void setName(std::string name) {
this->name = name;
}
std::string getName() {
return name;
}
private:
std::string name;
};
class Employee : public User {
public:
void tryDirect() {
// this->name = "x"; // ошибка: name private в User
}
};
Создадим объект класса Employee и вызовем публичный метод:
int main() {
Employee employee;
employee.setName("john");
std::cout << employee.getName() << "\n";
return 0;
}
Попробуйте в классе Employee
вызвать приватный метод базового класса
и убедитесь, что компилятор выдает ошибку.