"sumowanie klasy"

0

Witam potrzebuje pomocy z pewnym zadaniem, a mianowicie nie mam pojęcia jak zabrać się za drugą cześć zadania:

  1. Zdefiniować klasę PUNKT, która implementuje punkt w przestrzeni dwuwymiarowej.
    W klasie PUNKT zdefiniować konstruktor, który tworzy punkt o współrzędnych w początku
    układu współrzednych x,y oraz konstruktor przeciążony, który tworzy punkt w zadanych
    współrzednych. W klasie tej zdefiniować zaprzyjaźnione funkcje operatorowe, przeciążające
    operatory >> i << oraz funkcję operatorową przeciążającą operator + do "dodawania" dwóch
    punktów na płaszczyźnie. W klasie zdefiniować publiczną metodę, która obliczy odległość
    od punktu bieżącego do wskazanego punktu.

  2. Wykorzystać zdefiniowaną w 1 klasę do utworzenia n punktów (wskaźniki na nie
    przechowywać w tablicy), a następnie umożliwić "sumowanie" wybranych par punktów
    oraz obliczanie odległości pomiędzy parami wskazanych punktów.
    Przeciążone operatory >> i << wykorzystać do wprowadzania danych i wyśwetlania
    wyników (np. współrzędnych "sum" punktów )

rozwiązanie pierwszej części:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <iomanip>
using namespace std;
 
class PUNKT{
private: double x,y;
public: PUNKT (double xx, double yy);
        PUNKT (void);

friend istream& operator>>(istream&, PUNKT&);
friend ostream& operator << (ostream&, PUNKT&);
friend PUNKT& operator + (PUNKT&, PUNKT&);
double dist (PUNKT&p);
double getX (void) {return x;}
double getY (void) {return y;}
};

PUNKT::PUNKT (double xx, double yy){
             x=xx;
             y=yy;}
PUNKT::PUNKT(void) {x=0; y=0;}
istream& operator >>(istream& s, PUNKT&p)
{
         cout<<"podaj wspolrzedne punktu";
         cin>>p.x>>p.y;}
         osteram & operator << (ostream &s, PUNKT &p);
         { s<<"pinkt o wspolrzednych :"[<<x","<<y"]"endl;}

double PUNKT:: dist(PUNKT*p){
       double vx=this -> x -p -> get x ();
       double vy=this -> y -p -> get();
       return sqrt(vx*vx+vy*vy);

dodałem < code>... - msm

0

Operator dodawania powinien być zadeklarowany jako metoda klasy, a nie funkcja zaprzyjaźniona, i zwracać obiekt przez wartość, a nie referencję.

PUNKT PUNKT::operator+(const PUNKT &p) const
{
    PUNKT wynik;
    wynik.x = x + p.x;
    wynik.y = y + p.y;
    return wynik;
    // albo wszystko w jednej instrukcji: return PUNKT(x + p.x, y + p.y);
}

Tworzenie tablicy można zrobić tak:

int i, n;
cin >> n; // pobranie rozmiaru
PUNKT **tab_pkt = new PUNKT* [n]; // dynamiczna tablica zawierająca n wskaźników
for (i = 0; i < n; ++i)
{
    tab_pkt[i] = new PUNKT;
    // wprowadzanie współrzędnych
}

// wykonywanie działań

// zwalnianie pamięci
for (i = 0; i < n; ++i)
{
    delete tab_pkt[i];
}
delete[] tab_pkt;

1 użytkowników online, w tym zalogowanych: 0, gości: 1