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.

int main( ){<br />

Lumber p1;<br />

Lumber p2( "2x4", "A", 8, 0., 100, 50.00 );<br />

//<br />

p1.getLumber( );<br />

p1.showLumber( );<br />

p2.showLumber( );<br />

//<br />

system( "pause" );<br />

return 0;<br />

}<br />

Nors programos tekstas ilgas, logiškai ji paprastutė. Ši programa neatlieka jokių veiksmų, tik<br />

įveda dviejų Lumber klasės objektų duomenis ir juos parodo. Komentarų ženklu 1 pažymėti<br />

operatoriai parodo, kaip kviečiami abiejų bazinių klasių konstruktoriai, o vėliau užpildomi<br />

išvestinės klasės papildomi laukai. Operatoriai su komentarais 2 rodo, kad bazinės klasės<br />

metodams kviesti būtina priklausomybės operacija :: .<br />

Minėjome, kad daugybinis paveldimumas ne visada saugus. Matyt, todėl vėlesnėje C++<br />

pagrindu sukurtoje kalboje Java daugybinio paveldimumo iš viso nebeliko; panašius efektus ten<br />

pasiekti galima tik sudėtingomis programinėmis schemomis. Čia parodysime tik kelis galimus<br />

daugybinio paveldimumo neapibrėžtumus.<br />

9 pavyzdys. Bazinių klasių funkcionalumas kartojasi (čia – vienodi metodai):<br />

#include <br />

using namespace std;<br />

//<br />

class A{<br />

public:<br />

void m( ){ }<br />

};<br />

//<br />

class B{<br />

public:<br />

void m( ){ }<br />

};<br />

//<br />

class C: public A, public B{ };<br />

//<br />

int main( ){<br />

C c;<br />

//c.m( ); // klaida! Neaišku, kurį metodą kviesti<br />

c.A::m( ); // gerai: kviečiamas iš A paveldėtas metodas<br />

c.B::m( ); // gerai: kviečiamas iš B paveldėtas metodas<br />

//<br />

system( "pause" );<br />

return 0;<br />

178

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

Saved successfully!

Ooh no, something went wrong!