Voglio capire "questo" puntatore. Ho pensato che "questo" puntatore si riferisse al valore dell'oggetto di classe. Tuttavia, nel seguente codice, ho potuto vedere diversi valori di "questo" puntatore:C++: Capire "questo" puntatore
#include <stdio.h>
class InterfaceA{
public:
virtual void funa() = 0;
};
class InterfaceB{
public:
virtual void funb() = 0;
};
void globala(InterfaceA* obj){
printf("globalA: pointer: %p\n\r",obj);
}
void globalb(InterfaceB* obj){
printf("globalB: pointer: %p\n\r",obj);
}
class concrete : public InterfaceA, public InterfaceB{
public:
void funa(){
printf("funa: pointer: %p\n\r",this);
globala(this);
globalb(this);
}
void funb(){
printf("funb: pointer: %p\n\r",this);
globala(this);
globalb(this);
}
};
int main(int argc, char *argv[])
{
concrete ac;
ac.funa();
ac.funb();
return 0;
}
output di questo programma dà:
funa: pointer: 0x7ffff67261a0
globalA: pointer: 0x7ffff67261a0
globalB: pointer: 0x7ffff67261a8
funb: pointer: 0x7ffff67261a0
globalA: pointer: 0x7ffff67261a0
globalB: pointer: 0x7ffff67261a8
Qualsiasi aiuto per capire questo.
Grazie.
Penso che la tua domanda reale sia quando e perché il valore di un puntatore cambia quando passa a una funzione che accetta un puntatore a un dif classe feroce. –
Ho trovato la tua domanda molto interessante, e mi sono molto sforzato per capirlo. Ho postato una risposta estesa, con alcune figure che cercavano di spiegare il layout degli oggetti nella corrispondente (duplicata) domanda. Sentiti libero di controllarlo, potrebbe aiutarti! – sestus