Реализация в потомке в C++
Реализация в потомке снимает абстрактность метода: компилятор находит тело там, где создают объект.
В наследнике пишут метод с тем же именем и теми же
параметрами и помечают его override. Запишем
Student, который увеличивает стипендию,
и выведем результат:
#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;
}
};
class Student : public User {
public:
int scholarship;
Student(std::string name, int scholarship)
: User(name), scholarship(scholarship) {}
void increaseRevenue(int value) override {
scholarship += value;
}
};
Создадим объект класса Student и увеличим ему стипендию:
int main() {
Student student("ann", 500);
student.increaseRevenue(50);
std::cout << student.scholarship << "\n";
return 0;
}
Если потомок не переопределит хотя бы один чистый метод родителя, его тоже нельзя будет инстанцировать - класс останется абстрактным. Переопределение должно совпадать по const и типу возвращаемого значения.
Напишите реализацию методов площади и периметра
в классах Circle, Rectangle
и Square для вашего Figure.