Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpOpIhBP 75 of 150 menu
◀ ▶

Указатель на базовый класс в 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*, вызовите виртуальный метод и освободите память.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить