logo

C++ klasser och objekt

Klass i C++ är byggstenen som leder till Objektorienterad programmering. Det är en användardefinierad datatyp, som har sina egna datamedlemmar och medlemsfunktioner, som kan nås och användas genom att skapa en instans av den klassen. En C++-klass är som en ritning för ett objekt. Till exempel: Tänk på klassen av Bilar . Det kan finnas många bilar med olika namn och märken men alla kommer att dela några gemensamma egenskaper som alla kommer att ha 4 hjul , Hastighetsbegränsning , Körsträcka, etc. Så här är bil klassen, och hjul, hastighetsbegränsningar och körsträcka är deras egenskaper.

  • En klass är en användardefinierad datatyp som har datamedlemmar och medlemsfunktioner.
  • Datamedlemmar är datavariablerna och medlemsfunktioner är de funktioner som används för att manipulera dessa variabler tillsammans, dessa datamedlemmar och medlemsfunktioner definierar egenskaperna och beteendet för objekten i en klass.
  • I exemplet ovan av klass Bil , kommer datamedlemmen att vara hastighetsbegränsning , miltal, etc, och medlemsfunktioner kan vara bromsar , öka hastigheten, etc.

En Objekt är en instans av en klass. När en klass definieras tilldelas inget minne men när det instansieras (dvs ett objekt skapas) tilldelas minne.



Definiera klass och deklarera objekt

En klass definieras i C++ med nyckelordet klass följt av namnet på klassen. Klassens kropp definieras inom de krulliga parenteserna och avslutas med ett semikolon i slutet.

C++ klass och objekt

Deklarera objekt

När en klass definieras, definieras endast specifikationen för objektet; inget minne eller lagring är allokerat. För att använda data och åtkomstfunktioner definierade i klassen måste du skapa objekt.



Syntax

ClassName ObjectName;>

Tillgång till datamedlemmar och medlemsfunktioner : Klassens datamedlemmar och medlemsfunktioner kan nås med hjälp av dot(‘.’) operatorn med objektet. Till exempel om namnet på objektet är obj och du vill komma åt medlemsfunktionen med namnet Skriv namn() då får du skriva obj.printName() .

Tillgång till datamedlemmar

De offentliga datamedlemmarna nås också på samma sätt, men de privata datamedlemmarna tillåts inte nås direkt av objektet. Tillgång till en datamedlem beror enbart på åtkomstkontrollen för den datamedlemmen. Denna åtkomstkontroll ges av åtkomstmodifierare i C++. Det finns tre åtkomstmodifierare: offentliga, privata och skyddade .

C++




maskininlärning och typer



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

Det finns två sätt att definiera en medlemsfunktion:

  • Inuti klassdefinition
  • Utanför klass definition

För att definiera en medlemsfunktion utanför klassdefinitionen måste vi använda scope resolution:: operatör tillsammans med klassnamn och funktionsnamn.

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

>

>

Produktion

Geekname is: xyz Geek id is: 15>

Observera att alla medlemsfunktioner som definieras i klassdefinitionen är som standard i kö , men du kan också göra alla icke-klassfunktioner inline genom att använda nyckelordet inline med dem. Inline-funktioner är faktiska funktioner, som kopieras överallt under kompileringen, som förbehandlare makro, så omkostnaden för funktionsanrop minskar.

Notera: Deklarerar a vänfunktion är ett sätt att ge privat tillgång till en funktion som inte är medlem.

Konstruktörer

Konstruktörer är specialklassmedlemmar som anropas av kompilatorn varje gång ett objekt i den klassen instansieras. Konstruktörer har samma namn som klassen och kan definieras inom eller utanför klassdefinitionen. Det finns 3 typer av konstruktörer:

java int till sträng

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

java tolka sträng till int
Default Constructor called Geek id is: -1 Parameterized Constructor called Geek id is: 21>

A Kopiera konstruktör skapar ett nytt objekt, som är en exakt kopia av det befintliga objektet. Kompilatorn tillhandahåller en standardkopieringskonstruktör till alla klasser.

Syntax:

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

jagare

Jagare är en annan speciell medlemsfunktion som anropas av kompilatorn när objektets scope slutar.

C++




hur man inaktiverar utvecklarläget
// 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>

Intressant fakta (sällsynt känt koncept)

Varför ger vi semikolon i slutet av lektionen?

Många kanske säger att det är en grundläggande syntax och vi borde ge ett semikolon i slutet av klassen som dess regel definierar i cpp. Men den främsta anledningen till att semikolon finns i slutet av klassen är kompilatorkontroller om användaren försöker skapa en instans av klassen i slutet av den.

Ja precis som struktur och union kan vi också skapa instansen av en klass i slutet strax före semikolon. Som ett resultat, när exekveringen når den raden, skapar den en klass och allokerar minne till 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;> }>

>

vända strängen i java
>

Produktion

Default Constructor>

Vi kan se att vi har skapat en klassinstans av Demo med namnet instans, som ett resultat anropas utgången som vi kan se är Default Constructor.

På samma sätt kan vi också anropa den parametriserade konstruktorn bara genom att skicka värden här

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

>

>

Produktion

parameterized Constructor values-100 200>

Så genom att skapa en instans precis före semikolon kan vi skapa instansen av klassen.

Relaterade artiklar:

  • Multipelt arv i C++
  • Ren virtuell förstörare
  • C++ frågesport