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