Prev Next Up Title Contents Index

Luokan jäseninä muita luokkia (member objects), koostaminen


Moniperintä voidaan usein välttää käyttämällä luokan jäseninä muita luokkia (member objects). Esimerkiksi värillinen piste on piste, jolla on väritieto (is-a, has-a). Jos suhde on has-a- tyyppinen, koostamme (aggregation)luokan muista luokista:

multi1.cpp - luokan alkoina muita luokkia = koostaminen

	/* MULTI1.CPP - alkioina muita luokkia */
	#include <stdio.h>
	
	class caKuvio {                 ... / kuten aikaisemmin
	class cPiste : public caKuvio { ... / kuten aikaisemmin
	
	//----------------------------------------------------------------------------
	class cVari {
	  int r,g,b;
	public:
	  cVari(int ir=0,int ig=0, int ib=0) : r(ir),g(ig), b(ib) {}
	  virtual void tulosta() const {
	    printf("%02x%02x%02x",r,g,b);
	  }
	}; // cVari
	
	//----------------------------------------------------------------------------
	class cVariPiste : public cPiste {
	  cVari vari;
	public:
	  cVariPiste(int ix,int iy,const cVari &ivari) : cPiste(ix,iy),vari(ivari) {}
	  virtual void piirra() const {
	    vari.tulosta(); printf(" ");
	    tulosta("Väripiste"); printf("\n");
	  }
	};
	
	int main(void)
	{
	  cVariPiste p(2,4,cVari(255,0,255));
	  p.sytyta();
	  return 0;
	}

Tehtävä 1.24 Kutsujärjestys

Tutki missä järjestyksessä muodostajia kutsutaan esimerkissä multi1.cpp. (Vihje: lisää luokkien muodostajiin ja hajottajiin tulostuslauseet.)


Prev Next Up Title Contents Index