fcamuso

Corso C++ 52:

Sep 14th, 2026
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.10 KB | None | 0 0
  1. import std;
  2. using std::println;
  3.  
  4. class Rettangolo {
  5.     protected:
  6.         double larghezza{0.0};
  7.         double altezza{0.0};
  8.  
  9. public:
  10.     Rettangolo(double larghezza, double altezza) :
  11.        larghezza{larghezza}, altezza{altezza} {}
  12.  
  13.     auto set_larghezza(double w) -> void { larghezza = w; }
  14.     auto set_altezza(double h) -> void { altezza = h; }
  15.  
  16.     auto get_larghezza() -> double const { return larghezza; }
  17.     auto get_altezza() const { return altezza; }
  18.  
  19.     auto area() -> double const { return larghezza * altezza; }
  20.  
  21.     virtual auto perimetro() -> double const {
  22.         println("uso perimetro del rettangolo");
  23.         return (larghezza + altezza)*2; }
  24. };
  25.  
  26.  
  27. class Quadrato : public Rettangolo {
  28. public:
  29.     Quadrato(double lato) : Rettangolo{lato, lato} {}
  30.  
  31.     // Per mantenere le componenti uguali,
  32.     // un quadrato DEVE aggiornare entrambi i lati
  33.     auto set_larghezza(double w) -> void {
  34.         larghezza = w;
  35.         altezza = w;
  36.     }
  37.  
  38.     auto set_altezza(double h) -> void {
  39.         larghezza = h;
  40.         altezza = h;
  41.     }
  42.  
  43.     auto set_lato(double l) -> void {
  44.         altezza = l;
  45.         larghezza = l;
  46.     }
  47.  
  48.     auto perimetro() -> double const override {
  49.         println("uso perimetro del quadrato");
  50.         return larghezza * 4; }
  51. };
  52.  
  53. auto somma_perimetri(std::vector<Rettangolo*> figure) -> double {
  54.     double somma{0.0};
  55.  
  56.     for (auto r: figure)
  57.         somma += r->perimetro();
  58.  
  59.     return somma;
  60. }
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80. auto main() -> int
  81. {
  82.     auto r1 = Rettangolo{5, 2};
  83.     auto q1 = Quadrato{7};
  84.  
  85.     //println("Perimetro rettangolo: {}", r1.perimetro());
  86.     //println("Perimetro quadrato: {}", q1.perimetro());
  87.  
  88.     //conformitá di tipo all'opera ...
  89.     Rettangolo r = Quadrato{5}; //IS-A
  90.     println("Perimetro: {}", r.perimetro());
  91.  
  92.     auto disegno = std::vector<Rettangolo*>();
  93.     disegno.push_back(&r1);
  94.     disegno.push_back(&q1);
  95.  
  96.     somma_perimetri(disegno);
  97.  
  98.  
  99.  
  100.     //q1.set_altezza(5);
  101.     //println("Area: {}", q1.area()); //35 e non 25!
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120. }
  121.  
Advertisement
Add Comment
Please, Sign In to add comment