void (Luokka::*pFunktio) ();
pFunktio = Luokka::tulostaMuuttuja;
tuo alempi rivi aiheuttaa virheen käännöksessä (dev-C ) eli mitä on vikana?
tässä sitten koko koodi jos sillä on jotain merkitystä tuohon virheeseen
#include
using namespace std;
class Luokka
{
public:
Luokka();
~Luokka();
static int annaStaattinenMuuttuja() {return staattinenMuuttuja;}
static void asetaStaattinenMuuttuja(int arvo);
int annaMuuttuja() {return muuttuja; }
void asetaMuuttuja(int luku);
void tulostaMuuttuja();
private:
static int staattinenMuuttuja;
int muuttuja;
};
int Luokka::staattinenMuuttuja = 0;
Luokka::Luokka()
{
staattinenMuuttuja ;
}
Luokka::~Luokka()
{
staattinenMuuttuja--;
}
void Luokka::asetaMuuttuja(int luku)
{
luku = 0;
muuttuja = luku;
}
void Luokka::tulostaMuuttuja()
{
cout
Osoitin jäsenfunktioon
12
594
Vastaukset
noniin nyt se toimi kun heitin & merkin ton eteen
pFunktio = &Luokka::tulostaMuuttuja;
muuten vielä yksi kysymys mistä tuo jäsenmuuttuja "muuttuja" saa arvokseen 4072496 onko se vain jotain muistiin jäänyttä roinaa vai mitä?- mitä tarkoittaa
mitä tässä tapahtuu?
void (Luokka::*pFunktio) (); - uidshfhio
sattumanvaraista roinaa se on. alusta se konstruktorissa nollaksi
- sen kertoo
mitä tarkoittaa kirjoitti:
mitä tässä tapahtuu?
void (Luokka::*pFunktio) ();mikä pFunktio on
- siinä on
sen kertoo kirjoitti:
mikä pFunktio on
tuo "Luokka::" osa? eikö void (*p)(); ajaisi saman asian? (p on pointteri void funktioon, joka ei ota parametreja)
- pieni ero
siinä on kirjoitti:
tuo "Luokka::" osa? eikö void (*p)(); ajaisi saman asian? (p on pointteri void funktioon, joka ei ota parametreja)
sen funktion käyttö vaatii olion, toisin kuin mainitsemasi pointteri tavalliseen funktioon.
- ei jymmärrä
pieni ero kirjoitti:
sen funktion käyttö vaatii olion, toisin kuin mainitsemasi pointteri tavalliseen funktioon.
Jos määrittelen void (*p)(); ja minulla on luokka
A, jossa on metodi void metodi();. ja luon luokasta A instanssin a, niin miksi p:lle ei voi asettaa a.metodi arvoa? Tuossahan a on yksi tietty instanssi ja a.metodi määrää yksikäsitteisesti mihin p:n pitääpi osoitella?
En myöskään ymmärrä miksi suoran funktiopointterin voi asettaa p=func, kun tässä tapauksessa pitää laittaa p = &luokka::metodi? Miksi tarvitaan toi &-merkki alkuun kun pelkän funktion tapauksessa ei tarvisi? - lisää
ei jymmärrä kirjoitti:
Jos määrittelen void (*p)(); ja minulla on luokka
A, jossa on metodi void metodi();. ja luon luokasta A instanssin a, niin miksi p:lle ei voi asettaa a.metodi arvoa? Tuossahan a on yksi tietty instanssi ja a.metodi määrää yksikäsitteisesti mihin p:n pitääpi osoitella?
En myöskään ymmärrä miksi suoran funktiopointterin voi asettaa p=func, kun tässä tapauksessa pitää laittaa p = &luokka::metodi? Miksi tarvitaan toi &-merkki alkuun kun pelkän funktion tapauksessa ei tarvisi?http://www.informit.com/guides/content.asp?g=cplusplus&seqNum=142&rl=1
ja ehkä tuoltakin:
http://blogs.msdn.com/the1/articles/210013.aspx - kyll maar näin o
lisää kirjoitti:
http://www.informit.com/guides/content.asp?g=cplusplus&seqNum=142&rl=1
ja ehkä tuoltakin:
http://blogs.msdn.com/the1/articles/210013.aspxTuolla kyllä kerrotaan miten, mutta ei *miksi*. Tässä on nyt jokin näkymätön c perversio takana, joka ei minulle aukea (tai en jaksa juuri nyt keskittyä noihin artikkeleihin, koitan huomenna täysipäisempänä uusiksi).
lisää kirjoitti:
http://www.informit.com/guides/content.asp?g=cplusplus&seqNum=142&rl=1
ja ehkä tuoltakin:
http://blogs.msdn.com/the1/articles/210013.aspxpFunktio = &Luokka::tulostaMuuttuja;
pFunktio = Luokka::tulostaMuuttuja;
tuon toisen linkin perusteella noitten molempien pitäisi toimia mutta minulla toimi vain tuo ensimmäinen, onko se kääntäjästä kiinni (dev-C )?- kiinni
filosofia kirjoitti:
pFunktio = &Luokka::tulostaMuuttuja;
pFunktio = Luokka::tulostaMuuttuja;
tuon toisen linkin perusteella noitten molempien pitäisi toimia mutta minulla toimi vain tuo ensimmäinen, onko se kääntäjästä kiinni (dev-C )?uudemmat tukevat vain &-versiota
- jaetaan nyt tännekin
kyll maar näin o kirjoitti:
Tuolla kyllä kerrotaan miten, mutta ei *miksi*. Tässä on nyt jokin näkymätön c perversio takana, joka ei minulle aukea (tai en jaksa juuri nyt keskittyä noihin artikkeleihin, koitan huomenna täysipäisempänä uusiksi).
http://groups.google.com/group/sfnet.atk.ohjelmointi/msg/2974f6e7260aff7a
Josta:
"Sain meriselityksenä, että kääntäjä kääntää metodin void A::metodi() muotoon void metodi_A(A *this) (tjsp.) eli parametrilistaan lisätään "salainen" osoitin kyseiseen luokkaan ja sille annetaan arvoksi se instanssi, mikä metodin osoittimeen viisaa. Jos siis on void (A::*p)(), a = new A(), p =&A::metodi ja myöhemmin (a.*p)();, niin itseasiassa metodi esitellään void metodi_A(A *this) ja p:n esittelyssä tarvitaan A:: jotta tiedetään p:n ottavan parametrinaan osoittimeen johonkin A:n instanssiin. Kutsussa (a.*p)(); sitten tuupataan parametriksi &a josta saadaan siis käyttöön *this."
En tiedä onko tämä lopullinen totuus.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Useita puukotettu Tampereella
Mikäs homma tämä nyt taas on? "Useaa henkilöä on puukotettu Tampereen keskustassa kauppakeskus Ratinan lähistöllä." ht2714979- 463519
Kuka rääkkää eläimiä Puolangalla?
Poliisi ampui toistakymmentä nälkiintynyttä eläintä Puolangalla Tilalta oli ollut karkuteillä lähes viisikymmentä nälkii893474- 502649
Meneeköhän sulla
oikeasti pinnan alla yhtä huonosti kuin mulla? Tai yhtä huonosti mutta jollain eri tyylillä? Ei olisi pitänyt jättää sua461833- 971630
- 161463
Lähetä terveisesi kaipaamallesi henkilölle
Vauva-palstalta tuttua kaipaamista uudessa ympäristössä. Kaipuu jatkukoon 💘971448- 711045
PS uusimman gallupin rakettimainen nousija
https://yle.fi/a/74-20170641 Aivan ylivoimaisesti suurin kannatuksen nousu PS:lle. Nousu on alkanut ja jatkuu 2 vuoden1441035