ho un vettore di puntatori a oggetti derivati inserire dall'utente (quindi credo che il termine corretto è "conosciuta solo in fase di esecuzione) ::utilizzo di typeid per fare un confronto tra le classi derivate
vector<Person *> vect;
Il classi derivate sono maschio e femmina voglio fare un'iterazione sul vettore per selezionare solo gli oggetti femminili e chiamare il copyconstructor di quel ho pensato 3 soluzioni:
- di utilizzare una bandiera;
- .. Per utilizzare typeid
- Per inserire una chiamata al costruttore di copie nel costruttore predefinito di Female, quindi ogni volta che l'utente ne crea uno, crea automaticamente il gemello.
Non mi piace la prima opzione nel caso di molti tipi di classi derivate. Anche la terza opzione non mi piace perché causerebbe un problema di relazione (il Mondo conosce ogni femmina ma la femmina non può conoscere il mondo). quindi dovrei usare la seconda opzione: esempio
typeid(vect.at(i))==typeid(Female)
È questo espressione corretta? C'è un altro modo per delineare il problema?
E 'difficile dare consigli sulla base di un esempio come questo. In questo caso direi semplicemente di usare una bandiera, perché il sesso è una caratteristica di una persona. L'ereditarietà sembra un modo stupido per modellarlo. –
'typeid (vect.at (i)) == typeid (Female)' non funziona –
Sono d'accordo con @ R.MartinhoFernandes, ma se provi ancora il polimorfismo di un cast dinamico potrebbe essere utile qui. – L7ColWinters