24.03.2015 Views

13 skyrius - techmat.vgtu.lt

13 skyrius - techmat.vgtu.lt

13 skyrius - techmat.vgtu.lt

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

3. Dabar metodas reikšmę turi grąžinti jau naudodamasis išvestinės klasės konstruktoriumi.<br />

Grąžinti reikšmės klasės Counter konstruktoriumi nevalia, nes kompiliatorius nežinos, kaip<br />

pertvarkyti Counter formato objektą į CounterDown formatą panašiose situacijose, kaip 4-a<br />

pastaba pažymėtame operatoriuje.<br />

4. Tokia sintaksė irgi kviečia išvestinės klasės konstruktorių su argumentu. A<strong>lt</strong>ernatyvi šio<br />

operatoriaus sintaksė būtų CounterDown c3 (--c2 ); . Tokia sintaksė, kai išvestinės klasės<br />

objektai sukonstruojami kopijuojant ir dar atliekant papildomus skirtingose klasėse<br />

apibrėžtus veiksmus (čia – -- arba ++), visad yra kebli. Pabandykit į programą įrašyti<br />

operatorių CounterDown c4 = ++c1; – aišku, bus deklaruota klaida. Turėdami galvoje 3-iąją<br />

pastabą, pabandykit klaidą ištaisyti. Visa tai yra specifiniai sintaksės dalykai, be kurių galima<br />

išsiversti. Jie išsamiai aprašyti <strong>13</strong>.3 skyriuje; pradėdami pažintį su paveldimumu galite šį<br />

skyrių praleisti.<br />

Paleiskite programą ir pamatysite, kad iš tikrųjų prieš konstruojant išvestinės klasės objektą<br />

yra suformuojamas atitinkamas bazinės klasės objektas. Tai yra būtina, kadangi išvestinė klasė<br />

paveldi visus bazinės klasės laukus (ir gali papildyti laukų sąrašą), o jų reikšmėms suformuoti<br />

būtina paleisti bazinės klasės konstruktorių. Galima netgi išreikštai nekviesti bazinės klasės<br />

konstruktorių – jie vis tiek bus iškviesti. Galite tuo įsitikinti taip pakeitę išvestinės klasės<br />

konstruktorius:<br />

CounterDown( ) {<br />

cout

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

Saved successfully!

Ooh no, something went wrong!