Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Luokka ongelma (c++)

Jäynis [27.05.2005 16:01:38]

#

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öä

Gaxx [27.05.2005 17:47:01]

#

Et käsittääkseni muuten, kuin muuttamalla int luku:n publiciksi ja sitten sijoittamalla:

i = mun.luku;

Jäynis [27.05.2005 17:51:52]

#

Nii vähä arvelinki, no täytyy tyytyä metodeihin.

uffis [27.05.2005 21:13:00]

#

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

Gaxx [27.05.2005 22:01:39]

#

Ei kyllä tule heti mieleen missä tuollaisesta muunnosoperaattorista olisi varsinaista hyötyä. Onko sillä jotain käytännön sovellutusta?

Jäynis [27.05.2005 22:33:47]

#

Kiitoksia uffis.
Varsinaista käyttöä ei itsellänikään tule äkkiseltään mieleen mutta kuten sanoin, luokkien(ja yleensä c++) opiskelu kesken.

uffis [28.05.2005 01:37:33]

#

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.

Vastaus

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

Tietoa sivustosta