webForumDet fria alternativet

Funktionspekare till medlemsfunktioner

C/C++

1 svar · 647 visningar · startad av JimmyPalm

Medlem sedan nov. 200114 inlägg
Frågan#1

Varför måste man sätta ut en * för att komma åt själva funktionen i en klass då man använder sig av funktionspekare till en medlemsfunktion. Är det för att det är en metod inne i en klass ???

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
void DrawRect(int x, int y) ; // Global funktion.

class Dog
{
public:
int GetAge() {return m_iAge; }
private:
int m_iAge ;

}

int main()
{
void (*pToADrawFunc) (int, int) ; //Funktionspekare

 pToADrawFunc = DrawRect ;
 pToADrawFunc(10, 20);

 
 int (Dog::\*Func) () ; // Funktionspekare till en medlemsfunktion

 Dog Fido ;

 Func = Dog::GetAge ;

 int age = (Fido.\*Func) () ;

 return 0;

}

Medlem sedan nov. 200114 inlägg
#2

Svar av mig själv ;)

Anledningen till att man måste ha en stjärna ( * ) framför är för att kunna skilja på om det finns en funktion i klassen Dog som heter just func. Utelämnar man * så blir det en möjlig namnkonflikt och den undviks genom att man sätter ut *.

268 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
132 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)