C++ jelppiä

Mitenkäs C tehdään sellainen kun haluan että luokassa määriteltyä muuttujaa muutettaessa kutsutaan automaattisesti luokan funktiota.
Ulospäin siis näkyisi kuin muuttuja mutta sisäisesti temppu olisi funkiokutsu.

En muista millä tätä kutsuttiin joten enpä löydä kirjoista tai netistä apuja.
11252
Äänestä

Muut lukivat myös

Vastaukset 11

Vanhimmat

Operator overloading

Äänestä

Function object.

Äänestä

("En muista millä tätä kutsuttiin joten enpä löydä kirjoista tai netistä apuja.")

eikä ihmekkään, koska sellaista ei ole.

Linux Mint 18.1 Serena
Xfce 64-bit

Äänestä
  • Ehkä aloittelija voisi täsmentää ongelmaansa.

    Äänestä

Kuvasin kyllä jo tuossa aloituksessa asian :-)
Olisi vaan niin näppärää pistää muuttujan muuttamiseen sidottu rutiini tekemään asioita mitkä nyt pitää tehdä funktiokutsulla.
Jotenkin muistelin että tällainen olisi kielessä. Siitä kun viimeksi tuli C koodailtua (työksi) on jo yli 25v joten ihan ei kaikkea syntaksista muista.

Äänestä
  • Ainut mitä minulle tulee mieleen on rekursiivinen aliohjelma tai funktio joko kutsuu itseään. Tarpeen kun esimerkiksi suoritetaan kasiorakenteen sisällä tiedoston hakua. On vaan mahoton muistisyöppö, koska funktio kutsu saa prosessorin latomaan pinoon kuilloinkin voimassa olevien rekistereiden sisällön ja paluu osoitteet. No ehkä ei enään nykyään törmään pinonylivuoto virheeseen, mutta ennen se oli varottavissa ja oli pakko ottaa huomioon missä käytti ja missä ei.


    Linux Mint 18.1 Sarah
    Xfce 64-bit

    Äänestä

  • Tarkoitatko sijoitusoperaattoria?

    Äänestä


Kiitokset vinkistä operaattorin overload-käyttöön.

Alla oleva kyhäelmäni tuntuu toimivan mutta vielä jää ongelmaksi että pitäisi saada samalla lailla toisinpäinen sijoitus niin että obj1 voisi suoraan sijoittaa integeriin ilman pakollista viittaamista pistenotaatiolla luokan sisäiseen muuttujaan.


#include "stdafx.h"
#include <iostream>

class example
{
public:
int a;
void operator=(int aaa);
};

void example::operator=(int aaa)
{
(*this).a = aaa;
std::cout<<"kukkuu\n";
}

int _tmain(int argc, _TCHAR* argv[])
{
int bbb=100;
example obj1;

obj1 = bbb; // tulostaa kukkuu
std::cout<<obj1.a ;

for(;1;);
}

Äänestä

Pitääpä ottaa takaisin. Sain ratkaistua toisin päin sijoitusongelmankin.
Nyt esimerkkiluokkaan voi sijoittaa integerin ja se laukaisee funktion.
Lisäksi luokan voi suoraan sijoittaa integeriin ja se laukaisee toisen funktion.
Nyt voin tehdä vanhaan koodiin näppärän lisän ilman toimivan koko koodin muuttamista.
Kiitokset vielä kerran overload-operaattorivinkeistä.

#include "stdafx.h"
#include <iostream>

class example
{
public:
int a;
void operator=(int aaa)
{
(*this).a = aaa;
std::cout<<"kukkuu\n";
}

operator int() const
{
std::cout<<"kiekuu\n";
return a;
}
};


int _tmain(int argc, _TCHAR* argv[])
{

int bbb=100;
example obj1;

obj1 = bbb;
std::cout<<obj1.a <<"\n" ;

obj1.a=123;

bbb=obj1;

std::cout<<bbb;

for(;1;);

}

Äänestä

Ketjusta on poistettu 1 sääntöjenvastainen viesti.

Kommentoi aloitusta


koodinpariin kirjoitti:

Mitenkäs C tehdään sellainen kun haluan että luokassa määriteltyä muuttujaa muutettaessa kutsutaan automaattisesti luokan funktiota.
Ulospäin siis näkyisi kuin muuttuja mutta sisäisesti temppu olisi funkiokutsu.

En muista millä tätä kutsuttiin joten enpä löydä kirjoista tai netistä apuja.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu