31.12.2014 Views

Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...

Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...

Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!