C++ Classe e oggetto con esempio

⚡ Riepilogo intelligente

Classi e oggetti in C++ Costituiscono il fondamento della programmazione orientata agli oggetti, dove una classe definisce un modello di dati e funzioni membro, e un oggetto è un'istanza concreta creata a partire da tale modello.

  • 🔷 Schema del corso: A C++ La classe raggruppa membri dati e funzioni membro in un unico tipo definito dall'utente.
  • 🔑 Modificatori di accesso: Le parole chiave private, public e protected controllano da dove è possibile accedere ai membri della classe.
  • 🧱 Creazione di istanze di oggetti: Un oggetto viene creato a partire da una classe utilizzando la sintassi nome-classe nome-oggetto.
  • 👉 Accesso riservato ai membri: L'operatore punto raggiunge i membri pubblici, mentre le funzioni membro manipolano i dati memorizzati.
  • ⚙️ Costruttori: I costruttori inizializzano automaticamente gli oggetti, mentre i distruttori li rilasciano quando escono dall'ambito di validità.
  • 🤖 Assistenza AI: GitHub Copilot e assistenti IA simili generano automaticamente definizioni di classi e costruttori a partire da un breve commento.

C++ Classe e oggetto

Cos'è una classe?

A C++ La classe combina dati e metodi per manipolare i dati in uno solo. Le classi determinano anche le forme degli oggetti. I dati e i metodi contenuti in una classe sono noti come membri della classe. Una classe è un tipo di dati definito dall'utente. Per accedere ai membri della classe, utilizziamo un'istanza della classe. Puoi vedere una classe come un progetto per un oggetto.

Una classe può fungere da prototipo per una casa. Essa mostra la posizione e le dimensioni di porte, finestre, piani, ecc. A partire da queste descrizioni, possiamo costruire una casa. La casa diventa l'oggetto. È possibile creare molte case a partire dal prototipo. Allo stesso modo, è possibile creare molti oggetti a partire da una classe.

C++ classe come modello per gli oggetti

Nella figura sopra, abbiamo un prototipo di casa singola. Da questo prototipo abbiamo realizzato due case con caratteristiche diverse.

Tenendo presente l'idea di una classe come modello, il passo successivo è vedere come viene dichiarata nel codice.

Dichiarazione di classe

In C++Una classe viene definita utilizzando la parola chiave `class`. Questa deve essere seguita dal nome della classe. Il corpo della classe viene quindi aggiunto tra parentesi graffe { }.

Sintassi

class class-name
   {
   // data
   // functions
   };
  • Migliori nome della classe è il nome da assegnare alla classe.
  • Migliori dati sono i dati per la classe, normalmente dichiarati come variabili.
  • Migliori funzioni sono le funzioni di classe.

Dichiarare il nome della classe e il suo corpo solleva naturalmente la questione di chi possa utilizzare ciascun membro.

Parole chiave private e pubbliche

Devi esserti imbattuto in queste due parole chiave. Sono modificatori di accesso.

Privato:

Quando la parola chiave private viene utilizzata per definire una funzione o una classe, diventa privata. Questi sono accessibili solo dall'interno della classe.

Pubblico:

La parola chiave public, invece, rende pubblici i dati/funzioni. Questi sono accessibili dall'esterno della classe.

Una volta creata una classe, è possibile creare oggetti a partire da essa, proprio come si creano variabili a partire da un tipo di dato.

Definizione dell'oggetto

Gli oggetti vengono creati a partire dalle classi. Gli oggetti di classe vengono dichiarati in modo simile alle variabili. Il nome della classe deve venire prima, seguito dal nome dell'oggetto. L'oggetto è di tipo classe.

Sintassi

class-name object-name;
  • Migliori nome della classe è il nome della classe da cui deve essere creato un oggetto.
  • Migliori nome-oggetto è il nome da assegnare al nuovo oggetto.

Questo processo di creazione di un oggetto da una classe è noto come istanziazione.

Una volta creato un oggetto, i suoi membri pubblici possono essere raggiunti direttamente tramite un semplice operatore.

Accesso ai dati dei membri

Per accedere ai membri pubblici di una classe, utilizziamo l'operatore (.)punto. Questi sono i membri contrassegnati con il modificatore di accesso pubblico.

