Ragazzi, guardate questo codice:
L'esercizio mi chiede cosa stampa il programma. Allora io ho ragionato così, C c(3), significa che c è un oggetto della classe C, e a questo oggetto viene assegnato valore 3, quindi sarebbe C::C(int n) : B(n), con n = 3. Prima di tutto, visto che il costruttore di C prevede l'inizializzatore della classe base, verrà visualizzato a schermo cout<< "B::B("<<n<<")\n": quindi B::B(3), poi viene eseguito il codice della funzione:codice:#include<iostream> using namespace std; class B { public: B(); B(int n); }; B::B() { cout << "B::B()\n"; } B::B(int n) { cout<< "B::B("<<n<<")\n"; } class C: public B { public: D(); D(int n); private: B b; }; C::C() { cout <<"C::C()\n"; } C::C(int n) : B(n) { b=B(-n); cout << "C::C("<<n<<")\n"; } int main() { C c(3); return 0; }
{b=B(-n);
cout << "C::C("<<n<<")\n";
}
quindi b = B(-3) e il programma dovrebbe stampare B::B(-3) e infine C::C(3)
Però compilando ed eseguendo il prgramma ottengo le seguenti stampe:
B::B(3)
B::B()
B::B(-3)
C::C(3)
Perchè viene stampato anche B::B()?