Blog del corso di Programmazione (9 CFU) tenuto da Marco La Cascia presso l'Universita' di Palermo per il corso di laurea in Ingegneria Informatica e delle Telecomunicazioni. Tratta la programmazione a oggetti in Java.
mercoledì 3 dicembre 2014
Esercitazione 7, soluzione esercitazione 6 e note relative al capitolo 8
Salve Professore, volevo chiederle se è buona prassi, nella programmazione su più files, implementare i metodi composti da pochissime righe (specialmente quelli con una sola riga di codice) direttamente nel file .h della classe oppure se è sempre meglio mettere tutte le implementazioni (persino quelle di una sola riga) nel file .cpp della relativa classe.
Non tutti sono d'accordo su questo punto ma secondo me è sempre meglio nel .cpp. Considera anche che un metodo che oggi è di una riga non è detto che in una successiva versione del programma sia ancora di una riga e quindi se lo metti sin dall'inizio nel .cpp non dovrai spostarlo dopo.
Salve Professore, avrei qualche domanda riguardo il terzo esercizio di questa esercitazione: La funzione inserisci deve aggiungere un carattere dopo l'ultimo? La funzione rimuovi deve rimuovere tutte le occorrenze di un carattere? O forse deve rimuovere solo la prima occorrenza o magari solo l'ultima? Probabilmente questi dettagli hanno poca importanza ma preferisco essere sicuro.
La classe deve implementare una struttura dati di tipo stack quindi inserisci deve aggiungere il carattere in cima allo stack, e rimuovi rimuovere solo il carattere che si trova in cima allo stack.
La ringrazio per il chiarimento professore. Purtroppo ho poca familiarità nell'ambito pratico con queste strutture in quanto al corso di calcolatori mi sono state presentate solo in via teorica.
ho un problema con l'esercizio 2 che chiede di implementare la classe Date. Questo è il mio header Date.h: http://pastebin.com/embed_js.php?i=Enyp9USA
Il problema riguarda il dato membro "static int currentYear" e il metodo pubblico "static void set_currentYear( int )" che ho così implementato nel file Date.cpp:
void Date::set_currentYear( int n ){ currentYear = n; }
Questo è l'errore in compilazione: Date.cpp:(.text+0x2a): undefined reference to 'Date::currentYear'
E' come se il metodo non riesce a "vedere" currentYear. Ho provato a mettere static int currentYear come pubblico, ma il problema persiste.
Ho provato aggiungendo int Date::currentYear; all'interno della definizione del metodo, adesso l'errore è un altro: http://oi62.tinypic.com/10d790z.jpg
Salve Professore,
RispondiEliminavolevo chiederle se è buona prassi, nella programmazione su più files, implementare i metodi composti da pochissime righe (specialmente quelli con una sola riga di codice) direttamente nel file .h della classe oppure se è sempre meglio mettere tutte le implementazioni (persino quelle di una sola riga) nel file .cpp della relativa classe.
Non tutti sono d'accordo su questo punto ma secondo me è sempre meglio nel .cpp.
RispondiEliminaConsidera anche che un metodo che oggi è di una riga non è detto che in una successiva versione del programma sia ancora di una riga e quindi se lo metti sin dall'inizio nel .cpp non dovrai spostarlo dopo.
Salve Professore,
RispondiEliminaavrei qualche domanda riguardo il terzo esercizio di questa esercitazione:
La funzione inserisci deve aggiungere un carattere dopo l'ultimo?
La funzione rimuovi deve rimuovere tutte le occorrenze di un carattere? O forse deve rimuovere solo la prima occorrenza o magari solo l'ultima?
Probabilmente questi dettagli hanno poca importanza ma preferisco essere sicuro.
La classe deve implementare una struttura dati di tipo stack quindi inserisci deve aggiungere il carattere in cima allo stack, e rimuovi rimuovere solo il carattere che si trova in cima allo stack.
EliminaLa ringrazio per il chiarimento professore. Purtroppo ho poca familiarità nell'ambito pratico con queste strutture in quanto al corso di calcolatori mi sono state presentate solo in via teorica.
EliminaSalve professore,
RispondiEliminaho un problema con l'esercizio 2 che chiede di implementare la classe Date.
Questo è il mio header Date.h: http://pastebin.com/embed_js.php?i=Enyp9USA
Il problema riguarda il dato membro "static int currentYear" e il metodo pubblico "static void set_currentYear( int )" che ho così implementato nel file Date.cpp:
void Date::set_currentYear( int n ){
currentYear = n;
}
Questo è l'errore in compilazione:
Date.cpp:(.text+0x2a): undefined reference to 'Date::currentYear'
E' come se il metodo non riesce a "vedere" currentYear.
Ho provato a mettere static int currentYear come pubblico, ma il problema persiste.
Il problema potrebbe essere che dichiari ma non definisci il membro static current year. Prova a mettere nel .cpp int Date::currentYear;
EliminaHo provato aggiungendo int Date::currentYear; all'interno della definizione del metodo, adesso l'errore è un altro: http://oi62.tinypic.com/10d790z.jpg
RispondiElimina