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. |