Witam.
Możliwe że mi się miesza c++ z javą, więc proszę o pomoc przy polimorfiźmie.
Utworzyłem jedną klasę bazową "pojazd_mechaniczny" i dwie klasy pochodne dziedziczące po bazowej: samochod i motocykl.
Klasa samochod ma jeszcze swoje dodatkowe pola i metody.
Dodawanie obiektów chyba działa. Ale problem jest przy wyświetlaniu.
Obiekty trzymam w kontenerze deque<pojazd_mechaniczny>pojazd.
Dodaje obiekty w sposób pojazd.push_back(samochod()) lub pojazd.push_back(motocykl()). Przez new object() nie wchodzi.
Przy wyswietlaniu wszystkich obiektów typu samochod oraz motocykl w pętli for jest problem przy wyświetleniu obiektu który jest typu samchod. Obiekty motocykl nie mają żadnych dodatkowych pól i metod w porównaniu do obiektów typu samochod.
Funkcja wyswietlająca wszystkie dane o wszystkich obiektach wygląda tak:
void Wyswietl_dane_o_wszystkich_pojazdach()
{
for(deque<pojazd_mechaniczny>::iterator i=pojazd.begin();i!=pojazd.end();i++)
{
cout<<"Marka: "<<i->zwroc_marke()<<endl
<<"Model: "<<i->zwroc_model()<<endl
<<"Rok produkcji: "<<i->zwroc_rok_produkcji()<<endl
<<"Moc: "<<i->zwroc_moc()<<" KM"<<endl
<<"Rodzaj paliwa: "<<i->zwroc_rodzaj_paliwa()<<endl
<<"Pojemnosc baku: "<<i->zwroc_pojemnosc_baku()<<" litrow"<<endl
<<"Maksymalna predkosc: "<<i->zwroc_max_predkosc()<<"km/h"<<endl
<<"Liczba miejsc: "<<i->zwroc_liczbe_miejsc()<<endl
<<"Wysokosc: "<<i->zwroc_wysokosc()<<" cm"<<endl
<<"Dlugosc: "<<i->zwroc_dlugosc()<<" cm"<<endl
<<"Szerokosc: "<<i->zwroc_szerokosc()<<" cm"<<endl
<<"Waga: "<<i->zwroc_wage()<<" kg"<<endl;
if(typeid(samochod)==typeid(i))
{
cout<<"Liczba drzwi: "<<i->zwroc_liczbe_drzwi()<<endl
<<"Pojemnosc bagaznika: "<<i->zwroc_pojemnosc_bagaznika()<<" litrow"<<endl;
}
}
}
I chodzi o sprawdzenie czy obiekt pojazd nie jest obiektem samochod. W Javie było coś takiego jak "if(a instanceof b){kod....}", a jak tu jest jeszcze przy użyciu iteratorów?