Oppure

Loading
30/12/09 17:01
XBarboX
Nooooo il super cazziatone da parte del linker non lo voglio! Seguirò i tuoi consigli..
Cmq è proprio obbligatorio creare il file .h o basta mettere semplicemente l'implementazione dei metodi già nel file .cpp?
aaa
30/12/09 18:52
Lawliet
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:

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.

// MiaClasse.h

// questo #pragma indica al compilatore di non duplicare questa inclusione, per evitare ridefinizioni fastidiose
#pragma once

class MiaClasse
{
public:
  MiaClasse(); // Costruttore
  ~MiaClasse(); // Distruttore

  int GetChupaCabra();  // Un metodo getter qualsiasi
  void SetChupaCabra(int value); // Un metodo setter qualsiasi

private:
  int m_chupaCabra;  // Una variabile privata
};


poi si crea l'implementazione della classe su un file separato:
// MiaClasse.cpp
// Richiamo i prototipi definiti nell'header e li implemento
#include "MiaClasse.h"

// Il costruttore...
MiaClasse::MiaClasse()
{
  m_chupaCabra = 0;
}

// ... e suo cugino
MiaClasse::~MiaClasse()
{
  // non faccio nulla
}

// I metodi get e set per la variabile privata (questo si chiama "incapsulamento" ragazzo!)
void MiaClasse::SetChupaCabra(int value)
{
  m_chupaCabra = value;
}

int MiaClasse::GetChupaCabra()
{
  return m_chupaCabra;
}


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:
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 30/12/09 18:54
aaa
30/12/09 18:59
TheKaneB
non conosco bene lo spagnolo, ma le parolacce si! ghghgh :D
aaa
31/12/09 7:58
XBarboX
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
aaa
16/11/14 21:29
AdaBayer
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...
aaa