Advertisement
dllbridge

virtual

Apr 6th, 2025 (edited)
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.50 KB | None | 0 0
  1.  
  2.  
  3.  
  4. #include  <iostream>
  5. #include   <iomanip>
  6. using namespace std;
  7.  
  8.  
  9. //////////////////////////////////////////////////////////////
  10. class  Figure                                               //  
  11. {
  12.    
  13.        protected:  string sFigName;                         //        protected – когда нужно дать доступ производным
  14.                                                             //                    классам, но скрыть от внешнего кода.
  15.        public:     float     fArea;
  16.                                                             //              virtual указывает, что функция может быть
  17.                                                             //                   переопределена в производных классах.
  18.        virtual void area() = 0;                             //                   = 0 делает функцию чисто виртуальной.
  19.                                                             //  Это превращает Figure в абстрактный класс (его нельзя
  20.                                                             //  создать напрямую).       Любой класс-наследник теперь
  21.                                                             //                         должен реализовать эту функцию.
  22.        void printArea()
  23.        {
  24.        
  25.             cout << "Area of " << setw(9) <<  sFigName << " = " << fArea << endl;  
  26.        }
  27. };
  28.  
  29.  
  30. //////////////////////////////////////////////////////////////
  31. class  Square: public Figure                                //
  32. {
  33.    
  34.        public: float fSide;
  35.        
  36.                   Square() {  sFigName = "Square";  }       //          Улучшили читаемость кода за счёт конструктора.
  37.        
  38.        virtual void area() { fArea = fSide * fSide; }
  39. };
  40.  
  41.  
  42. //////////////////////////////////////////////////////////////
  43. class  Rectangle: public Figure                             //
  44. {
  45.    
  46.    
  47.        public:  float   fWidth,
  48.                        fHeight;
  49.        
  50.                 Rectangle() {  sFigName = "Rectangle";  }  //  Короткий конструктор создаёт отступ после модификатора.                
  51.        
  52.        virtual void  area()
  53.        {
  54.                    
  55.             fArea = fWidth * fHeight;    
  56.        }
  57. };
  58.  
  59.  
  60.  
  61. ///////////////////////////////////////////////////////////////
  62. class  Circle: public Figure                                 //
  63. {
  64.    
  65.        public:  float  fRadius;
  66.        
  67.                   Circle() {  sFigName = "Circle";  }
  68.                  
  69.        virtual void area() {  fArea = 3.14 * fRadius * fRadius;  }
  70. };
  71.  
  72.  
  73.  
  74. ///////////////////////////////////////////////////////////////
  75. int main()                                                   //  
  76. {
  77.  
  78.     Square    Sq_1;
  79.               Sq_1.fSide =      2;
  80.               Sq_1.area();    
  81.            
  82.     Rectangle Rt_1;
  83.               Rt_1.fWidth   = 4.5;
  84.               Rt_1.fHeight  = 5.0;          
  85.               Rt_1.area();
  86.              
  87.     Circle    Cr_1;
  88.               Cr_1.fRadius  = 2.5;          
  89.               Cr_1.area();          
  90.                          
  91.     Figure *pArr[7] = { 0, &Sq_1, &Rt_1, &Cr_1 };        //  Начинайте с индекса №1, чтобы снизить запутанность кода.
  92.                                                          //  Нулевой индекс может пригодиться (неожиданно) в будущем.    
  93.     for(int i = 1; i <= 3; i++)
  94.     {
  95.            
  96.         pArr[i] -> printArea();
  97.     }
  98.    
  99. return 0;
  100. }
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement