Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Ingegneria
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Valeria Vittorini » 17.Classi: costruttori e funzioni membro


Tipi di costruttori

  • Con zero argomenti;
  • con uno o più argomenti;
  • di copia.
Mostra codice

 

Realizzazione dei costruttori

Mostra codice

Costruttore con zero argomenti

Crea un oggetto assegnando valori di default (stabiliti dallo sviluppatore della classe).

Implicitamente richiamato dal compilatore per l’inizializzazione di default.

In mancanza di costruttori della classe l’inizializzazione viene predisposta dal compilatore (se invece nellla classe è definito almeno un costruttore il compilatore non predispone alcuna inizializzazione).

E’ opportuno definire sempre un costruttore con zero argomenti che può essere ottenuto anche come caso particolare di costruttore con più argomenti e parametri di default.

Costruttore con uno o più argomenti

Crea un oggetto assegnando valori passati al costruttore (stabiliti dall’utente della classe).

 


Costruttore di copia

Crea un oggetto a partire da un altro oggetto della classe (i valori delle variabili membro vengono copiati).

Signature: C (const C &)

E’ implicitamente richiamato:

  • all’atto della definizione di un oggetto per inizializzarlo con il valore di un altro oggetto
    • C c2=c1; oppure C c2(c1);
  • all’atto della chiamata di una funzione per inizializzare un argomento (oggetto) passato per valore;
  • all’atto del ritorno da una funzione, per restituire un oggetto per valore.

Costruttore di copia (segue)

In mancanza della definizione del costruttore di copia, il compilatore richiama un costruttore di copia di default.

Il costruttore di copia di default esegue una copia superficiale dell’oggetto (copia bit a bit) limitata alla sola parte base.

Nel caso esista una estensione dinamica il costruttore di copia deve essere esplicitamente definito dal progettista della classe.


Funzioni operanti sulle classi

Funzioni membro delle classi

  • costruttori e distruttori;
  • funzioni di accesso (get e set);
  • funzioni operatore (non trattate nella presente lezione);
  • altre funzioni per elaborazioni generiche;
  • funzioni di utilità.

Altre funzioni collegate alle classi

  • funzioni amiche;
  • funzioni ordinarie operanti su oggetti della classe.

Funzioni di accesso alle variabili membro

Lettura delle variabili membro (acquisizione dello stato dell’oggetto)

  • Consentono di accedere al valore corrente dell’oggetto proprio.
  • Funzioni “get()”: T getVM() const { return VM;}

Posizionamento dei valori delle variabili membro (posizionamento dello stato dell’oggetto)

  • Consentono di modificare lo stato dell’oggetto.
  • Funzioni “set(T)”: void setVM(T value) { VM=value;}

Esempio


Accesso ai membri di una classe

Nella chiamata di una funzione membro f il compilatore introduce un primo parametro nascosto che è l’indirizzo dell’oggetto proprio a cui f viene applicata.

Tale parametro e’ un puntatore costante il cui nome è this.

// Prototipo della funzione f
T f(...);
//Viene trasformato dal compilatore in:
T f(C* const this, ...);

Accesso ai membri di una classe (segue)

All’atto della chiamata &c viene ricopiato in this e attraverso tale puntatore la funzione opera sull’oggetto proprio

// chiamata della funzione f
c.f(...); // oppure p->f();
//Viene trasformata dal compilatore in:
f(&c, ...);

Accesso ai membri di una classe (segue)

Il valore di this all’interno della funzione non può essere modificato (this e’ un puntatore costante)

this è implicitamente utilizzato nel codice della funzione

int get_n() const { return n;} // inline

int get_n() const { return this->n;} //inline

this deve essere esplicitamente utilizzato:

  • per fare riferimento al valore dell’oggetto proprio nel suo complesso (esempio: return *this;);
  • come puntatore all’oggetto proprio se è un oggetto dinamico (esempio: return this;).

Esempio: classe Point

Mostra codice

Esempio: classe Point


  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion