Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++] Centro di un rettangolo

    Salve a tutti, ho un problema con questo esercizio che ho svolto in C++ e richiede il calcolo dell'area, del perimetro e del centro di un rettangolo. Per l'area e il perimetro tutto ok, solo che per il centro non so se ho fatto bene a scrivere il costruttore Point Center e insomma quelle tre righe di codice che ho commentato con "?????" all'interno della class "Rectangle". Volevo sapere dove č l'errore o se ho sbagliato proprio a scrivere in quel modo...Inoltre cosa dovrei mettere nel main per stampare il risultato del centro?

    codice:
    class Point {    private:
            float x;
            float y;
        public:
            Point(float x_,float y_) {  // costruttore 
                x=x_;
                y=y_;
            }
            float GetX() { return x; }  // getter
            float GetY() { return y; }  // getter 
            }
            Point() {  // costruttore di default
                x=0;
                y=0;
            }        
    };
    
    
    class Rectangle {
        private:
            Point anchor;
            float width;
            float height;
        public:
        Rectangle(const Point& anchor_,const float width_,const float height_) {  
            anchor=anchor_;
            width=width_;
            height=height_;
        }
        float Area() {  
            return(width*height); 
        }    
        float Perimeter() {  
            return((width+height)*2);
        }
        Point Center() { // ?????
            Point center(anchor.GetX()+0.5*width,anchor.GetY()+0.5*height); // ?????
            return center;  // ?????
        }
    };
    
    
    int main() {
        Point p(3,4);
        Rectangle rect(p,10,4);
        printf("%f %f%\n",rect.Area(),rect.Perimeter());
        return 0;
    }
    Grazie in anticipo!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Fai cosi

    codice:
        Point *Center() 
        { 
            return new Point(anchor.GetX()+0.5*width,anchor.GetY()+0.5*height); 
        }
    e nel main

    codice:
        Point *cpnt = rect.Center();
        printf("%f %f%\n", cpnt->GetX(), cpnt->GetY());
    Ultima modifica di oregon; 09-10-2016 a 00:43
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Oh no, non allocare roba sull'heap senza motivo. al di lā dell'allocazione inutile devi ricordarti di deallocare, devi specificare l'ownership del puntatore restituito eccetera.
    Il problema del codice originale č semplicemente che manca il costruttore di copie, necessario nel momento in cui, appunto, viene richiesto di fare una copia dell'oggetto (come quando viene restituito o passato per valore). In questo caso č sufficiente fare
    codice:
     
    Point(const Point &rhs) : x(rhs.x), y(rhs.y) {}
    a livello di classe.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.