Dziedziczenie klas

Odpowiedz Nowy wątek
2010-07-25 23:27

Rejestracja: 9 lat temu

Ostatnio: 2 miesiące temu

0

Witam wszystkich,
Mam problem z dziedziczeniem klas i bardzo proszę o pomoc. Dla uproszczenia kodu, nie będę kopiował tutaj fragmentów projektu tylko podam analogiczny problem:
Mamy klasę Samochod. Jej potomkiem jest klasa Osoba. W klasie Samochod jest lista z elementami typu Osoba. I tutaj problem. Nie widzi mi klasy dziedziczącej Osoba.
Kod:

ref class Samochod {
     List<Osoba^>^ Pasazerowie;

}

public ref class Osoba: public Samochod {
}

Tak, to kompiler nie widzi mi klasy Osoba, przy definicji Listy.
Pomyślałem sobie, że brakuje deklaracji(w natywnym(? zwykłym) C++ z tego co wiem nie trzeba), tzn. już nie wiedziałem co robić, to dodałem.
Kod:

ref class Samochod {
    public:
      ref class Osoba: public Samochod;
      List<Osoba^>^ Pasazerowie;

}

public ref class Osoba: public Samochod {
}

ale wtedy pokazuje przy deklaracji, że nie widzi definicji klasy Samochod.
Kółko się zamknęło, a ja się zapętliłem.

Dziękuję za wszelkie odpowiedzi.

P.S. Jeśli, to oczywiste podstawy, to proszę o pomoc w zbudowaniu zapytania dla google.


"Ten, de profundis, z ciemnego kurhanu
Na trąbę powstanie. " Juliusz Słowacki

"Polacy! Gdyby Spartanie odżyli i zobaczyli Wasz heroizm i bohaterstwo, waleczny i dzielny ten naród schyliłby przed Wami czoło. Polska nie może być zwyciężona." - J.Bryan

Pozostało 580 znaków

pan kuba
2010-07-26 08:08
pan kuba
0

Dziwna strasznie ta konstrukcja... Osoba dziedziczy po Samochod? To możesz skorzystać z polimorfizmu i napisać tak:
List<Samochod^>^ Pasazerowie;
Każda Osoba jest Samochodem, więc tu nie wywali błędu.

Pozostało 580 znaków

2010-07-26 08:35
Moderator

Rejestracja: 12 lat temu

Ostatnio: 37 minut temu

Lokalizacja: Wrocław

0
arrowman napisał(a)

Mamy klasę Samochod. Jej potomkiem jest klasa Osoba. W klasie Samochod jest lista z elementami typu Osoba. I tutaj problem.

Tak, to jest niewątpliwie problem.
Jesteś pewien, że dobrze przemyślałeś projekt swojego programu? Ja nigdy nie widziałem, żeby klasa bazowa posiadała pola typu klas pochodnych.
Dlaczego chcesz wiązać klasę bazową z klasą pochodną? Powiązanie powinno być tylko w jedną stroną - poprzez dziedziczenie. Osoba zna Samochód, ale Samochód nie wie nic o klasach dziedziczących po sobie. Takie zamieszanie, które chcesz zrobić, może oznaczać tylko jedno - problemy w przyszłości.
(Zakładam też, że nazwy Samochód i Osoba są użyte tylko w głupim przykładzie, i na serio takich dziwnych rzeczy nie robisz, bo przecież to nie ma sensu.)
No i sprawa druga - wszystkie klasy bazowe powinny być abstrakcyjne.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2010-07-26 10:53

Rejestracja: 9 lat temu

Ostatnio: 2 miesiące temu

0
pan kuba napisał(a)

To możesz skorzystać z polimorfizmu

No tak, polimorfizm. Wczoraj o nim czytałem. Dzięki. Dopiero się tego uczę. Rzeczywiście, teraz to wygląda dziwnie.

somekind napisał(a)

Jesteś pewien, że dobrze przemyślałeś projekt swojego programu? Ja nigdy nie widziałem, żeby klasa bazowa posiadała pola typu klas pochodnych.
Dlaczego chcesz wiązać klasę bazową z klasą pochodną? Powiązanie powinno być tylko w jedną stroną - poprzez dziedziczenie. Osoba zna Samochód, ale Samochód nie wie nic o klasach dziedziczących po sobie. Takie zamieszanie, które chcesz zrobić, może oznaczać tylko jedno - problemy w przyszłości.
No i sprawa druga - wszystkie klasy bazowe powinny być abstrakcyjne.

Dzięki za rady. Nie wątpliwie są cenne.

No, to muszę trochę pozmieniać, ale nie dużo na szczęście. Dzięki Wam za pomoc.


"Ten, de profundis, z ciemnego kurhanu
Na trąbę powstanie. " Juliusz Słowacki

"Polacy! Gdyby Spartanie odżyli i zobaczyli Wasz heroizm i bohaterstwo, waleczny i dzielny ten naród schyliłby przed Wami czoło. Polska nie może być zwyciężona." - J.Bryan

Pozostało 580 znaków

Odpowiedz

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