esempio 1

#include <iostream>
using namespace std;
class Phone {
public:
	double cost;   
	int slots; 
};
int main() {
	Phone Y6;        
	Phone Y7;        

	Y6.cost = 100.0;
	Y6.slots = 2;

	Y7.cost = 200.0;
	Y7.slots = 2;
	cout << "Cost of Huawei Y6 : " << Y6.cost << endl;
	cout << "Cost of Huawei Y7 : " << Y7.cost << endl;

	cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl;
	cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl;

	return 0;
}

Produzione:

C++ accesso ai membri dei dati pubblici Esempio 1 output

Ecco uno screenshot del codice:

C++ accesso ai membri dei dati pubblici Esempio 1 codice

Code Spiegazione:

  1. Includi il file header iostream nel nostro codice per poter utilizzare le sue funzioni.
  2. Includere lo spazio dei nomi std nel nostro codice per utilizzare le sue classi senza chiamarlo.
  3. Dichiarare una classe denominata Phone.
  4. Utilizzando il modificatore di accesso pubblico per contrassegnare le variabili che stiamo per creare come accessibili pubblicamente.
  5. Dichiara il costo variabile di un tipo di dati double.
  6. Dichiara una variabile intera denominata slots.
  7. Fine del corpo della classe.
  8. Chiamando la funzione main(). La logica del programma dovrebbe essere aggiunta all'interno del suo corpo.
  9. Crea un oggetto denominato Y6 di tipo Telefono. Questa è chiamata istanziazione.
  10. Crea un oggetto denominato Y7 di tipo Telefono. Questa è chiamata istanziazione.
  11. Accedi al costo variabile/associato della classe Telefono utilizzando l'oggetto Y6. Il valore è impostato su 100.0. Il costo di Y6 è ora impostato su 100.0.
  12. Accedi agli slot variabili/membro della classe Phone utilizzando l'oggetto Y6. Il valore è impostato su 2. Gli slot per Y6 sono ora impostati su 2.
  13. Accedi al costo variabile/associato della classe Telefono utilizzando l'oggetto Y7. Il valore è impostato su 200.0. Il costo di Y7 è ora impostato su 200.0.
  14. Accedi agli slot variabili/membro della classe Phone utilizzando l'oggetto Y7. Il valore è impostato su 2. Gli slot per Y7 sono ora impostati su 2.
  15. Stampa il costo di Y6 sulla console insieme ad altro testo.
  16. Stampa il costo di Y7 sulla console insieme ad altro testo.
  17. Stampa il numero di slot per Y6 insieme ad altro testo.
  18. Stampa il numero di slot per Y7 insieme ad altro testo.
  19. Il programma deve restituire un valore in caso di completamento positivo.
  20. Fine del corpo della funzione main().

I membri pubblici possono accedere a codice esterno, mentre i membri privati ​​seguono regole di accesso molto più rigide.

Cos'è una lezione privata?

I membri della classe contrassegnati come privati ​​sono accessibili solo tramite le funzioni definite all'interno della classe. Qualsiasi oggetto o funzione definita all'esterno della classe non può accedere direttamente a tali membri. Un membro di una classe privata è accessibile solo tramite le funzioni membro e amico.

esempio 2

#include <iostream>
using namespace std;
class ClassA {
public:
	void set_a(int val);
	int get_a(void);

private:
	int a;
};
int ClassA::get_a(void) {
	return a;
}
void ClassA::set_a(int val) {
	a = val;
}
int main() {
	ClassA a;
	a.set_a(20); 
	cout << "Value of a is: " << a.get_a(); 
	return 0;
}

Produzione:

C++ Esempio di output del membro della classe privata 2

Ecco uno screenshot del codice:

C++ Esempio di codice 2 per un membro privato della classe

