Eli opiskelen tekemään luokkia ja tämmönen asia rupes mietityttään, miten saada tietyn jäsenmuuttujan arvo ilman muita metodeita, paremmin en osaa sanoa joten soodia kehiin.
#include <conio.h> #include <iostream> using namespace std; class Luokkani { public: void operator=(int luku){this->luku=luku;}; int AnnaLuku(){return luku;}; private: int luku; }; int main(int argc, char *argv[]) { Luokkani mun; int i; mun=5; /*Näin onnistuu mutta i=mun; miten tää onnistuis? Eli saada tietyn jäsenmuuttujan arvo ilman muita metodeita kuten mun.AnnaLuku();?*/ getch(); return EXIT_SUCCESS; }
Edit:Pientä säätöä
Et käsittääkseni muuten, kuin muuttamalla int luku:n publiciksi ja sitten sijoittamalla:
i = mun.luku;
Nii vähä arvelinki, no täytyy tyytyä metodeihin.
Onnistuuhan se, kun laatii luokalle muunnosoperaattorin oikealle tyypille. Semmoinen tehdään esimerkiksi yllä olevaan luokkaan seuraavasti:
operator int() const { return luku; }
ja sitä käytetään niin kuin tuolla kommentoidulla rivillä
i = mun;
Ja vielä lopuksi kannattaa huomata, että nyt metodiesi rivien lopussa oleva puolipiste on turha, koska lohkon lopettavan sulkeen jälkeen ei sellaista tarvita.
EDIT: otin turhat pois
Ei kyllä tule heti mieleen missä tuollaisesta muunnosoperaattorista olisi varsinaista hyötyä. Onko sillä jotain käytännön sovellutusta?
Kiitoksia uffis.
Varsinaista käyttöä ei itsellänikään tule äkkiseltään mieleen mutta kuten sanoin, luokkien(ja yleensä c++) opiskelu kesken.
Onhan noita.
Eräässä projektissa, jossa olin mukana, käytettiin tuota mm. siihen, että erästä omaa päivämääräluokkaa haluttiin käyttää yhdessä Microsoftin DATE-tyypin kanssa. Samoin oma valuuttaluokka oli sellainen, että siitä piti saada arvo ulos doublena sekä Microsoftin valuuttaluokkana, jolloin muunnosoperaattori auttoi niissäkin tilanteissa. Apu tulee siis siitä, ettei ohjelmoijan tarvitse erikseen kertoa, mihin tyyppiin muuttujan sisältö halutaan muuttaa, jolloin tulee vähemmän ns. turhaa koodia.
Tuon idea on suurin piirtein sama kuin Javan toString- ja muut to-alkuiset metodit, joista kuitenkin vain toString-metodia saatetaan kutsua automaattisesti, jos en aivan väärin muista. Muita metodeja pitää erikseen kutsua, mikä joissakin tapauksissa tekee koodista selkeämmän.
Aihe on jo aika vanha, joten et voi enää vastata siihen.