PDA

Visualizza la versione completa : [C++] Problemi con un costruttore


RooccoXXI
05-01-2011, 13:25
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!


#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


#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;
}


// 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;
}

shodan
05-01-2011, 13:53
Quando crei un default constructor e dichiari la variabile, le parentesi tonde non ci vanno.


Point p1(5, 10);
Point p2; // togli ()

Il resto è ok.

RooccoXXI
05-01-2011, 15:19
Originariamente inviato da shodan
Quando crei un default constructor e dichiari la variabile, le parentesi tonde non ci vanno.


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?!

shodan
05-01-2011, 16:24
Non è necessario dal momento che la classe non contiene puntatori.

Loading