Указатель на базовый класс в C++
Указатель может иметь тип базы, хотя указывает на объект потомка.
Статический тип User* скрывает методы, которые
есть только у Student, но виртуальный метод
базы все равно попадет в реализацию потомка. Удаление
через такой указатель безопасно, если у базы виртуальный
деструктор. Запишем выделение в куче и вызов greet:
#include <iostream>
class User {
public:
virtual void greet() {
std::cout << "user\n";
}
virtual ~User() {
}
};
class Student : public User {
public:
void greet() override {
std::cout << "student\n";
}
};
Создадим объект Student в куче и вызовем виртуальный метод:
int main() {
User* ptr = new Student();
ptr->greet();
delete ptr;
return 0;
}
Создайте объект Employee через new,
сохраните адрес в User*,
вызовите виртуальный метод и освободите память.