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

Конструктор абстрактного класса в C++

Абстрактный класс вполне может иметь конструктор и поля, как обычный тип.

Общие данные задают в родителе, а потомок в списке инициализации вызывает конструктор базы. Запишем User с именем в конструкторе и выведем его у Employee:

#include <string> class User { public: virtual ~User() {} std::string name; User(std::string name) : name(name) {} virtual void increaseRevenue(int value) = 0; }; class Employee : public User { public: int salary; Employee(std::string name, int salary) : User(name), salary(salary) {} void increaseRevenue(int value) override { salary += value; } };

Создадим объект класса Employee и выведем имя вместе с окладом:

int main() { Employee employee("john", 1000); std::cout << employee.name << "\n"; std::cout << employee.salary << "\n"; return 0; }

При создании Employee сначала выполняется конструктор User, затем инициализируются поля сотрудника. Чистые методы родителя по-прежнему ждут реализации в потомке, но общее состояние уже готово к работе.

Сделайте абстрактный класс User с конструктором, принимающим имя. Сделайте Employee с конструктором имени и зарплаты и передайте имя в конструктор родителя.

Сделайте Student с конструктором имени и стипендии, передайте имя в User и реализуйте increaseRevenue.

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