Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]parametri classe base

    Ciao.
    Ho due classi CReaderDb e CReaderApi che ereditano da una classe base CReaderBase e che servono per implementare un importatore.
    Il problema è che alla classe CReaderDb devo passare un istanza di un db(CAdoDatabase) e alla classe CReaderApi devo passare un oggetto CSapModel.

    Come faccio a mantenere la struttura della classe base se devo passare due oggetti diversi?
    è giusto creare due costruttori con due parametri diversi(CAdodatabase e CSapmodel)?
    grazie.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Meglio se mostri l'architettura generale di quello che vuoi fare perché ci sono varie strade per fare quello che ti serve in modo pulito.
    Qualche indicazione:
    CReaderBase è astratta pura o contiene variabili membro?
    CAdoDatabase e CSapModel vanno passati solo nei costruttori o anche in altre funzioni set?
    CAdoDatabase e CSapModel possono avere un'interfaccia base comune?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Originariamente inviato da shodan
    Meglio se mostri l'architettura generale di quello che vuoi fare perché ci sono varie strade per fare quello che ti serve in modo pulito.
    Qualche indicazione:
    CReaderBase è astratta pura o contiene variabili membro?
    CAdoDatabase e CSapModel vanno passati solo nei costruttori o anche in altre funzioni set?
    CAdoDatabase e CSapModel possono avere un'interfaccia base comune?
    1)hai centrato il problema grande , infatti CReaderBase è astratta pura! è questo che mi ha creato dei casini.
    2)Cadodatabase e CSapmodel li passavo inizialmente in un altra funzione , un setter.
    3)no, sono diversissime come struttura.
    grazie Shodan

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se CReaderBase è astratta pura sei a cavallo.
    Puoi fare qualcosa del genere (in molto pseudocodice):
    codice:
    class CReaderBase {
    	public:
    		virtual ~CReaderBase() {}
    		virtual funzioneA();
    		virtual funzioneB();
    };
    
    class CReaderDb : public CReaderBase {
    	public:
    		CReaderDb(CAdoDatabase a) : cad__(a);
    		virtual ~CReaderDb() {}
    		virtual funzioneA() { qualcosa con cad__; }
    		virtual funzioneB() { qualcosa con cad__; }
    	private:
    		CAdoDatabase cad__;
    };
    
    class CReaderApi  : public CReaderBase {
    	public:
    		CReaderApi (CSapModel  a) : csm__(a);
    		virtual ~CReaderApi () {}
    		virtual funzioneA() { qualcosa con csm__; }
    		virtual funzioneB() { qualcosa con csm__; }
    	private:
    		CSapModel csm__;
    };
    
    main() {
      CReaderBase* crA = new CReaderDb(CAdoDatabase);
      CReaderBase* crB = new CReaderApi(CSapModel);
      
      crA->funzioneA();
      crA->funzioneB();
    
      crB->funzioneA();
      crB->funzioneB();
    
      delete crA;
      delete crB;
    }
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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.