Sarà, ma a me questo codice:Originariamente inviato da Who am I
Non sono strettamente necessarie liste di ABase* perché il downcasting evita il problema dell' object splicing.
da un object splicing tramite cast di puntatori, un'eccezione nel dynamic_cast e un errore di compilazione nella parte commentata.codice:struct Alfa { virtual ~Alfa() {} int a; }; struct Beta : Alfa{ ~Beta() {} int b; }; main () Beta b; b.a = 7; b.b = 9; Alfa a = b; Beta* c = static_cast<Beta*>(&a); cout << c->a << " -- " << c->b << endl; Beta* d = (Beta*)&a; cout << d->a << " -- " << d->b << endl; Beta* e = (Beta*)&a; cout << e->a << " -- " << e->b << endl; Beta* f = reinterpret_cast<Beta*>(&a); cout << f->a << " -- " << f->b << endl; Beta g = dynamic_cast<Beta&>(a); /* Beta h = (Beta)a; Beta i = static_cast<Beta>(a); Beta j = reinterpret_cast<Beta>(a); */
Altri downcasting non ne conosco.

Rispondi quotando