Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C++] Classi derivate

Hybrid View

  1. #1
    Onestamente non riesco a capire neanche lontanamente di che stai parlando... fornisci casi d'uso concreti.

    Comunque, l'assenza del late binding di solito non è una grossa limitazione, perché se devi agire indifferentemente alla stessa maniera su due classi derivate allora chiami il metodo virtuale tramite puntatore alla classe base, se invece devi chiamare specificamente un metodo della classe derivata devi sapere necessariamente su che classe stai operando, per cui puoi fare il dynamic_cast e quindi richiamare il metodo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  2. #2
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    177
    Intanto grazie infinite per il tempo che mi stai dedicando!!!!!

    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Onestamente non riesco a capire neanche lontanamente di che stai parlando... fornisci casi d'uso concreti.
    Questa è la frase che mi ha acceso il campanello d'allarme (presa da =qui):
    Si tenga presente che affinché il costrutto dynamic_cast lavori correttamente è necessario che il supporto RTTI del compilatore sia attivo (spesso, nella produzione del firmware, si sceglie di non attivare RTTI poiché questa funzionalità assorbe una quantità di risorse non trascurabile).

    Se questo non è vero, nel senso che è magari una informazione "vecchia", allora procedo in questo modo.

    Il problema concreto è il seguente: la determinazione dell'azione sismica varia/evolve con l'evolvere della normativa e con il sito in cui sorge la costruzione (più altri fattori, ma per adesso bastano questi).
    Per gestire il sito, pensavo quindi creo una classe base che raccoglie le informazioni che sono "normativa indipendenti" come indirizzo, quota sul livello del mare, latitudine, longitudine, ecc.
    Da questa poi derivo una classe specifica per ogni normativa, in cui raccolgo le informazioni specifiche di quella normativa (ad esempio, quella attuale definisce dei parametri specifici di pericolosità sismica del sito)

    Avremo quindi
    codice:
    class Base
    {
      //indirizzo, altitudine, ecc, "normativa indipendenti"
      //metodi per gestire queste informazioni
      //distruttore virtuale
    }
    
    class Normativa1:public Base
    {
      //informazioni aggiuntive, come ad esempio pericolosità sismica del sito
      //metodi per gestire queste informazioni
      setPericolosita(param1, param2, ecc);
    }
    
    class Normativa2:public Base
    {
      //informazioni aggiuntive, come ad esempio pericolosità sismica del sito
      //metodi per gestire queste informazioni
      setPericolosita(param3, param4, ecc);
    }
    Se il nome del metodo setPericolosita è uguale nelle due classi derivate, i parametri sono di tipo diverso (nella fattispecie sono delle enum e delle struct create per ciascuna normativa, in quanto specifiche per ciascuna di esse).
    Ecco da dove nasce tutto il problema.

    Tralasciamo per ora il problema ipotizzato del confronto su grafico, che per genera solo confusione, limitiamoci alla possibilità di partire:
    • da un puntatore a una classe base,
    • creare un'istanza dell'oggetto ad una classe derivata in base alla normativa scelta,
    • accedere ai metodi della classe derivata senza dover definire il corrispettivo metodo virtuale nella classe base.


    Spero di aver chiarito il problema.

    Grazie

  3. #3
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    177
    Capito (spero...) dynamic_cast, su un singolo puntatore, mi viene il seguente dubbio, che non riesco a risolvere.

    Poniamo di aver creato ClasseBase, e da essa abbiamo derivato ClasseDerivata1, ClasseDerivata2, ClasseDerivata3, ecc..

    Poniamo di avere

    vector<ClasseBase*> vettore;

    è possibile aggiungere elementi al vector di tipo diverso, cioè ad esempio, il primo elemento di tipo ClasseDerivata2, il secondo elemento di tipo ClasseDerivata1, ecc?

    Quanto ho trovato in giro, mi sembra che non mi dia questa possibilità, cioè, tutti gli elementi del vector devono essere tutti dello stesso tipo della classe derivata, e per di più, devo operare su un secondo vector, cioè ci sarà vettore2 i cui elementi saranno tutti del tipo di una delle classi derivate ottenuti tramite dynamic_cast.

    Grazie

    P.S. nella fattispecie il problema sorge nel caso di sezioni composte, cioè date dalla somma di sezioni diverse...

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.