Visualizzazione dei risultati da 1 a 6 su 6

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    La soluzione più semplice è utilizzare una classe base comune/un'interfaccia e un metodo virtuale, con una funzione per il dispatching.
    codice:
    class ClasseBase {
      virtual metodoComune();
    };
    
    class Derivata subclass ClasseBase {
      override metodoComune();
    }
    
    class Derivata1 subclass ClasseBase {
      override metodoComune();
    }
    
    ClasseBase create(dispatching_arg, args) {
      return (switch(dispatching_arg) {
        dispatch_Derivata: new Derivata(args);
        dispatch_Derivata1: new Derivata1(args);
      });
    }
    
    main() {
      //get dispatching_arg and args
      ClasseBase c = create(dispaching_arg, args);
      c.metodoComune();
    }
    In funzione di quello che devi fare ci sono poi svariate alternative.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    76
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    La soluzione più semplice è utilizzare una classe base comune/un'interfaccia e un metodo virtuale, con una funzione per il dispatching.
    codice:
    class ClasseBase {
      virtual metodoComune();
    };
    
    class Derivata subclass ClasseBase {
      override metodoComune();
    }
    
    class Derivata1 subclass ClasseBase {
      override metodoComune();
    }
    
    ClasseBase create(dispatching_arg, args) {
      return (switch(dispatching_arg) {
        dispatch_Derivata: new Derivata(args);
        dispatch_Derivata1: new Derivata1(args);
      });
    }
    
    main() {
      //get dispatching_arg and args
      ClasseBase c = create(dispaching_arg, args);
      c.metodoComune();
    }
    In funzione di quello che devi fare ci sono poi svariate alternative.
    Ciao,
    io per semplificare non ho descritto l'interno del metodo comune.

    In ogni caso faccio gia' piu' o meno quello che mi suggerisici cioe' il metodo pubblico comune ha una struttura di base che richiama metodi privati di cui faccio l'override nelle classi piu' "specifiche".

    Il problema era come gestire la creazione...

    Semplificando/astraendo l'override del metodo comune la sola creazione dell'oggetto ed esecuzione del metodo comune ad "alto livello" come rimarrebbe?

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Rimarrebbe esattamente com'è ora.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    76
    Se non ho interpretato male...dovrebbe essere analoga alla Soluzione 1 da me proposta...ipotizzando che la New(create) non abbia argomenti propri da passare come parametro, ma solamente quello per lo Switch...

    Creo un'istanza della classe generica passando al costruttore della generica un parametro che identifichi la classe Specifica da creare...

    codice:
    ClasseGenerica istanzaClasse = New ClasseGenerica(id_classe_specifica)
    istanzaClasse.metodoComuneDaEseguire()

    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    codice:
      //get dispatching_arg and args
      ClasseBase c = create(dispaching_arg, args);
      c.metodoComune();
    }
    Nel costruttore della Generica ci sara' uno Switch che creera' la giusta classe specifica.

    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    codice:
    ClasseBase create(dispatching_arg, args) {
      return (switch(dispatching_arg) {
        dispatch_Derivata: new Derivata(args);
        dispatch_Derivata1: new Derivata1(args);
      });
    }
    Giusto???

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    No. Usi un'altra funzione (static) non membro di ClasseBase.
    A dire il vero può anche essere membro, ma in ogni caso non il costruttore.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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