Bit će pozvana metoda resize()
iz klase Window
!
Da bi se funkcija update()
zaista ponašala polimorfno, ona bi morala pozvati verziju metode
resize()
implementiranu u klasi SimpleDialog
. Bez toga ne može adekvatno promijeniti dimenziju
SimpleDialog
prozora.
Da bismo postigli polimorfno ponašanje moramo izmijeniti baznu klasu Window
.
U njoj funkciju resize()
trebamo proglasiti virtualnom:
class Window{
public:
virtual void resize(int x, int y) {
std::cout << "Window::resize" << std::endl;
// ....
}
// .....
};
Kada se virtualna metoda poziva kroz pokazivač ili referencu na baznu klasu
poziva se verzija metode iz klase koja je određena dinamičkim tipom pokazivača,
odnosno reference.
SimpleDialog dialog;
update(dialog); // zove SimpleDialog::resize()
na referenci dialog
zove metoda update()
iz klase SimpleDialog
.
Napomena
|
Polimorfizam je termin koji označava primjenu jednog te istog koda na različite vrste
objekata. Objekti moraju pripadati istoj hijerarhiji klasa, a postiže se kroz mehanizam virtualnih
funkcija. Polimorfno se mogu ponašati samo klase koje definiraju barem jednu
virtualnu funkciju te se stoga takve klase nazivaju polimornim klasama. |