Tworzenie metod w klasach

0

Witam, mam takie zadanko

Zdefiniuj klase TPunkt przedstawiajaca punkt na płaszczyznie. W klasie zdefiniuj metode
Odleglosc, która zwraca odległosc od punktu bedacego parametrem tej metody. Klasa ta nie
posiada konstruktora domyslnego. Pozostałe metody tej klasy okresl samodzielnie

Do tej pory napisałem tyle:

class TPunkt:
    {
private: 
    float wsp_x;
    float wsp_y;
    
    public:
        Punkt(float,float);
        float Odleglosc(Punkt)const;
        
        
    };

i nie wiem jak dalej się za to zabrać :\

2

w tpunkt.cpp definiujesz:

void TPunkt::Punkt(float param1, float param2)//zapominałeś o typie zwracanym w klasie?
{
  //ciało funkcji Punkt
}
float TPunkt::Odleglosc(Punkt point) const
{
   //ciało funkcji Odleglosc
}
1

Po pierwsze konstruktor klasy musi nazywać się tak samo jak klasa. Następnie musisz utworzyć tak zwane "getery" czyli metody zwracające prywatne zmienne w klasie. Natomiast w metodzie Odległość wywołujesz "getery" punktu który jest paramatrem metody i obliczasz odległość z Pitagorasa.

0

Powinno być:

class TPunkt : {
private:
    float wsp_x;
    float wsp_y;

public:
    TPunkt (float x, float y);
    float Odleglosc(const Punkt& b) const;
    ...
};
0

Zrobiłem coś takiego ale właśnie zatrzymałem się na metodzie Odległość i nie wiem jak to dalej zapisać

class TPunkt:
    {
private:
    float wsp_x;
    float wsp_y;

    public:
        TPunkt(float x,float y)
        {
            this->wsp_x=x;
            this->wsp_y=y;
        }
        float getX() const{ return x;}
        float getY() const{ return y;}
        float Odleglosc(const Punkt& point)const;
        };
        float TPunkt::Odleglosc(const Punkt &point) const
        {
            
        }
1

Tak jak w szkole uczyli jak się odlicza odległość miedzy punktami na płaszczyźnie. Z Pitagorasa.

0

Ten zapis co podałem stosuje się poza definicją klasy. Zwykle definicję klasy daje się do pliku <nazwa_klasy_małymi_literami>.h, a definicje metod do <nazwa_klasy_małymi_literami>.cpp
Tego dotyczył mój post.

0
#include <iostream>
#include <cstdlib>
#include <string>

#include <math.h>

using namespace std;

class TPunkt
    {
public:
    float x;
    float y;
        TPunkt()
        {x=0;y=0;}
        TPunkt(float,float);
        TPunkt(const TPunkt &b)
        {
            x=b.x;
            y=b.y;
        }
        float getX() const{ return x;}
        float getY() const{ return y;}
        float Odleglosc(const TPunkt& b)const;
        };
        float TPunkt::Odleglosc(const TPunkt &b) const
        {
            return hypot(this->x - b.x, this->y - b.y);
        }





main()
{
    TPunkt p1(1,1),p2(0,3);
    float Odleglosc(p1,p2);
    return 0;
}


Zmieniłem to trochę ale nadal mi nie działa. Dodam tylko, że konstruktory klas powinny umożliwiać następujące deklaracje: p1(1,1),p2(0,3) a nadal nie może mi wyliczyć tej odległości. I jest coś takiego, że jeśli parametrem (parametrami) konstruktora jest punkt, to należy wykorzystać konstruktor
kopiujący.

0

bogiem programowania nie jestem ale zapis w mainie - float Odleglosc(p1,p2) nie ma prawa zadziałać. Przyjmujesz dwa argumenty do funkcji przyjmującej jeden argument.
Dodatkowo nie wydaje mi się, żeby zapis float Odleglosc(argumenty) tutaj zadziałał poprawnie - ale to mój domysł, bo sam się uczę obiektowego dopiero :D

I jest coś takiego, że jeśli parametrem (parametrami) konstruktora jest punkt, to należy wykorzystać konstruktor
kopiujący.

p1(1,1) to jest punkt i wykorzystałeś już konstruktor kopiujący z tego co widzę więc może przeczytaj w wolnej chwili o tych konstruktorach i popatrz jak są deklarowane i czym się różnią, bo przyda Ci się to ;D Sam to przerabiałem niedawno i konstruktor kopiujący mi się często przydawał :) Jakbyś wiedział co i jak to chyba tego zdania byś nie napisał, bo już to zrobiłeś więc no ;d

Nie jestem programistą ale myślę, że conajmniej jedną rzecz dobrze wskazałem więc nie bierz mojej wypowiedzi za pewnik. Ktoś ogarnięty mnie raz dwa poprawi jakbym coś źle napisał ;p

EDIT:
Wydaje mi się, że w mainie to jest poprawny zapis:
https://onlinegdb.com/rkcMKI2yN

Może i się da ładniej to zrobić ale twój zapis nie działa, a mój chyba tak :D

1

@Piotr cezary poducz się solidnie najbardziej elementarnych podstaw, bo jak ty nie umiesz definiować klas, ich metod, ani nie wiesz jak ich używać, to nie mamy jak ci pomóc.

wiezaawieza napisał(a):

Wydaje mi się, że w mainie to jest poprawny zapis:
https://onlinegdb.com/rkcMKI2yN

Bracie @wiezaawieza należy Ci się pręgierz za takie formatowanie kodu.

0

Już jest trochę lepiej ale nadal nie mogę obliczyć odległości. Program pobiera mi już punkty x,y i potrafię je wyświetlić lecz nadal nie mam pomysłu na tą odległość.

class TPunkt
    {

    public:
        float x;
        float y;
        TPunkt ();
        TPunkt(float ,float );
            
        float getX();
        float getY();
      
        Odleglosc(const TPunkt &b);
       float Odleglosc(const TPunkt& b)const;

    };
    TPunkt::TPunkt()
        {
            x=0; y=0;
        }
    TPunkt::TPunkt(float x,float y)
        {
            this->x=x;
            this->y=y;
        }
    float TPunkt::getX()
    {
        return this->x;
    }
    float TPunkt::getY()
    {
        return this->y;
    }
    TPunkt::Odleglosc(const TPunkt& b)

        {
            x=b.x; y=b.y;
        }
        float TPunkt::Odleglosc(const TPunkt &b) const
        {
            return hypot(this->x - b.x, this->y - b.y);
        }
main()
{
    TPunkt p1(1,1),p2(0,3),p3;
    cout<<p1.getX()<<endl;
    cout<<p2.getY()<<endl;
//    cout<<p3.Odleglosc(p1,p2);

    return 0;
}
0

Masz tutaj przykład jak prawidłowo porozdzielać i poformatować kod:
https://onlinegdb.com/r1WjaX0J4
Klasa TPunkt jest w osobnych plikach tpunkt.h i tpunkt.cpp. Mała uwaga - nie kompiluje się bo nie ma definicji hypot, tutaj to już ty Bracie musisz wiedzieć, co to takiego, i na co go użyłeś. Ale generalnie to wzór na odległość punktów wygląda nieco inaczej

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