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

    [C++] Problemi con un costruttore

    Ciao a tutti.
    Sto implemantando una classe Point che permetta di creare dei punti tramite il costruttore della classe, che prende come argomento le coordinate. E questo è ok.
    Ho però aggiunto un costruttore vuoto, per "sicurezza", che non prende argomenti e inizializza il punto con le coordinate (0; 0). Quando però mando in output il punto così creato (tramite l'operatore ridefinito) ottengo tutt'altro risultato (mi stampa unicamente un 1 a schermo).

    Inoltre mi da l'avviso Ambiguous overload for 'operator>>' in 'std::cin >> p2' e non capisco come mai.

    Qualcuno saprebbe aiutarmi?
    Grazie!

    codice:
    #ifndef POINT_H
    #define POINT_H
    
    #include <iostream>
    using std::ostream;
    using std::istream;
    
    class Point
    {
    	friend ostream &operator<<(ostream &, const Point &);
    	friend istream &operator>>(istream &, Point &);
    	
    public:
    	Point();
    	Point(const double &, const double &);
    	~Point();
    	
    private:
    	void setX(const double &);
    	void setY(const double &);
    	
    	double x;
    	double y;
    };
    
    #endif
    codice:
    #include "point.h"
    
    #include <iostream>
    using std::endl;
    using std::ostream;
    using std::istream;
    
    ostream &operator<<(ostream &output, const Point &point)
    {
    	output << point.x << ' ' << point.y;
    	
    	return output;
    }
    
    istream &operator>>(istream &input, Point &point)
    {
    	input >> point.x;
    	input.ignore();
    	input >> point.y;
    	
    	return input;
    }
    
    Point::Point()
    {
    	setX(0);
    	setY(0);
    }
    
    Point::Point(const double &X, const double &Y)
    {
    	setX(X);
    	setY(Y);
    }
    
    Point::~Point()
    {
    	;
    }
    
    void Point::setX(const double &X)
    {
    	x = X;
    }
    
    void Point::setY(const double &Y)
    {
    	y = Y;
    }
    codice:
    // Rocco Meli, 05.01.2011
    // Chaos game
    
    #include "point.h"
    
    #include <iostream>
    using std::cout;
    using std::endl;
    using std::cin;
    
    #include <fstream>
    
    int main()
    {
    	Point p1(5, 10);
    	Point p2();
    	
    	cout << p1 << endl;
    	cout << p2 << endl;
    	
    	cin >> p2;
    	
    	cout << p2;;
    	
    	return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Quando crei un default constructor e dichiari la variabile, le parentesi tonde non ci vanno.
    codice:
            Point p1(5, 10);
    	Point p2; // togli ()
    Il resto è ok.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Originariamente inviato da shodan
    Quando crei un default constructor e dichiari la variabile, le parentesi tonde non ci vanno.
    codice:
            Point p1(5, 10);
    	Point p2; // togli ()
    Il resto è ok.
    Giusto, che stupido!xD.
    Grazie mille.

    Ps: se volessi creare un'array di Point è meglio ridefinire anche l'operatore di assegnamento?!

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Non è necessario dal momento che la classe non contiene puntatori.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.