Prev Next Up Title Contents Index

Koostaminen


Moniperinnän kiertämiseksi kokeillaan aluksi versiota:

	class cYmpyranelio: public cYmpyra { 
	  cNelio nelio;
	public:
	  cYmpyranelio(int ix=0, int iy=0, int ir = 1, int is = 2)
	    : cYmpyra(ix,iy,ir), nelio(ix,iy,is) {}
	  void piirra() const { cYmpyra::piirra(); n.piirra(); }
	}; // cYmpyranelio
	
Tämä toimisi muuten hyvin, mutta taas jää neliö sytyttämättä. Eli joko pitäisi sytyta kirjoittaa uusiksi (mutta ei voida, koska se ei ollut virtuaalinen) tai piirra- metodiin laittaa ihmeellinen ehto, jolla tutkitaan onko piirrettäessä ympyrän ja neliö näkyvyys samanlainen ja korjata tämä jollei ole.

Seuraava yritys voisi olla sellainen, että ympyräneliötä ei peritäkään mistään, vaan se koostetaan sekä ympyrästä että neliöstä. Tässä ratkaisussa olisi se huono puoli, ettei ympyräneliö- osoitin taaskaan voisi olla samassa taulukossa muiden graafisista olioista periytyvien olioiden osoittimien kanssa.

Toimivimmalta ratkaisulta näyttäisi sellainen, jossa suosiolla muutetaan kantaluokkaan sytyta ja sammuta virtuaalisiksi. Lisäksi esimerkiksi caKuvioJollaSade - luokasta peritään vielä yksi abstrakti luokka: caKoostettuKuvio, josta sitten tällaiset ympyräneliöt voidaan periä lisäämälle ympyrä ja neliö attribuuteiksi.

Tehtävä 1.27 Kokonaan koostettu ympyräneliö

Kokeile suunnitella ja toteuttaa luokkahierarkia, jossa on em. caKoostettuOlio.


Prev Next Up Title Contents Index