Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Operaattorien uudelleenmäärittely(/ylikuormittaminen?)

tn [05.02.2004 20:19:23]

#

Olen (kielenä c++) luonut luokan ja määritellyt sen operaattoreita uudestaan. Seuraavanlainen määrittely onnistuu...

Luokannimi operator*(const double&);

...ja kertolasku...

olio2 = olio1 * doubleluku;

...toimii mainiosti, mutta miten saan kertolaskun määriteltyä myös toisinpäin? Siis:

olio2 = doubleluku * olio1;

Dual [06.02.2004 12:39:01]

#

No tämä toimii jotenkin (Borland C++) ... tulee kyllä varoitus.

#include <iostream.h>

class apina
{
private:
	int luku;
public:
	apina() { this->luku = 0; };
	apina(int a) { this->luku = a; };
	apina(apina& kopio) { this->luku = kopio.Luku(); };
	~apina() { };
	void operator=(const int& luku) { this->luku = luku; };
	int Luku(void) { return (this->luku); };
};

apina operator*(const int& a, const apina& b)
{
	apina temp = a * b.Luku();
	return temp;
};

int main(void)
{
	apina gorilla = 3;

	apina tulos = 5*gorilla;
	cout << tulos.Luku() << endl;

	return 0;
}

Ja en ehkä ite käyttäisi tota vaan tyytyisi siihen että se kertolaskun suunta pitää muistaa.

tn [06.02.2004 17:38:17]

#

Tuntui tuo ainakin Dev-c++ :lla toimivan ilman virheilmoituksia. Mistäköhän syystä Borland siitä valitti? No kiitos kuitenkin.

cloudi [07.02.2004 14:58:04]

#

tarvitaankoha visualis friend´iä ja operator* toho 5*gorilla hommaan? juust ny alan tutustuu ...asiaan pikkuhilijaa =)

cloudi [07.02.2004 19:19:21]

#

niin ja jos on 5*gorilla tai gorilla*5 niin sit pitää argumentitki olla toisinpäin.

Dual [08.02.2004 19:19:32]

#

lainaus:

No kiitos kuitenkin.

It was my pleasure.

lainaus:

niin ja jos on 5*gorilla tai gorilla*5 niin sit pitää argumentitki olla toisinpäin.

Siis se toisinpäin menevä (gorilla*5) on se helpompi ja taatusti tyylikkäämpi tapa, lisätään vaan luokkaan operator* - funktio:

class apina
{
   // Tässä ne samat jutut kun aikaisemminkin
   apina operator*(const int& luku);
}

apina apina::operator*(const int& luku)
{
   apina temp = this->luku * luku;
   return temp;
}

Ja näin (siis luokan sisäisenä funktiona) olisin toivonut voivani toteuttaa sen kertolaskun myös toisinpäin.. vaan en ollut tarpeeksi kova jätkä.. nyyh;)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta