13 skyrius - techmat.vgtu.lt
13 skyrius - techmat.vgtu.lt
13 skyrius - techmat.vgtu.lt
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