|
|||||||
|
|
|
![]() |
|
|
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: 21:45.




















