|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
[C++] compilare programmini POO: main
Sto studiando la programmazione object oriented.
Ho un problema: scrivo le classi che mi servono (separando .h e .cpp cioe interfaccia e implementazione)e per compilare ho bisogno di un MAIN.. qualcuno sa dirmi come va scritto? All'interno di una classe? Un esempio in modo generico!? |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Quote:
Inviato dal mio GT-I9003 usando Tapatalk |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Includi i .h con le classi e nel main crei delle istanze
Codice:
#include <classe1.h> int main() { classe1 istanza; ... return 0; } |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Quote:
Inviato dal mio GT-I9003 usando Tapatalk |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
E le liste o vector presenti nelle classi vanno riempite nel main?
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Che c'entra questo? E' la classe che gestisce i propri attributi interni.
Probabilmente ti manca tutta le teoria di base del C++ ... non penso che delle risposte in un forum ti aiuteranno ... usa un buon libro. |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Quote:
Inviato dal mio GT-I9003 usando Tapatalk |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Spero sia chiaro che una classe è un tipo di variabile, come "int" o "double".
int a -> a è un oggetto di tipo int. MyClass b -> b è un oggetto di tipo MyClass. Tutte le variabili sono sempre oggetti, quindi. Sono istanze di un certo tipo. Quindi non capisco questa rischiesta sul main...tutti i programmi C++ hanno bisogno di una funzione main, ma non c'è un main apposta per le classi...semplicemente, nel tuo programma (la funzione main) usi variabili di tipo int, MyClass, TuaClasse... p.s.: altri consigli: Programming: Principles and Practice using C++, di Stroustrup; Accelerated C++, di Koenig e Moo. Entrambi in inglese. Vedi tu. |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Grazie mille! Volevo sapere questo! Perche avevo visto in giro un main all interno di una classe..
Quindi dal main creo un istanza per ogni classe.. non mi é chiaro il perche devo creare queste istanze. So che una classe definisce un tipo di dato.. Purtroppo i libri non sempre sono chiari su tutto! Questa cosa del main non la trovo |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Cosa istanziare nel main dipende dalla logica del tuo programma. Generalmente istanzi una classe che contiene tutta la logica di avvio dell'applicazione. |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
|
![]() |
![]() |
![]() |
#13 | |||
Senior Member
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
|
Quote:
Ma lo segui il libro o lo hai solamente in libreria ...? Quote:
[quote]Purtroppo i libri non sempre sono chiari su tutto! [quote] Su classe e istanza è chiaro qualsiasi libro di C++. Quote:
|
|||
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
Java != C++
Prendi un libro di C++, vai a pagina 1 e leggilo, poi torni qui e ne riparliamo ![]()
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
sottopongo alla vostra attenzione questo codice di esempio...per capire come fare a compilare ed eseguire i programmi:
Codice:
//MAIN.cpp: #include "Enoteca.h" #include "BottigliaDiVino.h" #include <iostream> using namespace std; int main() { Enoteca e; BottigliaDiVino a(Barbera,2000,"p1",23); BottigliaDiVino b(Barbera,2000,"p2",67); BottigliaDiVino c(Gaglioppo,1900,"p2",67); BottigliaDiVino d(Merlot,1900,"p2",67); BottigliaDiVino f(Merlot,1900,"p3",25); e.aggiungiBottiglia(a); e.aggiungiBottiglia(b); e.aggiungiBottiglia(c); e.aggiungiBottiglia(d); e.aggiungiBottiglia(f); list<Vitigno> listaProd= e.vitigniAlmenoDueProduttori(); for(list<Vitigno>::iterator it=listaProd.begin(); it!=listaProd.end(); it++) cout<<*it<<endl; return 0; } Codice:
Enoteca.h #ifndef FRUTTIVENDOLO_H #define FRUTTIVENDOLO_H #include "BottigliaDiVino.h" #include <cstdlib> #include <iostream> #include <list> using namespace std; class Enoteca { private: list<BottigliaDiVino> vini; public: /** * Il metodo inserisce una bottiglia di vino nell'enoteca, * in particolare, quando una nuova bottiglia viene inserita * -Nota: l'inserimento (push_back) va sempre fatto- * se la bottiglia e' gia' presente in cantina * ma con prezzo differente, viene * aggiornato il prezzo di tutte le bottiglie * uguali (secondo l'operatore== della classe BottigliaDiVino) * presenti in cantina e il metodo restituisce true * * Altrimenti, se non vi e' stato aggiornamento di prezzo * il metodo restituisce false */ bool aggiungiBottiglia(BottigliaDiVino b); /** * Restituisce l'annata per la quale in cantina * e' presente il maggior numero di bottiglie * * In caso vi sia piu' di una annata che ha questa caratteristica * il metodo restituisce quella piu' vecchia * * Se la cantina e' vuota il metodo restituisce -1 */ int annataPiuIngombrante(); /** * Fissata una annata, il metodo restituisce il * valore complessivo totale (calcolato come somma dei prezzi) * di tutti e soli i vini piu costosi di quella annata * * Se non vi sono vini in quella annata il metodo * restituisce -1 */ int valorePiuCostose(int annata); /** * Restituisce la lista dei vitigni per i quali * in cantina sono presenti bottiglie di almeno * due produttori */ list<Vitigno> vitigniAlmenoDueProduttori(); void stampa(); inline list<BottigliaDiVino>& getContent(); }; list<BottigliaDiVino>& Enoteca::getContent() { return vini; } #endif Codice:
BottigliaDiVino.h #ifndef BOTTIGLIA_DI_VINO_H_ #define BOTTIGLIA_DI_VINO_H_ #include<string> #include <iostream> using namespace std; enum Vitigno {None = 0, Barbera, Falanghina, Gaglioppo, Malvasia, Merlot, Nebbiolo}; class BottigliaDiVino { private: Vitigno nome; int annata; //intero >= 1945 e <= 2009 string produttore; int prezzo; //intero > 10 public: BottigliaDiVino(Vitigno=None, int=0, string="", int=0); /* Due "bottiglie" sono uguali se tutti i campi tranne il prezzo sono uguali */ bool operator==(const BottigliaDiVino&) const; Vitigno getNome() const; void setNome(Vitigno nome); int getAnnata() const; void setAnnata(int annata); string getProduttore() const; void setProduttore(string produttore); int getPrezzo() const; void setPrezzo(int prezzo); void stampa()const; }; #endif in fase di compilazione mi da degli errori: Linker error. |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Uppino
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Se il codice è solo quello, mancano le definizioni delle funzioni membri delle classi. Dovrebbero esserci "BottigliaDiVino.cpp" e "Enoteca.cpp" con dentro le definizioni ad esempio di setPrezzo().
|
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Quote:
Inviato dal mio GT-I9003 usando Tapatalk |
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:25.