Приведение вниз в C++
Через указатель на базу недоступны методы, объявленные только в потомке.
Если объект на самом деле создан как Student,
тип указателя сужают оператором dynamic_cast -
это приведение вниз по иерархии. Запишем
getGrade у студента и получим указатель
Student* из User*:
class User {
public:
virtual ~User() {
}
};
class Student : public User {
public:
int getGrade() {
return grade;
}
private:
int grade = 3;
};
Создадим объект Student и получим указатель на потомка:
int main() {
User* base = new Student();
Student* student = dynamic_cast<Student*>(base);
std::cout << student->getGrade() << "\n";
delete base;
return 0;
}
Пусть переменная User*
ссылается на объект Employee.
Приведите указатель к Employee*
через dynamic_cast
и выведите зарплату сотрудника.