Code Spiegazione:

  1. Includi il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni.
  2. Includi lo spazio dei nomi std nel nostro codice per utilizzare le sue classi senza chiamarlo.
  3. Crea una classe denominata ClassA.
  4. Utilizza il modificatore di accesso pubblico per contrassegnare il membro della classe da creare come accessibile pubblicamente.
  5. Crea la funzione denominata set_a() che accetta un valore intero val.
  6. Crea una funzione denominata get_a().
  7. Utilizzare il modificatore di accesso privato per contrassegnare il membro della classe da creare come accessibile privatamente.
  8. Dichiarare una variabile intera denominata a.
  9. Fine del corpo della classe.
  10. Utilizzare il nome della classe e l'operatore di risoluzione dell'ambito per accedere alla funzione get_a(). Vogliamo definire cosa fa la funzione quando viene invocata.
  11. La funzione get_a() dovrebbe restituire il valore della variabile a quando richiamata.
  12. Fine della definizione della funzione get_a().
  13. Utilizzare il nome della classe e l'operatore di risoluzione dell'ambito per accedere alla funzione set_a(). Vogliamo definire cosa fa la funzione quando viene invocata.
  14. Assegnazione del valore della variabile val alla variabile a.
  15. Fine della definizione della funzione set_a().
  16. Chiama la funzione main(). La logica del programma dovrebbe essere aggiunta al corpo di questa funzione.
  17. Crea un'istanza di ClassA e dagli il nome a.
  18. Utilizza l'istanza della classe precedente e la funzione set_a() per assegnare un valore pari a 20 alla variabile a.
  19. Stampa del testo accanto al valore della variabile a sulla console. Il valore della variabile a si ottiene chiamando la funzione get_a().
  20. Il programma deve restituire valore in caso di completamento positivo.
  21. Fine del corpo della funzione main().

I membri protetti si collocano a metà strada tra la sfera privata e quella pubblica, aggiungendo una capacità fondamentale per la successione ereditaria.

Cos'è una classe protetta?

I membri della classe contrassegnati come protetti hanno un vantaggio rispetto a quelli contrassegnati come privati. È possibile accedervi tramite funzioni all'interno della classe della loro definizione. Inoltre, è possibile accedervi dalle classi derivate.

esempio 3

#include <iostream>
using namespace std;
class ParentClass {
protected:
	int value;
};
class ChildClass : public ParentClass {
public:
	void setId(int x) {
		value = x;
	}
	void displayValue() {
	cout << "Value is: " << value << endl;
	}
};
int main() {
	ChildClass c;
	c.setId(21);
	c.displayValue();
	return 0;
}

Produzione:

C++ Esempio di output del membro della classe protetta 3

Ecco uno screenshot del codice:

C++ Esempio di codice 3 sull'ereditarietà delle classi protette

Code Spiegazione:

  1. Includi il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni.
  2. Includi lo spazio dei nomi std nel nostro codice per utilizzare le sue classi senza chiamarlo.
  3. Crea una classe denominata ParentClass.
  4. Utilizzare il modificatore di accesso protetto per contrassegnare il membro della classe da creare come protetto.
  5. Crea una variabile intera denominata valore.
  6. Fine del corpo della classe.
  7. Crea una nuova classe denominata ChildClass che eredita ParentClass.
  8. Utilizzare il modificatore di accesso protetto per contrassegnare il membro della classe da creare come accessibile alle classi figlie.
  9. Crea la funzione denominata setId() che accetta un valore intero x.
  10. Assegnazione del valore della variabile x al valore della variabile.
  11. Fine della definizione della funzione setId().
  12. Crea una funzione denominata displayValue().
  13. Stampa il valore della variabile denominata value sulla console insieme ad altro testo.
  14. Fine del corpo della funzione displayValue().
  15. Fine del corpo della classe denominata ChildClass.
  16. Chiama la funzione main(). La logica del programma dovrebbe essere aggiunta al corpo di questa funzione.
  17. Creare un'istanza di ChildClass e darle il nome c.
  18. Utilizza l'istanza della classe precedente e la funzione setId() per assegnare un valore pari a 21 alla variabile x.
  19. Utilizzare l'istanza della classe precedente per chiamare la funzione denominata displayValue().
  20. Il programma deve restituire valore in caso di completamento positivo.
  21. Fine del corpo della funzione main().

Oltre a memorizzare i dati, una classe raggruppa anche le funzioni che operano su tali dati.

Funzioni dei membri della classe

