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;
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.
Tuntui tuo ainakin Dev-c++ :lla toimivan ilman virheilmoituksia. Mistäköhän syystä Borland siitä valitti? No kiitos kuitenkin.
tarvitaankoha visualis friend´iä ja operator* toho 5*gorilla hommaan? juust ny alan tutustuu ...asiaan pikkuhilijaa =)
niin ja jos on 5*gorilla tai gorilla*5 niin sit pitää argumentitki olla toisinpäin.
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;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.