shape_base() {}
                  
                  
                      virtual f32 Area() = 0;
                  
                  
                  };
                  
                  
                  
                  
                  
                  class square : public shape_base
                  
                  
                  {
                  
                  
                  public:
                  
                  
                      square(f32 SideInit) : Side(SideInit) {}
                  
                  
                      virtual f32 Area() { return Side * Side; }
                  
                  
                  
                  
                  
                  private:
                  
                  
                      f32 Side;
                  
                  
                  };
                  
                  
                  
                  
                  
                  class rectangle : public shape_base
                  
                  
                  {
                  
                  
                  public:
                  
                  
                      rectangle(f32 WidthInit, f32 HeightInit) : Width(WidthInit), Height(HeightInit) {}
                  
                  
                      virtual f32 Area() { return Width * Height; }
                  
                  
                  
                  
                  
                  private:
                  
                  
                      f32 Width, Height;
                  
                  
                  };
                  
                  
                  
                  
                  
                  class triangle : public shape_base
                  
                  
                  {
                  
                  
                  public:
                  
                  
                      triangle(f32 BaseInit, f32 HeightInit) : Base(BaseInit), Height(HeightInit) {}
                  
                  
                      virtual f32 Area() { return 0.5f * Base * Height; }
                  
                  
                  
                  
                  
                  private:
                  
                  
                      f32 Base, Height;
                  
                  
                  };
                  
                  
                  
                  
                  
                  class circle : public shape_base
                  
                  
                  {
                  
                  
                  public:
                  
                  
                      circle(f32 RadiusInit) : Radius(RadiusInit) {}
                  
                  
                      virtual f32 Area() { return Pi32 * Radius * Radius; }
                  
                  
                  
                  
                  
                  private:
                  
                  
                      f32 Radius;
                  
                  
                  };
                  
                  
                  в зачем в производных классах делают метод виртуальным?
                  
                  
                
А в производных классах методы сами виртуальными не становятся? хоть пиши virtual, хоть не пиши
Просто по инерции. Это не нужно, они и так будут виртуальные. Сейчас вообще модно писать override, это полезнее
Обсуждают сегодня