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++ - [C++]Come includere una classe in un file .h ?
Forum - C/C++ - [C++]Come includere una classe in un file .h ? - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 19:52
Mercoledì, 30/12/2009
Allora non hai capito niente di ciò che abbiamo detto finora? :om:
Ciò che ho detto io (in parole poverissime) e dopo ti ha illustrato TheKaneB tutto ciò che bisogna fare per praticare una buona programmazione.
Risottolineo:

Testo quotato

Postato originariamente da TheKaneB:
si DEVE separare il prototipo (nell'header .h) dall'implementazione (nel codice .cpp).

MOTIVO: Se non vengono separati, si ottiene una duplicazione del codice quanto includi lo stesso header in due diversi file del progetto con conseguente super cazziatone da parte del linker.

Codice sorgente - presumibilmente C++

  1. // MiaClasse.h
  2.  
  3. // questo #pragma indica al compilatore di non duplicare questa inclusione, per evitare ridefinizioni fastidiose
  4. #pragma once
  5.  
  6. class MiaClasse
  7. {
  8. public:
  9.   MiaClasse(); // Costruttore
  10.   ~MiaClasse(); // Distruttore
  11.  
  12.   int GetChupaCabra();  // Un metodo getter qualsiasi
  13.   void SetChupaCabra(int value); // Un metodo setter qualsiasi
  14.  
  15. private:
  16.   int m_chupaCabra;  // Una variabile privata
  17. };



poi si crea l'implementazione della classe su un file separato:
Codice sorgente - presumibilmente C++

  1. // MiaClasse.cpp
  2. // Richiamo i prototipi definiti nell'header e li implemento
  3. #include "MiaClasse.h"
  4.  
  5. // Il costruttore...
  6. MiaClasse::MiaClasse()
  7. {
  8.   m_chupaCabra = 0;
  9. }
  10.  
  11. // ... e suo cugino
  12. MiaClasse::~MiaClasse()
  13. {
  14.   // non faccio nulla
  15. }
  16.  
  17. // I metodi get e set per la variabile privata (questo si chiama "incapsulamento" ragazzo!)
  18. void MiaClasse::SetChupaCabra(int value)
  19. {
  20.   m_chupaCabra = value;
  21. }
  22.  
  23. int MiaClasse::GetChupaCabra()
  24. {
  25.   return m_chupaCabra;
  26. }




L'esempio che ti ha fatto è ciò che devi fare se vuoi creare una tua libreria.
Nel main, poi se vuoi utilizzare chiami allora la #include "libreriachetiserve.h"
Ah.. e ricorda, nel main o meglio fuori dalla libreria .cpp non puoi utilizzare le variabili e/o funzioni private.
Per capire meglio il concetto ti consiglio di studiare il principio di modularizzazione per le funzioni e classi.

:ot:
Testo quotato


gcc -o cabron.bin MiaClasse.cpp main.cpp



Pss... TheKaneB.. ma lo sai che significa cabron? Chi sa lo spagnolo può sentirsi offeso! ghghgh :rotfl:
:ot:

Ultima modifica effettuata da Lawliet il 30/12/2009 alle 19:54
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 19:59
Mercoledì, 30/12/2009
non conosco bene lo spagnolo, ma le parolacce si! ghghgh :D

PM Quote
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 8:58
Giovedì, 31/12/2009
allora il .h è obbligatorio... ok grazie.

"Ah.. e ricorda, nel main o meglio fuori dalla libreria .cpp non puoi utilizzare le variabili e/o funzioni private. " bhe questo è ovvio... XD

PM Quote
Avatar
AdaBayer (Normal User)
Newbie


Messaggi: 5
Iscritto: 16/11/2014

Segnala al moderatore
Postato alle 22:29
Domenica, 16/11/2014
Quindi io quando richiamo nel programma il prototipo della classe (file.h), questo automaticamente include anche i metodi contenuti nel file.cpp, giusto?
Però posso chiedervi di spiegarmi meglio cosa fa la riga 4: #pragma once ? Grazie:)
Ho appena iniziato le classi quindi ci capisco pochissimo...

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo