Ho trovato uno strano comportamento durante l'utilizzo di una variabile di riferimento.Variabile di riferimento e funzioni virtuali
Ecco implementazioni di classe:
class Base {
public:
virtual void Method() = 0;
};
class DerivedA : public Base {
public:
virtual void Method() {}
}
class DerivedB : public Base {
public:
virtual void Method() {}
}
Ecco un codice di esempio che ha il comportamento anomalo:
void main(int argc, char *argv[]) {
DerivedA a;
DerivedB b;
Base &base = a;
base.Method(); // Calls DerivedA::Method
base = b;
base.Method(); // Calls DerivedA::Method!!! Why doesn't call DerivedB.Method()?
}
In conclusione, sembra che la funzione virtuale tavolo pointer "associato" al la variabile di riferimento viene determinata solo quando si inizializza la variabile di riferimento. Se riassegno la variabile di riferimento, lo vfpt non cambia.
Cosa succede qui?
Penso che questa risposta merita il segno di spunta verde! – Walter
Sì, penso che questa dovrebbe essere la risposta accettata. – Rafid
Grazie, anche se la risposta accettata è accettata dall'interrogante e va bene che abbia accettato l'altra risposta ;-) –