kierlo
25-03-2011, 10:04
Ciao a tutti sto iniziando un programma abbastanza semplice e ho definito la classe dei vettori in R^2 con solo due operazioni: somma e moltiplicazione per numero reale.
Il problema è che appena uso uno dei due operatori ( + e * in questo caso) mi va in segmentation fault e non riesco a capire perchè. Posto i 3 codici, se qualcuno ha tempo di aiutarmi mi fa un grande favore. Grazie mille.
file.h
#ifndef lumache_h
#define lumache_h
class Point
{
friend Point operator+ (const Point&,const Point&) ; //Somma fra vettori
friend Point operator* (const double &,const Point&) ; // scalare per vettore
public:
//default ctor
Point (void);
//ctor
Point ( const double &x, const double &y);
//copy ctor
Point ( const Point & p);
//dtor
~Point();
//metodi:
void Read(); //legge
//operatori:
// Point& operator= (const Point & second) ;
private :
double x_;
double y_;
};
#endif
FILE .cc
#include "lumache.h"
#include "iostream"
using namespace std;
//ctor
Point::Point()
{
x_=0.;
y_=0.;
}
//ctor a valori
Point::Point ( const double &x, const double &y) //ctor
{
x_=x;
y_=y;
}
// copy ctor
Point::Point( const Point & p)
{
x_=p.x_;
y_=p.y_;
}
//dtor
Point::~Point()
{
delete &x_;
delete &y_;
}
// METODI:
void Point::Read() //legge e stampa a schermo
{
cout << "Il punto ha coordinate : ("<< x_<<","
<<y_<<"). \n";
}
/**** OPERATORI *****/
//operatore uguale
/*Point& Point::operator=(const Point &original)
{
x_=original.x_;
y_=original.y_;
return *this;
}
*/
// Somsma vettori
Point operator+ (const Point &first ,const Point &second)
{
return Point( first.x_+second.x_, first.y_+second.y_);
}
Point operator* (const double &alfa, const Point &vector)
// moltiplicazione scalare-vettore
{
return Point(vector.x_ * alfa, vector.y_ * alfa);
}
FILE .cpp
#include<cstdlib>
#include<iostream>
#include"lumache.h"
using namespace std;
int main()
{
double x,y;
cout << "Inserisci coordinate punto : "<< endl;
cin >> x>> y;
Point r(x,y);
cout << "inserisci un numero : "<< endl;
double a;
cin >> a;
Point f(1,2);
Point g;
g = f+r;
g.Read();
exit(EXIT_SUCCESS) ;
}
Come vedete è abbastanza banale, ma non riesco a trovare l'errore. Ho seguito anche un libro di testo, ma ho problemi lo stesso.
Il problema è che appena uso uno dei due operatori ( + e * in questo caso) mi va in segmentation fault e non riesco a capire perchè. Posto i 3 codici, se qualcuno ha tempo di aiutarmi mi fa un grande favore. Grazie mille.
file.h
#ifndef lumache_h
#define lumache_h
class Point
{
friend Point operator+ (const Point&,const Point&) ; //Somma fra vettori
friend Point operator* (const double &,const Point&) ; // scalare per vettore
public:
//default ctor
Point (void);
//ctor
Point ( const double &x, const double &y);
//copy ctor
Point ( const Point & p);
//dtor
~Point();
//metodi:
void Read(); //legge
//operatori:
// Point& operator= (const Point & second) ;
private :
double x_;
double y_;
};
#endif
FILE .cc
#include "lumache.h"
#include "iostream"
using namespace std;
//ctor
Point::Point()
{
x_=0.;
y_=0.;
}
//ctor a valori
Point::Point ( const double &x, const double &y) //ctor
{
x_=x;
y_=y;
}
// copy ctor
Point::Point( const Point & p)
{
x_=p.x_;
y_=p.y_;
}
//dtor
Point::~Point()
{
delete &x_;
delete &y_;
}
// METODI:
void Point::Read() //legge e stampa a schermo
{
cout << "Il punto ha coordinate : ("<< x_<<","
<<y_<<"). \n";
}
/**** OPERATORI *****/
//operatore uguale
/*Point& Point::operator=(const Point &original)
{
x_=original.x_;
y_=original.y_;
return *this;
}
*/
// Somsma vettori
Point operator+ (const Point &first ,const Point &second)
{
return Point( first.x_+second.x_, first.y_+second.y_);
}
Point operator* (const double &alfa, const Point &vector)
// moltiplicazione scalare-vettore
{
return Point(vector.x_ * alfa, vector.y_ * alfa);
}
FILE .cpp
#include<cstdlib>
#include<iostream>
#include"lumache.h"
using namespace std;
int main()
{
double x,y;
cout << "Inserisci coordinate punto : "<< endl;
cin >> x>> y;
Point r(x,y);
cout << "inserisci un numero : "<< endl;
double a;
cin >> a;
Point f(1,2);
Point g;
g = f+r;
g.Read();
exit(EXIT_SUCCESS) ;
}
Come vedete è abbastanza banale, ma non riesco a trovare l'errore. Ho seguito anche un libro di testo, ma ho problemi lo stesso.