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.
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 :)
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
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 ?
piotrek89 napisał(a)
Heh, źle zrozumiałeś.
No to trudno
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);
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?
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);