logo

C++ klasser og objekter

Klasse i C++ er byggestenen, der fører til objektorienteret programmering. Det er en brugerdefineret datatype, som har sine egne datamedlemmer og medlemsfunktioner, som kan tilgås og bruges ved at oprette en forekomst af den pågældende klasse. En C++ klasse er som en plan for et objekt. For eksempel: Overvej klassen af Biler . Der kan være mange biler med forskellige navne og mærker, men de vil alle dele nogle fælles egenskaber, som de alle vil have 4 hjul , Hastighedsbegrænsning , Kilometerstand, osv. Så her er bil klassen, og hjul, hastighedsgrænser og kilometertal er deres egenskaber.

  • En klasse er en brugerdefineret datatype, der har datamedlemmer og medlemsfunktioner.
  • Datamedlemmer er datavariablerne og medlemsfunktioner er de funktioner, der bruges til at manipulere disse variable sammen, disse datamedlemmer og medlemsfunktioner definerer egenskaberne og adfærden for objekterne i en klasse.
  • I ovenstående eksempel på klasse Bil , vil datamedlemmet være hastighedsbegrænsning , kilometertal, osv, og medlemsfunktioner kan være bremser , stigende hastighed, etc.

An Objekt er en forekomst af en klasse. Når en klasse er defineret, allokeres der ingen hukommelse, men når den instansieres (dvs. et objekt oprettes), tildeles hukommelse.



Definere klasse og deklarere objekter

En klasse er defineret i C++ ved hjælp af nøgleordet klasse efterfulgt af navnet på klassen. Klassens krop er defineret inden for de krøllede parenteser og afsluttes med et semikolon i slutningen.

C++ klasse og objekt

Erklæring af objekter

Når en klasse er defineret, er kun specifikationen for objektet defineret; ingen hukommelse eller lager er allokeret. For at bruge de data og adgangsfunktioner, der er defineret i klassen, skal du oprette objekter.



Syntaks

ClassName ObjectName;>

Adgang til datamedlemmer og medlemsfunktioner : Klassens datamedlemmer og medlemsfunktioner kan tilgås ved hjælp af prik('.') operatoren med objektet. For eksempel hvis navnet på objektet er obj og du vil have adgang til medlemsfunktionen med navnet Print navn() så skal du skrive obj.printName() .

Adgang til datamedlemmer

De offentlige datamedlemmer tilgås også på samme måde, da de private datamedlemmer dog ikke har tilladelse til at blive tilgået direkte af objektet. Adgang til et datamedlem afhænger udelukkende af det pågældende datamedlems adgangskontrol. Denne adgangskontrol er givet af adgangsmodifikatorer i C++. Der er tre adgangsmodifikatorer: offentlige, private og beskyttede .

C++




mus og typer af mus



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

>

>

Produktion

Geekname is:Abhi>

Medlemsfunktioner i klasser

Der er 2 måder at definere en medlemsfunktion på:

  • Inde klasse definition
  • Udenfor klasse definition

For at definere en medlemsfunktion uden for klassedefinitionen skal vi bruge scope resolution:: operatør sammen med klassenavnet og funktionsnavnet.

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

np.log
>

>

Produktion

Geekname is: xyz Geek id is: 15>

Bemærk, at alle medlemsfunktioner, der er defineret i klassedefinitionen, er som standard inline , men du kan også lave en hvilken som helst ikke-klassefunktion inline ved at bruge nøgleordet inline med dem. Inline-funktioner er faktiske funktioner, som kopieres overalt under kompilering, ligesom pre-processor makro, så overhead af funktionskald reduceres.

Bemærk: Erklærer en vennefunktion er en måde at give privat adgang til en ikke-medlemsfunktion.

Konstruktører

Konstruktører er specielle klassemedlemmer, som kaldes af compileren, hver gang et objekt i den klasse instansieres. Konstruktører har samme navn som klassen og kan defineres inden for eller uden for klassedefinitionen. Der er 3 typer konstruktører:

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

>

>

Produktion

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

EN Kopi konstruktør opretter et nyt objekt, som er en nøjagtig kopi af det eksisterende objekt. Compileren giver en standard Copy Constructor til alle klasserne.

Syntaks:

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

ødelæggere

Destroyer er en anden speciel medlemsfunktion, der kaldes af compileren, når objektets omfang slutter.

C++


læs csv-filen i java



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

>

>

Produktion

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>

Interessant fakta (sjældent kendt koncept)

Hvorfor giver vi semikolon i slutningen af ​​klassen?

Mange mennesker vil måske sige, at det er en grundlæggende syntaks, og vi bør give et semikolon i slutningen af ​​klassen, som dens regel definerer i cpp. Men hovedårsagen til, at semikolon er der i slutningen af ​​klassen, er compilertjek, hvis brugeren forsøger at oprette en forekomst af klassen i slutningen af ​​den.

Ja ligesom struktur og forening kan vi også oprette instansen af ​​en klasse i slutningen lige før semikolon. Som et resultat, når eksekveringen når til den linje, opretter den en klasse og allokerer hukommelse til din instans.

C++




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

java server sider
>

>

Produktion

Default Constructor>

Vi kan se, at vi har oprettet en klasseforekomst af Demo med navnet forekomst, som et resultat, kaldes det output, vi kan se, er Default Constructor.

På samme måde kan vi også kalde den parameteriserede konstruktør blot ved at sende værdier her

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

java understreng indeholder

>

>

Produktion

parameterized Constructor values-100 200>

Så ved at oprette en instans lige før semikolon, kan vi oprette klassens instans.

Relaterede artikler:

  • Multipel arv i C++
  • Ren Virtual Destroyer
  • C++ Quiz