logo

C++-Klassen und -Objekte

Klasse in C++ ist der Baustein, der zur objektorientierten Programmierung führt. Es handelt sich um einen benutzerdefinierten Datentyp, der seine eigenen Datenelemente und Elementfunktionen enthält, auf die durch Erstellen einer Instanz dieser Klasse zugegriffen und diese verwendet werden können. Eine C++-Klasse ist wie eine Blaupause für ein Objekt. Zum Beispiel: Betrachten Sie die Klasse von Autos . Es mag viele Autos mit unterschiedlichen Namen und Marken geben, aber alle haben einige gemeinsame Eigenschaften, die alle haben 4 Räder , Geschwindigkeitsbegrenzung , Kilometerstand, usw. Hier ist also „Auto“ die Klasse und Räder, Geschwindigkeitsbegrenzungen und Kilometerstand sind ihre Eigenschaften.

  • Eine Klasse ist ein benutzerdefinierter Datentyp, der über Datenelemente und Elementfunktionen verfügt.
  • Datenelemente sind die Datenvariablen und Elementfunktionen sind die Funktionen, mit denen diese Variablen gemeinsam manipuliert werden. Diese Datenelemente und Elementfunktionen definieren die Eigenschaften und das Verhalten der Objekte in einer Klasse.
  • Im obigen Beispiel der Klasse Auto , das Datenelement wird sein Geschwindigkeitsbegrenzung , Kilometerstand, usw. und Mitgliedsfunktionen können sein Bremsen betätigen , zunehmende Geschwindigkeit, usw.

Ein Objekt ist eine Instanz einer Klasse. Wenn eine Klasse definiert ist, wird kein Speicher zugewiesen, aber wenn sie instanziiert wird (d. h. ein Objekt erstellt wird), wird Speicher zugewiesen.



Klasse definieren und Objekte deklarieren

Eine Klasse wird in C++ mit dem Schlüsselwort class gefolgt vom Namen der Klasse definiert. Der Hauptteil der Klasse wird innerhalb der geschweiften Klammern definiert und am Ende durch ein Semikolon abgeschlossen.

C++-Klasse und -Objekt

Objekte deklarieren

Wenn eine Klasse definiert wird, wird nur die Spezifikation für das Objekt definiert; Es wird kein Speicher zugewiesen. Um die in der Klasse definierten Daten- und Zugriffsfunktionen nutzen zu können, müssen Sie Objekte erstellen.



Syntax

ClassName ObjectName;>

Zugreifen auf Datenelemente und Elementfunktionen : Auf die Datenelemente und Elementfunktionen der Klasse kann mithilfe des Punktoperators („.“) mit dem Objekt zugegriffen werden. Wenn der Name des Objekts beispielsweise lautet obj und Sie möchten mit dem Namen auf die Memberfunktion zugreifen printName() dann musst du schreiben obj.printName() .

Zugreifen auf Datenelemente

Auf die öffentlichen Datenelemente wird ebenfalls auf die gleiche Weise zugegriffen, allerdings darf das Objekt nicht direkt auf die privaten Datenelemente zugreifen. Der Zugriff auf ein Datenelement hängt ausschließlich von der Zugriffskontrolle dieses Datenelements ab. Diese Zugriffskontrolle wird durch Access-Modifikatoren in C++ bereitgestellt. Es gibt drei Zugriffsmodifikatoren: öffentlich, privat und geschützt .

C++




sonu nigam



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

>

>

Ausgabe

Geekname is:Abhi>

Memberfunktionen in Klassen

Es gibt zwei Möglichkeiten, eine Mitgliedsfunktion zu definieren:

  • Innerhalb der Klassendefinition
  • Außerhalb der Klassendefinition

Um eine Mitgliedsfunktion außerhalb der Klassendefinition zu definieren, müssen wir die verwenden Bereichsauflösung:: Operator zusammen mit dem Klassennamen und dem Funktionsnamen.

C++


String-Format Java



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

>

>

Ausgabe

Geekname is: xyz Geek id is: 15>

Beachten Sie, dass alle in der Klassendefinition definierten Mitgliedsfunktionen standardmäßig sind im Einklang , aber Sie können auch jede Funktion, die keine Klasse ist, inline machen, indem Sie das Schlüsselwort inline mit ihnen verwenden. Inline-Funktionen sind tatsächliche Funktionen, die während der Kompilierung überall hin kopiert werden, z. B. Präprozessor-Makros, sodass der Overhead von Funktionsaufrufen reduziert wird.

Notiz: Erklärung eines Freundfunktion ist eine Möglichkeit, einer Nicht-Mitgliedsfunktion privaten Zugriff zu gewähren.

Konstrukteure

Konstrukteure sind spezielle Klassenmitglieder, die vom Compiler jedes Mal aufgerufen werden, wenn ein Objekt dieser Klasse instanziiert wird. Konstruktoren haben denselben Namen wie die Klasse und können innerhalb oder außerhalb der Klassendefinition definiert werden. Es gibt 3 Arten von Konstruktoren:

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

>

>

Ausgabe

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

A Konstruktor kopieren erstellt ein neues Objekt, das eine exakte Kopie des vorhandenen Objekts ist. Der Compiler stellt allen Klassen einen Standard-Kopierkonstruktor zur Verfügung.

Syntax:

Pandas und Numpy
class-name (class-name &){}>

Zerstörer

Zerstörer ist eine weitere spezielle Memberfunktion, die vom Compiler aufgerufen wird, wenn der Gültigkeitsbereich des Objekts endet.

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>

>

>

Ausgabe

Namenskonvention für Java
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>

Interessante Tatsache (seltenes bekanntes Konzept)

Warum geben wir am Ende des Unterrichts Semikolons ein?

Viele Leute könnten sagen, dass es sich um eine grundlegende Syntax handelt und wir am Ende der Klasse ein Semikolon angeben sollten, wie es in der Regel in cpp definiert ist. Der Hauptgrund dafür, dass am Ende der Klasse Semikolons stehen, liegt jedoch darin, dass der Compiler prüft, ob der Benutzer versucht, am Ende der Klasse eine Instanz der Klasse zu erstellen.

Ja, genau wie Struktur und Union können wir auch die Instanz einer Klasse am Ende direkt vor dem Semikolon erstellen. Sobald die Ausführung diese Zeile erreicht, erstellt sie daher eine Klasse und weist Ihrer Instanz Speicher zu.

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

>

>

Ausgabe

Default Constructor>

Wir können sehen, dass wir eine Klasseninstanz von Demo mit dem Namen „Instanz“ erstellt haben. Als Ergebnis sehen wir die Ausgabe, die als „Standardkonstruktor“ bezeichnet wird.

Ebenso können wir den parametrisierten Konstruktor auch aufrufen, indem wir hier einfach Werte übergeben

r in der C-Programmierung

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

>

>

Ausgabe

parameterized Constructor values-100 200>

Indem wir also direkt vor dem Semikolon eine Instanz erstellen, können wir die Instanz der Klasse erstellen.

In Verbindung stehende Artikel:

  • Mehrfachvererbung in C++
  • Reiner virtueller Zerstörer
  • C++-Quiz