Dziedziczenie klas

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.

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.

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.

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.

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