Lezione in C++ è l'elemento costitutivo che porta alla programmazione orientata agli oggetti. È un tipo di dati definito dall'utente, che contiene i propri membri dati e funzioni membro, a cui è possibile accedere e utilizzare creando un'istanza di quella classe. Una classe C++ è come un progetto per un oggetto. Ad esempio: considera la classe di Automobili . Potrebbero esserci molte auto con nomi e marchi diversi, ma tutte condivideranno alcune proprietà comuni come tutte le avranno 4 ruote , Limite di velocità , Autonomia chilometrica, ecc. Quindi qui, l'auto è la classe e le ruote, i limiti di velocità e il chilometraggio sono le loro proprietà.
- Una classe è un tipo di dati definito dall'utente che dispone di membri dati e funzioni membro.
- I membri dati sono le variabili dati e le funzioni membro sono le funzioni utilizzate per manipolare queste variabili insieme, questi membri dati e funzioni membro definiscono le proprietà e il comportamento degli oggetti in una classe.
- Nell'esempio sopra di class Auto , il membro dati sarà Limite di velocità , chilometraggio, etc, e le funzioni membro possono essere applicare i freni , velocità crescente, eccetera.
UN Oggetto è un'istanza di una classe. Quando viene definita una classe, non viene allocata memoria ma quando viene istanziata (ovvero viene creato un oggetto) viene allocata memoria.
Definizione di classi e dichiarazione di oggetti
Una classe viene definita in C++ utilizzando la parola chiave class seguita dal nome della classe. Il corpo della classe è definito tra parentesi graffe e termina con un punto e virgola alla fine.
Dichiarazione di oggetti
Quando viene definita una classe, vengono definite solo le specifiche dell'oggetto; non viene allocata alcuna memoria o spazio di archiviazione. Per utilizzare i dati e accedere alle funzioni definite nella classe, è necessario creare oggetti.
Sintassi
ClassName ObjectName;>
Accesso ai membri dati e alle funzioni membro : è possibile accedere ai membri dati e alle funzioni membro della classe utilizzando l'operatore punto('.') con l'oggetto. Ad esempio, se il nome dell'oggetto è ogg e vuoi accedere alla funzione membro con il nome stampaNome() allora dovrai scrivere oggetto.nomestampa() .
Accesso ai dati dei membri
Anche ai membri dati pubblici si accede nello stesso modo, tuttavia ai membri dati privati non è consentito accedere direttamente dall'oggetto. L'accesso a un membro dati dipende esclusivamente dal controllo di accesso di quel membro dati. Questo controllo di accesso è dato dai modificatori di accesso in C++ . Esistono tre modificatori di accesso: pubblico, privato e protetto .
C++
dfs contro bfs
// C++ program to demonstrate accessing of data members> #include> using> namespace> std;> class> Geeks {> >// Access specifier> public>:> >// Data Members> >string geekname;> >// Member Functions()> >void> printname() { cout <<>'Geekname is:'> << geekname; }> };> int> main()> {> >// Declare an object of class geeks> >Geeks obj1;> >// accessing data member> >obj1.geekname =>'Abhi'>;> >// accessing member function> >obj1.printname();> >return> 0;> }> |
>
>Produzione
Geekname is:Abhi>
Funzioni membro nelle classi
Esistono 2 modi per definire una funzione membro:
- Definizione di classe interna
- Definizione di classe esterna
Per definire una funzione membro al di fuori della definizione della classe dobbiamo usare il file risoluzione dell'ambito:: operatore insieme al nome della classe e al nome della funzione.
C++
// C++ program to demonstrate function> // declaration outside class> > #include> using> namespace> std;> class> Geeks> {> >public>:> >string geekname;> >int> id;> > >// printname is not defined inside class definition> >void> printname();> > >// printid is defined inside class definition> >void> printid()> >{> >cout <<>'Geek id is: '>< } }; // Definition of printname using scope resolution operator :: void Geeks::printname() { cout <<'Geekname is: '< } int main() { Geeks obj1; obj1.geekname = 'xyz'; obj1.id=15; // call printname() obj1.printname(); cout << endl; // call printid() obj1.printid(); return 0; }> |
>
programmi Java
>Produzione
Geekname is: xyz Geek id is: 15>
Tieni presente che tutte le funzioni membro definite all'interno della definizione della classe sono predefinite in linea , ma puoi anche rendere inline qualsiasi funzione non di classe utilizzando la parola chiave inline con esse. Le funzioni inline sono funzioni effettive, che vengono copiate ovunque durante la compilazione, come le macro del preprocessore, quindi il sovraccarico delle chiamate di funzione è ridotto.
Nota: Dichiarare a funzione amico è un modo per fornire accesso privato a una funzione non membro.
Costruttori
Costruttori sono membri speciali della classe che vengono chiamati dal compilatore ogni volta che viene istanziato un oggetto di quella classe. I costruttori hanno lo stesso nome della classe e possono essere definiti all'interno o all'esterno della definizione della classe. Esistono 3 tipi di costruttori:
- Costruttori predefiniti
- Costruttori parametrizzati
- Copia costruttori
C++
// C++ program to demonstrate constructors> #include> using> namespace> std;> class> Geeks> {> >public>:> >int> id;> > >//Default Constructor> >Geeks()> >{> >cout <<>'Default Constructor called'> << endl;> >id=-1;> >}> > >//Parameterized Constructor> >Geeks(>int> x)> >{> >cout <<>'Parameterized Constructor called '><< endl;> >id=x;> >}> };> int> main() {> > >// obj1 will call Default Constructor> >Geeks obj1;> >cout <<>'Geek id is: '>< // obj2 will call Parameterized Constructor Geeks obj2(21); cout <<'Geek id is: ' < return 0; }> |
>
>Produzione
Default Constructor called Geek id is: -1 Parameterized Constructor called Geek id is: 21>
UN Copia costruttore crea un nuovo oggetto, che è una copia esatta dell'oggetto esistente. Il compilatore fornisce un costruttore di copia predefinito a tutte le classi.
Sintassi:
class-name (class-name &){}> distruttori
Distruttore è un'altra funzione membro speciale che viene chiamata dal compilatore quando termina l'ambito dell'oggetto.
C++
anno di invenzione del computer
// C++ program to explain destructors> #include> using> namespace> std;> class> Geeks> {> >public>:> >int> id;> > >//Definition for Destructor> >~Geeks()> >{> >cout <<>'Destructor called for id: '> << id < } }; int main() { Geeks obj1; obj1.id=7; int i = 0; while ( i <5 ) { Geeks obj2; obj2.id=i; i++; } // Scope for obj2 ends here return 0; } // Scope for obj1 ends here> |
>
>Produzione
Destructor called for id: 0 Destructor called for id: 1 Destructor called for id: 2 Destructor called for id: 3 Destructor called for id: 4 Destructor called for id: 7>
Fatto interessante (concetto raro conosciuto)
Perché mettiamo il punto e virgola alla fine della lezione?
Molte persone potrebbero dire che si tratta di una sintassi di base e che dovremmo inserire un punto e virgola alla fine della classe come definito dalla regola in cpp. Ma il motivo principale per cui sono presenti i punti e virgola alla fine della classe è che il compilatore controlla se l'utente sta tentando di creare un'istanza della classe alla fine di essa.
Sì, proprio come struttura e unione, possiamo anche creare l'istanza di una classe alla fine, subito prima del punto e virgola. Di conseguenza, una volta che l'esecuzione raggiunge quella riga, crea una classe e alloca memoria all'istanza.
C++
10 ml nell'oncia
#include> using> namespace> std;> > class> Demo{> >int> a, b;> >public>:> >Demo()>// default constructor> >{> >cout <<>'Default Constructor'> << endl;> >}> >Demo(>int> a,>int> b):a(a),b(b)>//parameterised constructor> >{> >cout <<>'parameterized constructor -values'> << a <<>' '><< b << endl;> >}> > }instance;> > > int> main() {> > >return> 0;> }> |
>
>Produzione
Default Constructor>
Possiamo vedere che abbiamo creato un'istanza di classe Demo con il nome istanza, di conseguenza, l'output che possiamo vedere è chiamato Default Constructor.
Allo stesso modo, possiamo anche chiamare il costruttore parametrizzato semplicemente passando qui i valori
C++
rinominare una directory linux
#include> using> namespace> std;> > class> Demo{> >public>:> >int> a, b;> >Demo()> >{> >cout <<>'Default Constructor'> << endl;> >}> >Demo(>int> a,>int> b):a(a),b(b)> >{> >cout <<>'parameterized Constructor values-'> << a <<>' '><< b << endl;> >}> > > > }instance(100,200);> > > int> main() {> > >return> 0;> }> |
>
>Produzione
parameterized Constructor values-100 200>
Quindi, creando un'istanza subito prima del punto e virgola, possiamo creare l'istanza della classe.
Articoli Correlati:
- Ereditarietà multipla in C++
- Puro distruttore virtuale
- Quiz sul C++