ďťż

Ładny brzuch

Miałem za zadanie uzupełnić poniższy kod: (zbędne fragmenty wywaliłem)
#include <iostream.h> #include<conio.h> /*********** Klasy podstawowe****************************/ class instrument { public: void ktos_ty() { cout << " To ja, instrument: "; } void virtual wydaj_dzwiek() { cout << " Jakis dzwiek !\n"; } }; /***********Klasy pochodne od klasy instrument***********/ class fortepian : public instrument { int il_klawiszy; public: void wydaj_dzwiek() { cout << " Plim-plim-plim !\n"; } }; class gitara : public instrument { public: void wydaj_dzwiek() { cout << " Brzdek-brzdek-brzdek !\n"; } }; /*****************************Program główny*************************/ main() { getchar(); }

tak bym otrzymywał na ekranie:

To ja, instrument: (dźwięk dla poszczególnego instrumentu)
W ramach testu po
"main()"
wstawiłem:
instrument fortepian; fortepian.ktos_ty() fortepian.wydaj_dzwiek()
Więc powinienem otrzymać:
To ja, instrument: Plim-plim-plim !
Jednak otrzymuje:
To ja, instrument: Jakis dzwiek !

Co tu źle napisałem? :huh:



tworzysz obiekt typu instrument a chcesz chyba fortepian?;p
fortepian f; f.ktos_ty() f.wydaj_dzwiek()

to zes namieszal...
main() { fortepian fort; fort.ktos_ty(); fort.wydaj_dzwiek(); }

pisze z glowy ale powinno dzialac..

@edit: icek mnie wyprzedzil :P
Użytkownik fernandez edytował ten post 12 grudzień 2006, 00:23
Oczywiście koledzy mają rację, ja jednak zauważyłem że nieśmiało używasz funkcji wirtualnej. Jeśli chciałeś tutaj wykorzystac mechanizm polimorfizmu to w funkcji main powinieneś wpisać taki kod:
//mamy wskaźnik do obiektu typu instrument instrument *jakisinst; //tworzymy dwa obiekty "pochodne" od instrumentu fortepian fort; gitara git; //tutaj ustawiamy wskaźnik "pokazujący" na instrument na obiekt "pochodny" jakisinst=&fort; //W tym miejscu następuje sedno problemu - kompilator dzięki późnemu wiązaniu "wie" że powinien wywołać //ktos_ty() dla fortepianu a nie dla gitary jakisinst->ktos_ty(); jakisinst->wydaj_dzwiek();

Jeśli nie użyłbyć słowa virtual - to oczywiście otrzymałbyś tylko "Jakiś dzwięk".
Jeśli popełniłem jakieś błędy w tłumaczeniu proszę o poprawę. Ikeban
Użytkownik ikeban edytował ten post 12 grudzień 2006, 01:01
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •