Komunikacja pomiedzy klasami

0

Witam, mam taki oto problem.
Mam klasy samochod oraz belka. Obie dziedzicza po klasie element. W klasie element mam pola polozenie_x oraz polozenie_y.
Tworze obiekt samochod oraz belka w mainie.
Chciałem napisać metode klasy samochod obliczajaca odległość między samochodem a belką. Jak mam w metodzie samochodu odwołać sie do położenia belki?
Niby oczywisty problem ale nie moge sobie z nim poradzić... Moze ktoś pomoże.

0

skoro znasz dziedziczenie to dostęp do elementów klasy Belka w klasie Samochód nie powinien Ci sprawiać problemu chyba że źle przeczytałem ock.
Daj kod albo wyjaśnij to jakoś po ludzku :)

0
piotrek89 napisał(a)

Witam, mam taki oto problem.
Mam klasy samochod oraz belka. Obie dziedzicza po klasie element. W klasie element mam pola polozenie_x oraz polozenie_y.
Tworze obiekt samochod oraz belka w mainie.
Chciałem napisać metode klasy samochod obliczajaca odległość między samochodem a belką. Jak mam w metodzie samochodu odwołać sie do położenia belki?
Niby oczywisty problem ale nie moge sobie z nim poradzić... Moze ktoś pomoże.

Wydaję mi się, że źle rozumiesz ideę dziedziczenia. Klasa samochód dziedziczy po klasie element i posiada współrzędne x i y. Klasa belka również dziedziczy po klasie element więc posiada również takie informacje. Jednakże klasa Samochód nic nie wie o klasie belka i vice versa. Jeżeli chcesz obliczyć odległość do belki, to musisz informacje o tym obiekcie przekazać do metody np. przez parametr

0

Heh, źle zrozumiałeś. Mam kod:


class C_element
{           
public :
       int polozenie_x;
       int polozenie_y;

             C_element () ; 
             ~C_element () {};
    

      };

Dalej kolejne klasy:

 class C_samochod : public C_element
{           

    

      };
class C_belka : public C_element
{           

    int odleglosc();

      }; 

No i teraz tworze obiekt belka i samochod.

I jak ma wyglądać funkcja odleglosc? Licząca odległość pomiędzy samochodem a belką?

Jak mam obliczyć polozenie_x (samochodu) i polozenie_x (belki)?

Funkcja odleglosc znajduje sie w klasie belka.

Trzeba to przez jakiś wskaźnik zrobić? Jak tak to jak ?

0
piotrek89 napisał(a)

Heh, źle zrozumiałeś.

No to trudno

0
static float(ew.double) C_element::obliczOdleglosc(const C_element *el1,const C_element *el2);

Tak byłoby najprościej i najsensowniej,zamiast pchać to do klasy belka.
A dla pełnego wypasu jeszcze wersja przeciążona licząca pomiędzy elementem this i podanym

float(ew.double) C_element::obliczOdleglosc(const C_element *other);
0

Wydaję mi się, że źle rozumiesz ideę dziedziczenia. Klasa samochód dziedziczy po klasie element i posiada współrzędne x i y. Klasa belka również dziedziczy po klasie element więc posiada również takie informacje. Jednakże klasa Samochód nic nie wie o klasie belka i vice versa. Jeżeli chcesz obliczyć odległość do belki, to musisz informacje o tym obiekcie przekazać do metody np. przez parametr

Wszystko rozumiem że obydwie klasy siebie nie widzą nawzajem. Nie wiem tylko jak dobrze to zrobić zeby siebie widziały? Muszą w to wszystko ingerować obiektu utworzone w mainie? Da rade może podać wskaźnik na obiekt do tej funkcji? Tylko jak to zrobić skoro metoda odleglosc nie jest wywoływana w mainie. Jak do niej przekazać jakieś parametry?

0

Metoda odległość powinna być publiczną składową klasy C_element:

double odleglosc(const C_element& el)
{
    ..
   return odleglosc;
}

A w main wywoływać tak:

double odleglosc;
odleglosc = obiekt_klasy_belka.odleglosc(obiekt_klasy_samochod);
//lub
odleglosc = obiekt_klasy_samochod.odleglosc(obiekt_klasy_belka);

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