PDA

Visualizza la versione completa : [C++]classi ed eradietÓ costruttore ereditato


c_junior
25-01-2010, 15:30
salve:

ho due classi DATI contenuta in dati.h e dati.cc
e CONTACT contenuta in contact.h e contatti.cc
Ora CONTACT Ŕ una classe figlia di DATI

ecco i codici:
DATI.h


#include <iostream>
#include "DATA.h"


#ifndef DATI_h
#define DATI_h

class DATI{
private:
char nome[50];
char cognome[50];
DATA data;
public:
//costruttori
DATI();//costruttore senza parametri
DATI(const char[],const char[],DATA);//costruttore con parametri
//modificatori
void set_nome(const char[]);//reimposta il nome
void set_cognome(const char[]);//reimposta il congome
void set_data(const DATA);//reimposta la data
//selettori
void get_nome(char[]);//copia il nome nel parametro
void get_cognome(char[]);//copia il conogme nel parametro
DATA get_data();//restituisce la data di nascita
};

#endif




#include "DATI.h"

#ifndef CONTACT_h
#define CONTACT_h
class CONTACT:public DATI{
private:
//nome char[50]
//cognome char[50]
//DATA data erreditati da DATI
char indirizzo[200];
char cellulare[50];
char fisso[50];
char email[100];
public:
//costruttori
CONTACT(): DATI();
CONTACT(const char[],const char[],const char[],
const char[],const char[],const char[],DATA);
//selettori
void get_indirizzo(char i[]){strcpy(i,indirizzo);}
void get_cellulare(char c[]){strcpy(c,cellulare);}
void get_fisso(char f[]){strcpy(f,fisso);}
void get_email(char e[]){strcpy(e,email);}
//modificatori
void set_indirizzo(const char []);
void set_cellulare(const char []);
void set_fisso(const char []);
void set_email(const char []);
};

#endif


quando compilo ho questo errore:



C:\Users\vladimir\Desktop\Agenda elettronica\agenda\CONTACT.h|16|error: expected `{' at end of input|


non riesco a capire perchŔ...se avete bisogno di DATI.cc e CONTACT.cc ve le posto nessun problema...

grazie

ybla82
25-01-2010, 16:28
hai sbagliato a scrivere il costruttore.

tu hai scritto:


CONTACT(): DATI();


invece deve scrivere


CONTACT(): DATI(){};


In pratica in questo modo scrivi il codice del costruttore nel *.h, ma per farlo devi anche speficare il body del costruttore, anche se vuoto.

c_junior
25-01-2010, 17:45
AH grazie....ma poi nel file CONTACT.cc devo scrive cosi?


CONTACT::CONTACT():DATI(){}{
//istruzioni varie
}

oppure

CONTACT::CONTACT(){
//istruzioni varie
}

ybla82
26-01-2010, 09:00
allora se ne *.h scrivi



CONTACT(): DATI(){};


non hai bisogno di riscrivere nulal nel *.cc;anzi eventuali inizializzazione le puoi scrivere direttamente lý.

Diversamente nel *.h scrivi il costruttore come


CONTACT();


e nel *.cc metti



CONTACT(): DATI()
{
//le mie istruzioni
}

c_junior
26-01-2010, 13:01
e nel *.cc metti



CONTACT(): DATI()
{
//le mie istruzioni
}


ma facendo cosi il corpo del costruttore DATI() mi viene eseguito lo stesso giusto?

ybla82
26-01-2010, 15:06
si si.
lo esegui chiamando :dati()

c_junior
26-01-2010, 15:16
ma quindi Ŕ uguale a scrivere:



CONTACT(){
:: DATI();
//altre istruzioni
}

Loading