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.