Subject: JuhaVilleJuntunen\demo9\tehtavat2_4+6_7.cpp (fwd)

From: Juha Ville Juntunen <[email-masked]>
Date: Tue, 22 Nov 1994 13:56:55 +0200 (EET)

// GKO DEMO 9
// Juha-Ville Juntunen

//tehtava 2:
// Ilman virtual-m„„rittely„ hahmon tulosta_paikka() fkt:_ssa, tulisi pallon tuhoajan
// suorituksen yhteydess„ ajettua v„„r„ tulosta_paikka()funktio, ja paikka olisi v„„r„.
// Ilman virtualia paikka on 1 virtualin kanssa 2.

#include <stdio.h>
#include <fstream.h>
#include <iomanip.h>

class hahmo
{
private:
	int paikka;
public:
	hahmo() { printf("	hahmon rajentaja \n"); paikka=1;}
    ~hahmo() { printf( "	hahmon tuhoaja , paikka:%d\n",paikka );}
    virtual void tulosta_paikka() { printf("	pallon paikka:%d\n" ,paikka ) ;}
    void missa_paikka() {	tulosta_paikka(); }

};

class pallo:hahmo
{
private:
int paikka;
public:
	pallo() { printf("	pallon rajentaja \n"); paikka=2;}
    ~pallo() { printf("	pallon tuhoaja \n" ); missa_paikka();}
	void tulosta_paikka() { printf("	pallon paikka:%d\n" ,paikka ) ;}

};

int main()
{
	printf("o Hahmon m„„rittely\n");
	hahmo *h = new hahmo();
    printf("o Pallon m„„rittely\n");
	pallo *p = new pallo();
    printf("o Pallon tuho\n");
	delete p;
    printf("o Hahmon tuho\n");
	delete h;
	return 0;
}

/*

tehtava3:

 Se ei ole inlinena, koska se ei tieda neliosta, etta silla on kentta s, nelion
 maarittelyhan on vasta ympyran maarittelyn alapuolella. Niinpa ympyra::mahtuuko
 pitaa olla vasta nelion maarittelyn jalkeen, jotta se ( siis kaytannossa
 kaantaja ) tietaa nelion kentat.

tehtava 4.

 Kolmiolle pitaa myos kertoa alussa ystavat:
 			friend nelio;
 			friend ympyra;
 Ja myos nelion ja ympyran maarittelyissa pitaa olla
 			friend kolmio;
 Sitten voidaan tehda halutut funktiot public: osiin.
 Pitaa muistaa, etta jos kolmion maarittely on viimeisena ja ympyrassa tai neliossa on
 mahtuuko -vertailuja, kolmion suhteen, einiita taaskaan voida laittaa inline, vaan
 maarittelyt on vietava kolmion maarittelyn jalkeen.

tehtava 6:

// itseisarvo
piste piste::fabs(piste p)
{
	p.x = fabs(p.s); // kutsuu oikeaa fabsia, koska nyt parametri int eik„ piste
	p.y = fabs(p.y);
	return p;
}

// vertailu
piste piste::operator=(piste p, piste k)
{
 	return (p.x = k.x && p.y = k.y);
}

// lisays
piste piste::operator+=(piste p, piste k)
{
	p.x += k.x;
	p.y += k.y;
	return p;

}

// etumerkinvihto
piste piste::operator-(piste p);
{
	p.x = -p.x;
	p.y = -p.y;
	return p;

}

//koordit positiivisiksi
// MITA ?? tamahan on sama kuin eka (itseisarvo)
// no okei..
piste piste::operator+(piste p)
{
	p.x = fabs(p.x);
	p.y = fabs(p.y);
	return p;
}

tehtava 7:

Koska kutsussa a[i]=3 [i] -operaattori on maaritelty siten, etta se palauttaa
osoitteen ( muuttuja t) taulukon alkioon i ja jos se on < 0 tai suurempi kuin koko,
palauttaa se osoitteen viimeiseen alkioon, joten taulukon ohi ei viitata
*/