Dato questo frammento di codice che ho trovato in rete:
#include <iostream>
using namespace std;
struct A {
void f() { cout << "Class A" << endl; }
};
struct B: A {
void f() { cout << "Class B" << endl; }
};
void g(A& arg) {
arg.f();
}
int main() {
B x;
g(x);
}
il testo dice:
quando viene richiamata la funzione g() , viene richiamata la funzione A::f() , anche se l'argomento fa riferimento a un oggetto di tipo B.
Al momento della compilazione, il compilatore sa solo che l'argomento della funzione g() sarà un riferimento a un oggetto derivato da A;
Domanda: il compilatore perchè non si accorge che l'argomento x passato a g() è di tipo B ?
Lo ignora questo aspetto ?
Grazie