/* MULTI1.CPP - alkioina muita luokkia */ #include //---------------------------------------------------------------------------- class caKuvio { int nakyy; // Sytytetty vai sammutettu void vaihda_paikka(int nx,int ny) { x = nx; y = ny; } protected: // Jos halutaan peri„ luokkaa, pit„„ j„lkel„isten int x,y; // k„ytt””n sallittujen attrib. olla protected public: caKuvio(int ix=0, int iy=0) { vaihda_paikka(ix,iy); nakyy = 0; } virtual ~caKuvio() { } int nakyvissa() const { return nakyy; } virtual void piirra() const = 0; // Pure virtual-metodi => abstr. luokka void sammuta() { if ( nakyvissa() ) { nakyy = 0; piirra(); }} void sytyta() { if ( !nakyvissa() ) { nakyy = 1; piirra(); }} void siirra(int nx, int ny) { if ( !nakyvissa() ) { vaihda_paikka(nx,ny); return; } sammuta(); vaihda_paikka(nx,ny); sytyta(); } virtual void tulosta(const char *s="") const { printf("%-10s: %-10s (%02d,%02d)",nakyy?"Sytytetty":"Sammutettu",s,x,y); } }; // caKuvio //---------------------------------------------------------------------------- class cPiste : public caKuvio { public: cPiste(int ix=0, int iy=0) : caKuvio(ix,iy) {} virtual ~cPiste() { sammuta(); } virtual void piirra() const { tulosta("Piste"); printf("\n"); } }; // cPiste //---------------------------------------------------------------------------- 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; }