Le funzioni ci aiutano a manipolare i dati. Le funzioni membro della classe possono essere definite in due modi:

  • All'interno della definizione della classe
  • Al di fuori della definizione di classe

Se una funzione deve essere definita al di fuori di una definizione di classe, dobbiamo utilizzare l'operatore di risoluzione dell'ambito (::). Questo dovrebbe essere accompagnato dai nomi delle classi e delle funzioni.

esempio 4

#include <iostream>
#include <string>
using namespace std;
class Guru99
{
public:
	string tutorial_name;
	int id;
	void printname();
	void printid()
	{
		cout << "Tutorial id is: "<< id;
	}
};
void Guru99::printname()
{
	cout << "Tutorial name is: " << tutorial_name;
}
int main() {
	Guru99 guru99;
	guru99.tutorial_name = "C++";
	guru99.id = 1001;
	guru99.printname();
	cout << endl;
	guru99.printid();
	return 0;
}

Produzione:

C++ Esempio di output delle funzioni membro della classe 4

Ecco uno screenshot del codice:

C++ Funzioni membro della classe Esempio di codice 4

Code Spiegazione:

  1. Includi il file header iostream nel nostro programma per utilizzare le sue funzioni.
  2. Includi il file di intestazione della stringa nel nostro programma per utilizzare le sue funzioni.
  3. Includi lo spazio dei nomi std nel nostro codice per utilizzare le sue classi senza chiamarlo.
  4. Crea una classe denominata Guru99
  5. Utilizza il modificatore di accesso pubblico per contrassegnare i membri della classe che stiamo per creare come accessibili pubblicamente.
  6. Crea una variabile stringa denominata nome_tutorial.
  7. Crea una variabile intera denominata id.
  8. Crea una funzione denominata printname(). Questa funzione non è definita all'interno della definizione della classe.
  9. Crea una funzione chiamata printid(). Questa funzione è definita all'interno della definizione della classe. Il suo corpo è stato aggiunto all'interno della definizione della classe.
  10. Stampa il valore dell'ID variabile insieme ad altro testo sulla console. Nota che questo è stato aggiunto nel corpo della funzione printid(). Verrà eseguito solo quando viene chiamata la funzione printid().
  11. Fine del corpo della funzione printid().
  12. Fine del corpo della lezione Guru99
  13. L'inizio della definizione della funzione printname().
  14. Stampa il valore della variabile tutorial_name sulla console insieme ad altro testo. Nota che questo è stato aggiunto nel corpo della funzione printname(). Verrà eseguito solo quando viene chiamata la funzione printname().
  15. Fine della definizione della funzione printname().
  16. Chiama la funzione main(). La logica del programma dovrebbe essere aggiunta al corpo di questa funzione.
  17. Crea un'istanza della classe Guru99 e dandogli il nome guru99.
  18. Utilizzare l'istanza precedente per assegnare un valore di C++ alla variabile nome_tutorial.
  19. Utilizza l'istanza guru99 per assegnare il valore 1001 alla variabile id.
  20. Utilizza l'istanza guru99 per chiamare la funzione printname() .
  21. Chiama il comando end (fine riga) per stampare una nuova riga vuota sulla console.
  22. Utilizza l'istanza guru99 per chiamare la funzione printid().
  23. Il programma deve restituire valore in caso di completamento positivo.
  24. Fine del corpo della funzione main().

Due funzioni membro speciali vengono eseguite automaticamente quando un oggetto viene creato e quando viene distrutto.

Costruttori e distruttori

Che cosa è un costruttore?

I costruttori sono funzioni speciali che inizializzano gli oggetti. C++ compilatori Quando si crea un oggetto, si chiama un costruttore. I costruttori aiutano ad assegnare valori ai membri della classe, dopo che a questi è stato allocato dello spazio di memoria.

Che cos'è un distruttore?

I distruttori invece aiutano a distruggere gli oggetti della classe.

Il nome del costruttore deve essere simile al nome della classe. I costruttori non hanno un tipo restituito.

Il costruttore può essere definito all'interno o all'esterno del corpo della classe. Se definito all'esterno del corpo della classe, deve essere definito con il nome della classe e l'operatore di risoluzione dell'ambito (::).

esempio 5

#include <iostream>  
using namespace std;
class ClassA {
public:
	ClassA() {
		cout << "Class constructor called"<<endl;
	}
	~ClassA() {
		cout << "Class destructor called"<<endl;
	}
};

int main() {
	ClassA a;
	int p = 1;
		if (p) {
			ClassA b; 
		}   
}

Produzione:

C++ Esempio 5 di output del costruttore e del distruttore

Ecco uno screenshot del codice:

C++ Esempio di codice 5 per costruttore e distruttore

Code Spiegazione:

  1. Includere il file di intestazione iostream nel codice per utilizzare le sue funzioni.
  2. Includi lo spazio dei nomi std nel nostro codice per utilizzare le sue classi senza chiamarlo.
  3. Crea una classe denominata ClassA.
  4. Utilizza il modificatore di accesso pubblico per contrassegnare il membro che stiamo per creare come accessibile pubblicamente.
  5. Crea un costruttore per la classe.
  6. Testo da stampare sulla console quando viene chiamato il costruttore. La fine è a C++ parola chiave, che significa riga di fine. Sposta il cursore del mouse sulla riga successiva.
  7. Fine del corpo del costruttore della classe.
  8. Crea un distruttore per la classe.
  9. Testo da stampare sulla console quando viene chiamato il distruttore. La fine è a C++ parola chiave, che significa riga di fine. Sposta il cursore del mouse sulla riga successiva.
  10. Fine del corpo del distruttore.
  11. Fine del corpo della classe.
  12. Chiama la funzione main(). La logica del programma dovrebbe essere aggiunta al corpo di questa funzione.
  13. Crea un oggetto di classe e dagli il nome a. Verrà chiamato il costruttore.
  14. Crea una variabile intera denominata p e assegnale il valore 1.
  15. Crea un blocco di istruzioni if ​​utilizzando la variabile p.
  16. Creare un oggetto di classe e dargli il nome b. Verrà chiamato il distruttore.
  17. Fine del corpo dell'istruzione if.
  18. Fine del corpo della funzione main().

DOMANDE FREQUENTI

Una classe è un modello definito dall'utente che raggruppa membri dati e funzioni membro in un unico tipo. Un oggetto è un'istanza concreta creata a partire da quella classe, che contiene una propria copia dei dati descritti dal modello.

La differenza principale è l'accesso predefinito: i membri di una classe sono privati ​​per impostazione predefinita, mentre i membri di una La struttura sono pubblici per impostazione predefinita. Entrambi supportano l'ereditarietà, i costruttori e l'incapsulamento in C++.

C++ supporta tre tipi comuni di costruttore: un costruttore predefinito senza argomenti, un costruttore parametrizzato che accetta valori per inizializzare i membri e un costruttore di copia che crea un nuovo oggetto da uno esistente della stessa classe.

Una funzione friend è una funzione non membro a cui è concesso l'accesso ai membri privati ​​e protetti di una classe. Viene dichiarata all'interno della classe con la parola chiave friend, ma definita all'esterno come una normale funzione.

Il puntatore `this` è un puntatore implicito disponibile all'interno di ogni funzione membro non statica. Punta all'oggetto che ha invocato la funzione, consentendo al codice di fare riferimento ai membri di tale oggetto e di risolvere i conflitti di denominazione tra parametri e membri dati.

L'incapsulamento raggruppa i dati e le funzioni che operano su di essi all'interno di un'unica classe, nascondendo poi i dettagli interni tramite membri privati. Le funzioni membro pubbliche espongono un'interfaccia controllata, proteggendo i dati da accessi accidentali o non autorizzati.

Sì. Gli assistenti di programmazione basati sull'IA trasformano un breve prompt o un commento in definizioni di classi funzionanti, inclusi membri dati, specificatori di accesso, costruttori e funzioni membro. È sempre consigliabile rivedere i livelli di accesso e la logica di inizializzazione generati prima di compilare il codice.

Sì. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. Copilota GitHub Suggerisce dichiarazioni di classi, costruttori, getter e setter durante la digitazione. Gestisce rapidamente il codice ripetitivo, anche se è comunque consigliabile verificare l'accesso ai membri, la logica del costruttore e l'utilizzo degli oggetti prima di compilare.

Riassumi questo post con: