Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [c++]dinamic cast?

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]dinamic cast?

    Ciao.
    Ho 4 classi CA, CB, CD, CE che derivano da una classe base comune Cbase e ho un oggetto che puo' essere di 4 tipi diversi , sempre derivati dalle stessa classe base Cbase.
    Ogni oggetto è di tipo diverso , solo che "è celato" dietro il tipo della classe base, infatti ho incapsulato proprio una variabile x di tipo Cbase in cui possono finire sia CA che CB che CD che CE.
    Come faccio a sapere , partendo da questa variabile x di che tipo derivato è?
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Ciao ... Potresti usare l' operatore typeid (la cui sintassi è identica a quella dell' operatore sizeof). :
    codice:
    // Dove pCBase è un puntatore ad un' oggetto derivato da CBase
    if( typeid(CBase) == typeid(*pCBase) )
    {
    // Istruzioni da eseguire se l' oggetto allocato è di tipo CBase
    }
    else if( typeid(CA) == typeid(*pCBase) )
    {
    // Istruzioni da eseguire se l' oggetto allocato è di tipo CA
    }
    else if( typeid(CB) == typeid(*pCBase) )
    {
    // Istruzioni da eseguire se l' oggetto allocato è di tipo CB
    }
    else if( typeid(CC) == typeid(*pCBase) )
    {
    // Istruzioni da eseguire se l' oggetto allocato è di tipo CC
    }
    else if( typeid(CD) == typeid(*pCBase) )
    {
    // Istruzioni da eseguire se l' oggetto allocato è di tipo CD
    }
    L' operatore typeid ritorna un oggetto di tipo type_info (definito in typeinfo.h) che possiede diversi metodi e operatori (come il metodo name e l' operatore == ).
    P.S: Nota che typeid ritorna un oggetto type_info che si riferisce al corretto tipo solo se gli oggetti passati come parametro sono polimorfici altrimenti ritorna sempre un oggetto di tipo type_info che si riferisce al tipo base. Insomma se nel tuo caso, CBase non avesse nessun metodo virtuale, verrebbe eseguita sempre e comunque la prima condizione di cui sopra ...
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.