/* MULTI6.CPP - virtuaalinen moniperint„ */ #include class cPiste { int x,y; public: cPiste(int ix=0, int iy=0) { x = ix; y = iy; printf("Uusi cPiste\n"); } void tulosta(int n=0) { printf("(%d,%d)",x,y); if (n) printf("\n"); } void aseta_piste(int nx, int ny) { x = nx; y = ny; } ~cPiste(){ printf("Piste pois!\n"); } }; class cYmpyra : virtual public cPiste { protected: int r; public: cYmpyra(int ix=0, int iy=0, int ir=1): cPiste(ix,iy) { r = ir; printf("Uusi ympyr„\n");} void tulosta(int n=0) { cPiste::tulosta(0); printf(" r=%d ",r); if (n) printf("\n"); } ~cYmpyra() { printf("Ympyr„ pois!\n"); } }; class cNelio : virtual public cYmpyra { public: cNelio(int ix=0, int iy=0, int is=1): cYmpyra(ix,iy,is) { printf("Uusi neli”\n"); } void tulosta(int n=0) { cPiste::tulosta(0); printf(" s=%d ",r); if (n) printf("\n"); } ~cNelio() { printf("Neli” pois!\n"); } }; class cYmpyranelio: virtual public cYmpyra, public cNelio { public: cYmpyranelio(int ix=0, int iy=0, int ir = 1, int is = 2) : cYmpyra(ix,iy,ir), cNelio(ix,iy,is) { printf("Uusi ympyr„neli”\n"); aseta_piste(ix,iy); } void tulosta(int n=0) { cYmpyra::tulosta(0); cNelio::tulosta(0); if (n) printf("\n"); } ~cYmpyranelio() { printf("Ympyr„neli” pois!\n"); } }; int main(void) { printf("\n----------------------------------------------------------\n"); cYmpyranelio yn(1,2,3,4); yn.tulosta(1); yn.aseta_piste(9,7); // Viittaako ympyr„n vai neli”n pisteeseen?? yn.tulosta(1); cYmpyra y(2,3,4); y.tulosta(1); return 0; }