logo

Classes i objectes C++

Classe en C++ és el bloc de construcció que condueix a la programació orientada a objectes. És un tipus de dades definit per l'usuari, que conté els seus propis membres de dades i funcions de membre, als quals es pot accedir i utilitzar-se creant una instància d'aquesta classe. Una classe C++ és com un plànol per a un objecte. Per exemple: considereu la classe de Cotxes . Pot haver-hi molts cotxes amb diferents noms i marques, però tots compartiran algunes propietats comunes com tindran tots. 4 rodes , Límit de velocitat , Interval de quilometratge, etc. Així que aquí, el cotxe és la classe, i les rodes, els límits de velocitat i el quilometratge són les seves propietats.

  • Una classe és un tipus de dades definit per l'usuari que té membres de dades i funcions de membre.
  • Els membres de dades són les variables de dades i les funcions de membre són les funcions que s'utilitzen per manipular aquestes variables juntes, aquests membres de dades i funcions de membre defineixen les propietats i el comportament dels objectes d'una classe.
  • En l'exemple anterior de classe Cotxe , el membre de dades serà Límit de velocitat , quilometratge, etc, i les funcions dels membres poden ser aplicant frens , augmentant la velocitat, etc.

An Objecte és una instància d'una classe. Quan es defineix una classe, no s'assigna memòria, però quan s'instancia (és a dir, es crea un objecte) s'assigna memòria.



Definició de classes i declaració d'objectes

Una classe es defineix en C++ utilitzant la paraula clau class seguida del nom de la classe. El cos de la classe es defineix dins dels claudàtors i acaba amb un punt i coma al final.

Classe i objecte C++

Declaració d'objectes

Quan es defineix una classe, només es defineix l'especificació de l'objecte; no s'assigna cap memòria ni emmagatzematge. Per utilitzar les dades i les funcions d'accés definides a la classe, cal crear objectes.



Sintaxi

ClassName ObjectName;>

Accés als membres de dades i funcions dels membres : Es pot accedir als membres de dades i a les funcions membres de la classe mitjançant l'operador punt(‘.’) amb l'objecte. Per exemple, si el nom de l'objecte és obj i voleu accedir a la funció de membre amb el nom Nom d'impressió() llavors hauràs d'escriure obj.printName() .

Accés als membres de dades

També s'accedeix als membres de dades públiques de la mateixa manera, però l'objecte no pot accedir directament als membres de dades privades. L'accés a un membre de dades depèn únicament del control d'accés d'aquest membre de dades. Aquest control d'accés ve donat pels modificadors d'accés en C++. Hi ha tres modificadors d'accés: públic, privat i protegit .

C++




comentari css



// 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;> }>

>

>

Sortida

Geekname is:Abhi>

Funcions dels membres a les classes

Hi ha 2 maneres de definir una funció membre:

  • Definició dins de la classe
  • Definició fora de classe

Per definir una funció membre fora de la definició de classe hem d'utilitzar resolució d'abast:: operador juntament amb el nom de la classe i el nom de la funció.

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; }>

>

b+ arbre

>

Sortida

Geekname is: xyz Geek id is: 15>

Tingueu en compte que totes les funcions membre definides dins de la definició de classe són per defecte en linia , però també podeu integrar qualsevol funció que no sigui de classe utilitzant la paraula clau en línia amb elles. Les funcions en línia són funcions reals, que es copien a tot arreu durant la compilació, com ara la macro del preprocessador, de manera que es redueix la sobrecàrrega de les trucades de funcions.

Nota: Declarant a funció d'amic és una manera de donar accés privat a una funció no membre.

Constructors

Constructors són membres de classe especials que el compilador crida cada vegada que s'instancia un objecte d'aquesta classe. Els constructors tenen el mateix nom que la classe i es poden definir dins o fora de la definició de classe. Hi ha 3 tipus de constructors:

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; }>

>

linux $home
>

Sortida

Default Constructor called Geek id is: -1 Parameterized Constructor called Geek id is: 21>

A Copia el constructor crea un objecte nou, que és una còpia exacta de l'objecte existent. El compilador proporciona un constructor de còpia per defecte a totes les classes.

Sintaxi:

class-name (class-name &){}>

Destructors

Destructor és una altra funció membre especial que el compilador crida quan acaba l'abast de l'objecte.

C++




// 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>

>

>

Sortida

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>

Fet interessant (concepte conegut rar)

Per què posem punt i coma al final de la classe?

Molta gent podria dir que és una sintaxi bàsica i hauríem de posar un punt i coma al final de la classe tal com defineix la seva regla a cpp. Però la raó principal per la qual hi ha punt i coma al final de la classe és que el compilador comprova si l'usuari està intentant crear una instància de la classe al final d'aquesta.

Sí, igual que l'estructura i la unió, també podem crear la instància d'una classe al final just abans del punt i coma. Com a resultat, una vegada que l'execució arriba a aquesta línia, crea una classe i assigna memòria a la vostra instància.

C++


python converteix bytes en cadena



#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;> }>

>

>

Sortida

Default Constructor>

Podem veure que hem creat una instància de classe de Demo amb el nom instància, com a resultat, la sortida que podem veure és Default Constructor s'anomena.

De la mateixa manera, també podem cridar al constructor parametritzat només passant valors aquí

C++




#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;> }>

>

com emparellar els auriculars beats
>

Sortida

parameterized Constructor values-100 200>

Per tant, creant una instància just abans del punt i coma, podem crear la instància de classe.

Articles relacionats:

  • Herència múltiple en C++
  • Pure Virtual Destructor
  • Test de C++