Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C++]dynamic_cast???

  1. #1

    [C++]dynamic_cast???

    A cosa serve in c++ dynamic_cast< tipo >( ) ???????
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  2. #2
    Utente di HTML.it L'avatar di Zalex
    Registrato dal
    Aug 2001
    Messaggi
    357
    dynamic_cast<Tipo>(Expr) E' un cast tra puntatori, viene fatto a run-time e non a tempo di compilazione, poiche' il tipo di Expr e' noto solo a tempo di esecuzione!
    un oggetto puo' avere tipo statico e tipo dinamico diversi!
    mi spiego:

    se ho una classe A e una classe B che deriva da A posso fare questo:

    B b;
    A *a=&b;
    /*..........................*/
    B *b1=dynamic_cast<B*>(a);
    if(b1) cout<<"il cast ha avuto successo"<<endl;

    In questo esempio 'a' e' un puntatore a un oggetto di B (che deriva da A). A e' il tipo statico di 'a'(in realta' A*), B e' il tipo dinamico di 'a'!
    E' possibile accedere ai campi dati o ai metodi della classe B tramite 'a', ma questo e' legale solo se il tipo dinamico di 'a' e' B!questo controllo puo' essere fatto con un dynamic_cast!
    B* e' il tipo a cui vogliamo castare 'a' (che ha tipo A*); se il cast ha successo significa che 'a' aveva tipo dinamico B, altrimenti b1 sara' un puntatore nullo!!

    spero di essere stato abbastanza chiaro
    ciao

  3. #3
    codice:
     B b; 
    A *a=&b; 
    /*..........................*/ 
    B *b1=dynamic_cast<B*>(a); 
    if(b1) cout<<"il cast ha avuto successo"<<endl;
    Cioe ora b1 puo accedere sia ai membri sia ai campi di A sia di B come una funz friend?
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  4. #4
    Utente di HTML.it L'avatar di Zalex
    Registrato dal
    Aug 2001
    Messaggi
    357
    No!dopo il cast b1 puo accedere a campi dati e metodi di B,perche' e' un tipo B* e ha tipo dinamico B(A non centra piu')
    In effetti prima non l'avevo detto, cmq tu hai un puntatore di tipo classe madre che punta a qualche figlio!poiche nei figli non ci sono le stesse e identiche funzioni, volendo richiamare una particolare funzione di un particolare figlio,il puntatore i tipo classe madre deve essere castato a puntatore di tipo figlio particolare!
    dopo il cast quindi ottieni un puntatore che ha tipo statico e dinamico uguali,quindi puoi accedere a quella particolare classe senza problemi!

  5. #5
    In pratica il dynamic_cast si utilizza soprattutto per verificare il tipo di dati su cui si sta lavorando a run-time. Il tipo di dato base deve essere polimorfo (ovviamente). Forse con questo esmpio ti è piu' chiaro:

    hai la seguente struttura:

    BASE -----> LIBRO
    |
    |--------> GIORNALE

    ovvero una classe base da cui derivi le classi libro e giornale. Ora implementi una classe Edicola che conterrà una lista di oggetti che possono essere appartenenti o a Libro o a Giornale. Come fai a capire su quale tipo di oggetto stai lavorando? Usando il dynamic_cast.

    bye
    There are 10 kinds of people in the world: who knows the binary numeration and who not

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 © 2025 vBulletin Solutions, Inc. All rights reserved.