Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import std;
- using std::println;
- class Rettangolo {
- protected:
- double larghezza{0.0};
- double altezza{0.0};
- public:
- Rettangolo(double larghezza, double altezza) :
- larghezza{larghezza}, altezza{altezza} {}
- auto set_larghezza(double w) -> void { larghezza = w; }
- auto set_altezza(double h) -> void { altezza = h; }
- auto get_larghezza() -> double const { return larghezza; }
- auto get_altezza() const { return altezza; }
- auto area() -> double const { return larghezza * altezza; }
- virtual auto perimetro() -> double const {
- println("uso perimetro del rettangolo");
- return (larghezza + altezza)*2; }
- };
- class Quadrato : public Rettangolo {
- public:
- Quadrato(double lato) : Rettangolo{lato, lato} {}
- // Per mantenere le componenti uguali,
- // un quadrato DEVE aggiornare entrambi i lati
- auto set_larghezza(double w) -> void {
- larghezza = w;
- altezza = w;
- }
- auto set_altezza(double h) -> void {
- larghezza = h;
- altezza = h;
- }
- auto set_lato(double l) -> void {
- altezza = l;
- larghezza = l;
- }
- auto perimetro() -> double const override {
- println("uso perimetro del quadrato");
- return larghezza * 4; }
- };
- auto somma_perimetri(std::vector<Rettangolo*> figure) -> double {
- double somma{0.0};
- for (auto r: figure)
- somma += r->perimetro();
- return somma;
- }
- auto main() -> int
- {
- auto r1 = Rettangolo{5, 2};
- auto q1 = Quadrato{7};
- //println("Perimetro rettangolo: {}", r1.perimetro());
- //println("Perimetro quadrato: {}", q1.perimetro());
- //conformitá di tipo all'opera ...
- Rettangolo r = Quadrato{5}; //IS-A
- println("Perimetro: {}", r.perimetro());
- auto disegno = std::vector<Rettangolo*>();
- disegno.push_back(&r1);
- disegno.push_back(&q1);
- somma_perimetri(disegno);
- //q1.set_altezza(5);
- //println("Area: {}", q1.area()); //35 e non 25!
- }
Advertisement
Add Comment
Please, Sign In to add comment