La definizione di una classe C ++ inizia con la parola riservata class. Di seguito si deve specificare il nome della classe (ovvero il nome del tipo).

Codice:
class tipo
{
public:
tipo var1;
tipo var2;
tipo var3;
funzione membro 1
funzione membro 2

protected:

tipo var4;
tipo var5;
tipo var6;
funzione membro 3;
funzione membro 4;

private:
tipo var7;
tipo var8;
tipo var9;
funzione membro 5;
funzione membro 6;
};
E' buona norma di programmazione inserire la definizione di una classe in un file header (i file intestazione, con estensione ".h") anche se non è indispensabile. Tutte le implementazioni dei metodi della classe andranno, invece, inseriti nel file con estensione cpp.

Vediamo un esempio di una semplice classe:

Codice:
// Semplice esempio di una classe C++
class Cliente
{
public:
char nome[20];
char cognome[20];
char indirizzo[30];
void inserisci_nome( );
void inserisci_cognome( );
void inserisci_indirizzo( );
};
Nella classe precedente sia gli attributi che le funzioni membro della classe sono tutti public, ovvero sono accessibili da ogni punto del programma.
Adesso salviamo la classe appena definita in un file chiamata cliente.h e creiamo un nuovo file, che chiamiamo cliente.cpp, in cui andiamo a scrivere l'implementazione dei metodi. Il file cliente.cpp sarà così fatto:

Codice:
#include <iostream.h>
include "cliente.h"

void Cliente::inserisci_nome( )
{
cout << Inserire il nome del dipendente: ";
cin >> nome;
cout << endl;
}

void Cliente::inserisci_cognome( )
{
cout << Inserire il cognome del dipendente: ";
cin >> cognome;
cout << endl;
}

void Cliente::inserisci_indirizzo( )
{
cout << Inserire l' indirizzo del dipendente: ";
cin >> indirizzo;
cin >> get(newline);	//elimina il Carriage Return
}


main( )
{
Cliente cliente;
cliente.inserisci_nome( );
cliente.inserisci_cognome( );
cliente.inserisci_indirizzo( );
cout << "Il nome del cliente inserito è:
" << cliente.nome << endl;

cout << "Il cognome del cliente inserito è:
" << cliente.cognome << endl;

cout << "L' indirizzo del cliente inserito è:
" << cliente.indirizzo << endl;
}
Avrete certamente notato la particolare sintassi utilizzata nel file Cliente.cpp relativamente alla implementazione delle funzioni membro. Essa segue la regola:

tipo_restituito nome_classe::nome_metodo( eventuali parametri)

dove l'operatore "::" viene denominato operatore di scope.

Inoltre, come si può vedere facilmente dalla funzione main, ogni volta che si fa riferimento ad un attributo o ad una funzione membro di un oggetto, va utilizzata la sintassi:

Codice:
oggetto.attributo
oggetto.metodo ()
Si supponga, adesso di creare lo stesso programma, ma cambiando il main nel seguente modo:

Codice:
main( )
{
Cliente* cliente;
cliente = new Cliente( );
cliente->inserisci_nome( );
cliente->inserisci_cognome( );
cliente->inserisci_indirizzo( );
cout << "Il nome del cliente inserito è:
" << cliente->nome << endl;

cout << "Il cognome del cliente inserito è:
" << cliente->cognome << endl;

cout << "L' indirizzo del cliente inserito è:
" << cliente->indirizzo << endl;

delete cliente;
}
Adesso, come si può notare, nella funzione main si sta definendo un oggetto della classe Cliente servendosi, però, di una variabile puntatore. Quando, si fa riferimento agli attributi o ai metodi di un oggetto che è stato definito tramite una variabile puntatore, la sintassi è diversa:

Codice:
oggetto->attributo
oggetto->metodo( )
Quando il programmatore non dovesse specificare nessun modificatore per un metodo o per un attributo all'interno di una classe, questi si intendono automaticamente private.
Ad esempio:

Codice:
class Cliente
{
char nome[20];
char cognome[20];
char indirizzo[30];

public:
void inserisci_nome( );
void inserisci_cognome( );
void inserisci_indirizzo( );
};
gli identificatori: nome, cognome ed indirizzo, che si trovano subito dopo la dichiarazione del nome della classe, saranno attributi private e, come tali, utilizzabili soltanto all'interno della classe stessa.
Si faccia attenzione quando si definisce la visibilità dei metodi e degli attributi di una classe. Se, infatti, avessimo scritto:

Codice:
class Cliente
{
char nome[20];
char cognome[20];
char indirizzo[30];
void inserisci_nome( );
void inserisci_cognome( );
void inserisci_indirizzo( );
};
la classe Cliente sarebbe stata una classe assolutamente inutilizzabile dall'esterno visto che tutti i suoi dati sono privati (non è stato infatti specificato alcun modificatore di accesso). Questo è chiaramente un errore. Se si provasse ad eseguire il programma precedente con tutti gli attributi private, il compilatore darebbe un errore in quanto non sarebbe in grado di accedere agli attributi e ai metodi della variabile cliente.

Fonte: html.it