Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...
Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...
Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Metodų perkrovimas (overloading) <strong>ir</strong> pseudo polimorfizmas<br />
Klasę C<strong>ir</strong>cle su klase Shape sieja vadinamasis is-a ryšys: klas÷s C<strong>ir</strong>cle objektai gali<br />
būti naudojami visur, kur reikalaujama Shape klas÷s objektų. Pvz. jei funkcija<br />
reikalauja Shape* tipo parametro, tai galime perduoti C<strong>ir</strong>cle* objektą.<br />
Paveld÷jusios klas÷s ne tik prid÷jo savų duomenų <strong>ir</strong> metodų, bet dar <strong>ir</strong> perkrov÷<br />
metodą draw. Kuris iš metodų bus iškviestas žinoma jau kompiliavimo metu <strong>ir</strong><br />
priklauso tik nuo kintamojo ar rodykl÷s tipo. Tai n÷ra tikrasis polimorfizmas.<br />
Pailiustruokime pavyzdžiu:<br />
// screen.cpp<br />
void Screen::paintEvent(QPaintEvent*)<br />
{<br />
QPainter p(this);<br />
Shape* shapeTmp = shape;<br />
shapeTmp->draw(&p);<br />
shapeTmp = c<strong>ir</strong>cle;<br />
shapeTmp->draw(&p);<br />
shapeTmp = square;<br />
shapeTmp->draw(&p);<br />
}<br />
shapeTmp = rectangle;<br />
shapeTmp->draw(&p);<br />
Programa nupieš keturis taškus, atitinkančius shape, c<strong>ir</strong>cle, square <strong>ir</strong> rectangle<br />
centrus, o ne pačias figūras. Kompiliatorius sakinyje shapeTmp->draw(&p) mato,<br />
jog rodykl÷s shapeTmp tipas yra Shape*, tod÷l kviečia metodą Shape::draw. Taigi,<br />
šioje vietoje turime paveld÷jimą, bet neturime polimorfizmo. Polimorfizmas -<br />
sekančiame skyrelyje.<br />
90