Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- using namespace std;
- //////////////////////////////////////////////////////////////
- class Figure //
- {
- protected: string sFigName; // protected – когда нужно дать доступ производным
- // классам, но скрыть от внешнего кода.
- public: float fArea;
- // virtual указывает, что функция может быть
- // переопределена в производных классах.
- virtual void area() = 0; // = 0 делает функцию чисто виртуальной.
- // Это превращает Figure в абстрактный класс (его нельзя
- // создать напрямую). Любой класс-наследник теперь
- // должен реализовать эту функцию.
- void printArea()
- {
- cout << "Area of " << setw(9) << sFigName << " = " << fArea << endl;
- }
- };
- //////////////////////////////////////////////////////////////
- class Square: public Figure //
- {
- public: float fSide;
- Square() { sFigName = "Square"; } // Улучшили читаемость кода за счёт конструктора.
- virtual void area() { fArea = fSide * fSide; }
- };
- //////////////////////////////////////////////////////////////
- class Rectangle: public Figure //
- {
- public: float fWidth,
- fHeight;
- Rectangle() { sFigName = "Rectangle"; } // Короткий конструктор создаёт отступ после модификатора.
- virtual void area()
- {
- fArea = fWidth * fHeight;
- }
- };
- ///////////////////////////////////////////////////////////////
- class Circle: public Figure //
- {
- public: float fRadius;
- Circle() { sFigName = "Circle"; }
- virtual void area() { fArea = 3.14 * fRadius * fRadius; }
- };
- ///////////////////////////////////////////////////////////////
- int main() //
- {
- Square Sq_1;
- Sq_1.fSide = 2;
- Sq_1.area();
- Rectangle Rt_1;
- Rt_1.fWidth = 4.5;
- Rt_1.fHeight = 5.0;
- Rt_1.area();
- Circle Cr_1;
- Cr_1.fRadius = 2.5;
- Cr_1.area();
- Figure *pArr[7] = { 0, &Sq_1, &Rt_1, &Cr_1 }; // Начинайте с индекса №1, чтобы снизить запутанность кода.
- // Нулевой индекс может пригодиться (неожиданно) в будущем.
- for(int i = 1; i <= 3; i++)
- {
- pArr[i] -> printArea();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement