Oggetti / Classi

di il
5 risposte

Oggetti / Classi

Ciao!
Sto programmando una classe che mi permetta di rappresentare il piano cartesiano.
Ho la classe point che mi permette di ottenere le coordinate x e y di un punto.
Ho la possibilità di ottenere la distanza in questo modo: pt1.distance(pt2); ovvero ottengo la distanza del pt1 dal pt2 a partire dal pt1.
Io però vorrei creare una cosa del genere: distance(pt1, pt2); come posso fare? E' possibile?
Cioè un'operazione non vincolata dall'essere pt1. ecc .

Grazie!!!!!!!

5 Risposte

  • Re: Oggetti / Classi

    Potresti fare qualcosa di simile:
    
    double distance(const point &p1, const point &p2) const
    {
        return sqrt(pow(p1.get_x() - p2.get_y(), 2) + pow(p1.get_y() - p2.get_y(), 2));
    }
    
  • Re: Oggetti / Classi

    Questa è la mia classe:
    #ifndef POINT_H
    #define POINT_H
    
    class point
    {
    public:
        point();
        point( float a, float b );
        float getX();
        float getY();
        float getPolarP();
        float getPolarAng();
        float dist( point b );
        void setCart( float a, float b );
        void setPolar( float a, float b );
    private:
        float x;
        float y;
        float p;
        float ang;
    };
    #endif 
    il suo cpp:
    #include "point.h"
    #include "cmath"
    
    point::point() {  x = 0; y = 0; p = 0; ang = 0; }
    
    point::point(float a, float b) {
        x = a; y = b;
        p = sqrt(pow(a,2)+pow(b,2));
        ang = atan2(b, a);
    }
    
    float point::getX() { return x; }
    
    float point::getY() { return y; }
    
    void point::setCart(float a, float b) {
        x = a; y = b;
        p = sqrt(pow(x,2)+pow(y,2));
        ang = atan2(y, x);
    }
    
    float point::dist( point b ) {
        return sqrt(pow(b.getX() - x, 2) + pow(b.getY() - y, 2));
    }
    
    float point::getPolarP() { return p; }
    
    float point::getPolarAng() { return ang; };
    
    void point::setPolar(float a, float b) {
        p = a; ang = b;
        x = p*cos(ang);
        y = p*sin(ang);
    }
    e un pezzo del main:

    point* pt[6];
        float x1, y1;
        bool exit = false;
        char e;
    
        cout << "x1 = ";
        cin >> x1;
        cout << "y1 = ";
        cin >> y1;
        pt[1] = new point(x1, y1);
    
        cout << "x2 = ";
        cin >> x1;
        cout << "y2 = ";
        cin >> y1;
        pt[2] = new point(x1, y1);
    
    perchè quindi questo non va?

    cout << pt[1]->dist(pt[2]);

    ????
  • Re: Oggetti / Classi

    Definire non va?
  • Re: Oggetti / Classi

    Forse dico una cavolata, ma potresti definire la funzione come "friend" della classe point...
  • Re: Oggetti / Classi

    Ho trovato, ho semplicemente fatto così:


    cout << pt[1]->dist(*pt[2]);

    ho aggiunto il putnatore a pt2!
Devi accedere o registrarti per scrivere nel forum
5 risposte