Definizione di una classe in C++
In C++, una classe definisce un tipo di dato personalizzato, specificato dal programmatore. Come tale, la classe identifica l'insieme di valori che il tipo può assumere e le operazioni che possono essere applicate a tali valori.
Componenti di una classe
Una classe contiene pertanto:
- Dati (detti anche attributi o variabili membro)
- Funzioni (dette anche metodi o funzioni membro) che manipolano i dati
il tutto contenuto in un'unica entità.
Definizione di una classe
La definizione di una classe è fatta di due parti:
- Dichiarazione: descrive gli attributi e i metodi della classe. L'insieme degli attributi e dei metodi è anche detto interfaccia della classe.
- Definizione dei metodi: descrive l'implementazione dei metodi della classe. Tale implementazione si può trovare all'interno della dichiarazione della classe, dopo la dichiarazione stessa o anche in un file separato rispetto a quello che contiene la dichiarazione.
Sintassi per la dichiarazione di una classe
class class_name {
tipo1 nome_attributo1;
...
tipon nome_attributon;
tipo1 nome_metodo1 (tipo1 id1, ... , tipo_k1 id_k1);
...
tipo n nome_metodon (tipo n idn, ... , tipo_kn id_kn);
Oggetti
Una variabile del tipo definito dalla classe è detta oggetto. Si dice anche che un oggetto è un'istanza di una classe, ovvero è uno specifico valore nell'insieme di valori che la classe rappresenta (ad esempio, uno specifico punto).
Esempio:
int main() {
Punto p; // p è un oggetto di classe Punto
return 0;
}
Accesso ad attributi e metodi
Dato un oggetto, l'accesso ai suoi membri (attributi e metodi) avviene attraverso l'operatore . (come per le strutture):
- Accesso agli attributi:
nome_oggetto.nome_attributo; - Chiamata a metodi:
nome_oggetto.nome_metodo(parametri attuali);
Gestione degli attributi e metodi
Questo, tuttavia, dà errore perché _x e _y sono attributi privati della classe Punto. Ciò vuol dire che qualunque cosa stia fuori dalla classe (anche int main) non può accedere a quegli attributi.
Per ovviare a questo problema, si aggiunge "public:" prima della dichiarazione di attributi e metodi nella classe.
class Punto {
public:
double _x;
double _y;
void riscala(double f);
};
Sintassi corretta generale
class nome_classe {
public:
// dichiarazione sezione pubblica
private:
// dichiarazione sezione privata
}
Oppure:
class nome_classe {
// dichiarazione sezione pubblica
private:
// dichiarazione sezione privata
}
Questo è uno dei punti chiave che differenzia le classi dalle strutture: nelle strutture, tutti gli attributi sono pubblici.
Accesso a puntatori
Di nuovo allo stesso modo delle strutture, l'accesso ai puntatori avviene attraverso l'operatore ->.
Esempio:
Punto* p; // inizializzazione del puntatore... p->_x = 100; p->_y = 200; p->riscala(0.5);
Attributi privati e metodi pubblici
Perché gli attributi vengono messi privati? Solitamente, nella programmazione a oggetti, due sviluppatori contribuiscono alla realizzazione del programma: il primo definisce le classi, il secondo sviluppa il main. Mantenendo gli attributi privati, questi possono essere liberamente modificati dal primo sviluppatore senza che ciò comporti delle modifiche nel main.
Tipologie di metodi
- Costruttori: sono invocati automaticamente per creare e inizializzare un oggetto.
- Distruttori: sono invocati automaticamente per distruggere un oggetto.
- Selettori: accedono agli attributi (privati) di un oggetto e ne restituiscono il valore (il loro nome di solito inizia con get).
- Modificatori: accedono agli attributi (privati) di un oggetto e ne modificano il valore (il loro nome di solito inizia con set).
- Operatori: elaborano gli attributi di un oggetto e implementano per la classe gli operatori standard C++.
-
Diagramma delle classi
-
Classi astratte e interfacce in java
-
Divisione in tre classi, Biologia Molecolare
-
Informatica I - le classi interne