Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Come scrivere una classe
Forum - C/C++ - Come scrivere una classe

Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 18:52
Sabato, 14/05/2011
Salve,
purtroppo il mio libro sul c++ spiega come fare le classi ma non come separarle in un file a se stante.
Ho cercato su internet ma non sono riuscito a capire come dividere una classe in modo da metterla in unico file, in modo da poterla riutilizzare comodamente.
Provando ho fatto così però non so se va bene:
classe.h
Codice sorgente - presumibilmente C++

  1. class porva{
  2.         public:
  3.         int x;
  4.         void metodo1();
  5.         void metodo2();
  6. };
  7.  
  8. prova::metodo1(){}
  9. prova::metodo2(){}



main.cpp
Codice sorgente - presumibilmente C++

  1. #include<iostream>
  2. #include"prova.h"
  3. using namespace std;
  4.  
  5. int main(){
  6.         prova p;
  7.         return 0;
  8. }



Tutto funziona alla grande, però ho paura che non sia il metodo corretto.
Quello che faccio è giusto o no?
grazie

p.s. ho fatto una classe più complessa e funziona benissimo, l'esempio sopra riportato è solo per fare capire come ho strutturato la classe

Ultima modifica effettuata da XBarboX il 14/05/2011 alle 18:54
PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
1
Down
V
Segnala al moderatore
Postato alle 9:32
Domenica, 15/05/2011
Devi sempre includere l'header.

PM
Avatar
nihal (Ex-Member)
Pro


Messaggi: 109
Iscritto: 12/04/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 18:59
Sabato, 14/05/2011
In realtà si usa mettere nel file .h la dichiarazione della classe:
Codice sorgente - presumibilmente C/C++

  1. class Prova
  2. {
  3.     public:
  4.         void metodo1();
  5.         void metodo2();
  6. };


Mentre in un file .cpp separato si definiscono i metodi:
Codice sorgente - presumibilmente C/C++

  1. #include "prova.h"
  2.  
  3. prova::metodo1() { }
  4. prova::metodo2() { }


E poi si usa il tutto nel main.

PM
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 19:25
Sabato, 14/05/2011
ma nel main devo mettere
#include"prova.h"
o
#include"prova.cpp" ?

PM
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 11:41
Domenica, 15/05/2011
Lo pensavo anche io , però facendo questo sorgente mi da errore:
main.cpp
Codice sorgente - presumibilmente C++

  1. #include<iostream>
  2. #include"rettangolo.h"
  3. using namespace std;
  4.  
  5. int main(){
  6.         rettangolo r;
  7.         r.base = 1;
  8.         r.altezza = 3;
  9.         cout<<r.area()<<endl;
  10.         return 0;
  11. }


rettangolo.h
Codice sorgente - presumibilmente C++

  1. class rettangolo{
  2.         public:
  3.                 int base;
  4.                 int altezza;
  5.                 int area();
  6. };


rettangolo.cpp
Codice sorgente - presumibilmente C/C++

  1. #include "rettangolo.h"
  2.  
  3. int rettangolo::area(){
  4.         return base*altezza;
  5. }



Ecco l'errore:

enrico@ubuntu:~/src/c++$ g++ main.cpp -o main
/tmp/cc7cPgK2.o: In function `main':
main.cpp:(.text+0x21): undefined reference to `rettangolo::area()'
collect2: ld returned 1 exit status

Sembra che il file rettangolo.cpp per lui non esista...

PM
Avatar
carmelolg (Normal User)
Rookie


Messaggi: 23
Iscritto: 14/12/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 12:39
Domenica, 15/05/2011
ciao,
per buona norma le variabili potresti metterle private nella classe rettangolo.
Per quanto riguarda l'errore, la funzione area nell'header è dichiarata?

PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
0
Down
V
Segnala al moderatore
Postato alle 17:00
Domenica, 15/05/2011
prova a metterci il costruttore, o ad includere il .cpp anziché il .h

per il costruttore può darsi, ma per il file .cpp non credo! - carmelolg - 15/05/11 17:58
risposta assurda...il compilatore aggiunge il costruttore di default se non esiste e il file da includere è il .h... - lorenzo - 15/05/11 20:43
PM
Avatar
nihal (Ex-Member)
Pro


Messaggi: 109
Iscritto: 12/04/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 18:12
Domenica, 15/05/2011
Compila prima rettangolo.cpp e poi main.cpp

bastava linkare il file .ccp al compilatore, quindi bastava compilare con "g++ main.cpp -o main prova.cpp" - XBarboX - 15/05/11 19:06
PM