Subject: Marko Somppi, Janne Luoma, Sami Lahti/Demo 9/teht. 1-6

From: Marko Eerik Somppi <[email-masked]>
Date: Tue, 22 Nov 1994 10:11:46 +0200 (EET)

Muutetaan pisteen piirtamisfunktiota siten, etta se voidaan periyttaa
suoraan ympyralle ja myoskin neliolle:
...
virtual int piirra() { printf("...",Tilat[nakyvissa()],nimi,x,y,r=0)}
...

Neli”luokan lis„ys

class nelio: public piste,public ympyra{
  protected:
    int e;
  public:
   nelio(char *s="nelio",int ix,int iy, int is=1) : piste(s,ix,iy){
     e = is
   }
   int ympyr„::muuta_koko(int ns);
   int piste::piirra(nimi,x,y,is);
};

Teht2
esim kantaluokan(piste)h„vitt„j„ ei virtuaalinen
class piste{
...
//h„vitt„j„ ei virtuaalinen
  ~piste() {
  sammuta();
  }
};
int piste::sammuta()
  { nakyy = 0;
    return piirra();
  }

class ympyra;//perii pisteen ominaisuudet
...
class monikulmio;//perii ympyr„n ominaisuudet (samalla my”s pisteen)
virtual int piirra() {
  printf("...");
  }
  sammuta();
// h„vitt„j„„ kutsuttaessa se vaihtaa osoittimen osoittamaan luokan moni-
// kulmio virtuaalitaulua, joka osoittaa monikulmio::piirra kohtaan.

Jos ei-virtuaallinen funktio m„„ritelt„isiin uudelleen tulee funktiota
kutsuttaessa ristiriita mit„ funktiota oikeastaan itseasiassa tarkoitetaan.

Teht3
ympyra::mahtuuko ei ole kirjoitettu inline-funktioksi koska funktion tulee
p„„st„ k„siksi sek„ ympyr„-luokan ett„ neli”-luokan alkioihin. Funktio
taytyy olla ilmeisesti esitelty niiden luokkien jalkeen, joita se kayttaa.

Teht4
Mik„li haluttaisiin lis„t„ uusi luokka kolmio tulisi FRIEND.CPP:ss„
tulisi luokan lis„yksen lis„ksi lis„t„ erikseen mahtuuko funktiot kolmion
mahtumiselle ympyr”iden ja neli”iden sis„lle.  Lis„ksi public yst„viksi tulisi
lis„t„ friend mahtuuko(kolmio &k, nelio &n), friend mahtuuko(kolmio &k,
ympyra &y) jne...

Teht5

Sijoitus on tarpeellinen, koska esittelyn j„lkeinen tila ei tunne uutta
p:n arvoa ilman piste=piste-m„„rittely„

Teht6

piste &piste::operatorfabs(int i)
{
  piste t;
  if (i<0) return -i
  else return i;
}

piste &piste::operator=(piste &p2)
{
  piste t;
  if (i<0) return -i
  else return i;
}

piste &piste::operator+=(piste &p2)
{
 piste t;
 t.x = 1 + p2.x;
 t.y = 1 + p2.y;
 return t;
}

piste &piste::operator!(piste &p2)
{
 piste t;
 t.x = -p2.x;
 t.y = -p2.y;
 return t;
}

piste &piste::operator+++(piste &p2)
{
 piste t;
 if ( p2.x < 0 ) t.x = -p2.x;
 if ( p2.y < 0 ) t.y = -p2.y;
 return t;
}
Funktio on k„yt„nn”ss„ sama kuin itseisarvo.