Includere classi

di il
23 risposte

Includere classi

Buongiorno a tutti,
Avrei un quesito sull'utilizzo delle classi:
Io vorrei creare due classi distinte :
Persona / Data
persona (nome, cognome, data , ecc..)
data (anno:mese:giorno).
Nella classe persona ho l'ggetto data.
Vorrei che le due classi rimanessero distinte ma quando definisco la classe persona dovrei includere
data.Come posso fare per includere correttamente ? cosa consigliate?
Grazie

23 Risposte

  • Re: Includere classi

    Class Persona {

    Stringe nome, ecc...

    Data d;

    }
  • Re: Includere classi

    Forse ho espresso male il concetto o mi sfugge ....

    la classe persona possiede un file.h ed un file .cpp dove viene implementata

    la classe data ha un file.h ed un file .cpp (separati da quelli di persona)dove viene implementata

    Nel file persona.cpp dovrei richiamare la classe data.
  • Re: Includere classi

    Devo usare libreria ?
  • Re: Includere classi

    Nel file persona.h
    #include "data.h"
    o
    #include <data.h>
    Se vuoi che le due non abbiano niente a che fare devi dichiarare una classe virtuale "data" e poi dal main() assegni la classe "vera" a quella virtuale...credo
  • Re: Includere classi

    Non capisco la questione della classe virtuale e di quella "vera"? Che vuoi dire?

    Per la persona semplicemente
    
    #include <string>
    #include "Date.h"
    
    using namespace std;
    
    class Person
    {
    	string cognome, nome;
    	Date dnascita;
    
    public:
    	Person(void);
    	~Person(void);
    };
    
    ovviamente ampliabile come vuoi.
  • Re: Includere classi

    Grazie appena riesco provo il codice
  • Re: Includere classi

    Intendo dire questo:

    Crei una classe generica "DATA_" che contiene i metodi virtuali necessari per manipolare le date;

    Crei la classe "Persona" contenente "DATA_";

    Crei la classe "Data" che deriva "DATA_"

    Nel programma finale assegni a "Persona.DATA_" una classe "Persona"


    Qui e' spiegato meglio
  • Re: Includere classi

    
    //file data.h
    class data
    {public:
    int giorno;
    void inserire_giorno( );};
    
    //file data.cpp
    void data::inserire_giorno( ){
    cout<< "Inserire x: ";cin >>giorno;}
    
    //file persona.h
    #include "data.h"
    class Persona
    {public:
    char nome[20];
    void inserisci_nome( );
    data g;};
    
    //file persona.cpp
    #include "Persona.h"
    void Persona::inserisci_nome( )
    {cout <<"Inserire persona: ";
    cin >> nome;
    cout << endl;}
    
    int main(){
    Persona p;
    p.inserisci_nome();
    data d;
    d.inserire_giorno()
    
    queste sono le 2 classi create.

    inserisco #include data.h nel file persona.h come suggerito poi mi sposto nel file persona.cpp imposto nel main() un nuovo oggetto data richiamo il membro inserisci giorno ma il compilatore avvisa che la classe di riferimento non viene trovata.
    Dove sbaglio?
    il compilatore mi avvisa che l'oggetto non è definito.
  • Re: Includere classi

    Sbagli un bel po' di cose ... un esempio di codice (anche se potrebbe essere anche diverso in base a scelte soggettive ...) potrebbe essere questo
    
    // data.h
    class data
    {
    	int giorno;
    
    public:
    	data() {};
       ~data() {};
    	void inserire_giorno();
    };
    
    
    // data.cpp
    #include "data.h"
    
    #include <iostream>
    
    using namespace std;
    
    void data::inserire_giorno()
    {
    	cout<< "Inserire giorno: ";
    	cin >> giorno;
    }
    
    
    
    // persona.h
    #include "data.h"
    
    class Persona
    {
    	char nome[20];
    	data g;
    
    public:
    	Persona();
    	~Persona();
    	void inserisci_nome();
    	void inserisci_giorno();
    };
    
    
    // persona.cpp
    #include "Persona.h"
    
    #include <iostream>
    
    using namespace std;
    
    Persona::Persona()
    { 
    }
    
    Persona::~Persona()
    {
    }
    
    void Persona::inserisci_nome()
    {
    	cout <<"Inserire persona: ";
    	cin >> nome;
    	cout << endl;
    }
    
    void Persona::inserisci_giorno()
    {
    	g.inserire_giorno();
    }
    
    
    // main
    #include "persona.h"
    
    int main()
    {
    	Persona p;
    	p.inserisci_nome();
    	p.inserisci_giorno();
    
    	return 0;
    }
    
  • Re: Includere classi

    @Oregon
    Ma quindi il mio ragionamento è giusto?
    Se non sbaglio così dovresti poter modificare la classe Persona senza toccare il codice del main ( o funzione in generale), e potresti sfruttare il polimorfismo per, ad esempio, elaborare la data in modi diversi con la stessa istruzione.
  • Re: Includere classi

    Buona giornata ,
    purtroppo non riesco ancora a risolvere il problema , c'è qualcosa che ancora non permette la compilazione corretta....
    Ho ricreato le classi con il codice postato.
    -1-Il compilatore ( codeblock ) mi segnala che il file Persona.cpp , ha un riferimento non definito data::inserire_giorno().
    -2- il compilatore ( codeblock ) non mi permette di compilare il file data.cpp senza la presenza del corpo main(){} (che in questo caso lascio privo di istruzioni).
    -3- la procedura di compilazione/debug (codeblock) la effettuo creando singoli 1 file di txt per data.h 1 file di txt per data.cpp 1 file di txt per Persona.h 1 file di txt per Persona.cpp .
    grazie...
  • Re: Includere classi

    Scusa ornello ma hai letto il codice che ti ho fornito? Mi sembra di no ...

    C'è anche il main perché il main è obbligatorio.
    E la faccenda dei file txt non l'ho capita perchè i file txt non c'entrano nulla.
  • Re: Includere classi

    ale99 ha scritto:


    @Oregon
    Ma quindi il mio ragionamento è giusto?
    Non ho ancora compreso quello che vuoi dire ma se mostri del codice d'esempio completo e compilabile ne parliamo.
  • Re: Includere classi

    Ciao Oregon ,

    -1- compilando il codice da terminale(il codice è tratto dal tuo esempio) il programma funziona senza problemi se faccio cosi:
    1-file data.h
    2-file data.cpp
    3-file Persona.h
    4-file Persona.cpp ( ho estratto il main e l'ho riportato nel file 5)
    5-file main.cpp

    da terminale poi digito le righe sottostanti e tutto funziona correttamente
    g++ main.cpp data.cpp Persona.cpp -o programma
    ./programma


    -2-compilando invece il codice da codeblock (codice fornito dal tuo esempio) creo i 4 file :
    1-file data.h (debug/compilazione OK)
    2-file data.cpp ( debug/compilazione OK ma devo aggiungere un main(){} senza istruzioni al codice del tuo esempio )
    3-file Persona.h (debug/compilazione OK)
    4-file Persona.cpp ( il file contiene il main ) ( debug del file Persona.cpp riporta l'errore citato precedentemente "riferimento non trovato ")

    Penso che sia un mio errore nella gestione dei file in codeblock? Allego anche i file.
Devi accedere o registrarti per scrivere nel forum
23 risposte