C++ Zeiger auf eine Klasse

C++ Klassen und Objekte

Ein Zeiger auf eine C++-Klasse ähnelt einem Zeiger auf eine Struktur. Um auf Member eines Zeigers auf eine Klasse zuzugreifen, müssen Sie den Memberzugriffsoperator->verwenden, genau wie beim Zugriff auf einen Zeiger auf eine Struktur. Wie alle Zeiger müssen Sie den Zeiger initialisieren, bevor Sie ihn verwenden.

In C++ zeigt ein Zeiger auf eine Klasse auf ein Objekt einer Klasse. Ähnlich wie gewöhnliche Zeiger kann ein Zeiger auf eine Klasse verwendet werden, um auf die Membervariablen und Memberfunktionen des Objekts zuzugreifen.

Deklarieren und Initialisieren von Zeigern auf Klassen

Beispiel

#include <iostream>

class MyClass {
public:
    int data;

    void display() {
        std::cout << "Data: " << data << std::endl;
    }
};

int main() {
    // Ein Klassenobjekt erstellen
    MyClass obj;
    obj.data = 42;

    // Deklariere und initialisiere einen Zeiger auf die Klasse
    MyClass *ptr = &obj;

    // Zugriff auf Membervariablen über einen Zeiger
    std::cout << "Daten über: " << ptr->data << std::endl;

    // Eine Memberfunktion über einen Zeiger aufrufen
    ptr->display();

    return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:

Data via pointer: 42
Data: 42

Dynamische Speicherzuweisung

Ein Zeiger auf eine Klasse kann auch verwendet werden, um Speicher dynamisch zuzuweisen, um ein Objekt der Klasse zu erzeugen:

Beispiel

#include <iostream>

class MyClass {
public:
    int data;

    void display() {
        std::cout << "Data: " << data << std::endl;
    }
};

int main() {
    // Speicher dynamisch zuweisen, um ein Klassenobjekt zu erstellen
    MyClass *ptr = new MyClass;
    ptr->data = 42;

    // Eine Memberfunktion über einen Zeiger aufrufen
    ptr->display();

    // Dynamisch zugewiesenen Speicher freigeben
    delete ptr;

    return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:

Data: 42

Zeiger auf Klassen als Funktionsparameter

Ein Zeiger auf eine Klasse kann als Funktionsparameter übergeben werden:

Beispiel

#include <iostream>

class MyClass {
public:
    int data;

    void display() {
        std::cout << "Data: " << data << std::endl;
    }
};

// Die Funktion nimmt einen Zeiger auf die Klasse als Parameter entgegen
void processObject(MyClass *ptr) {
    ptr->display();
}

int main() {
    MyClass obj;
    obj.data = 42;

    // Den Zeiger auf die Klasse an die Funktion übergeben
    processObject(&obj);

    return 0;
}

Beispiel

Das folgende Beispiel hilft, das Konzept der Zeiger auf Klassen besser zu verstehen:

Beispiel

#include <iostream>
 
using namespace std;

class Box
{
   public:
      // Definition des Konstruktors
      Box(double l=2.0, double b=2.0, double h=2.0)
      {
         cout <<"Konstruktor aufgerufen." << endl;
         length = l;
         breadth = b;
         height = h;
      }
      double Volume()
      {
         return length * breadth * height;
      }
   private:
      double length;     // Länge einer Box
      double breadth;    // Breite einer Box
      double height;     // Höhe einer Box
};

int main(void)
{
   Box Box1(3.3, 1.2, 1.5);    // Box1 deklarieren
   Box Box2(8.5, 6.0, 2.0);    // Box2 deklarieren
   Box *ptrBox;                // Zeiger auf eine Klasse deklarieren.

   // Adresse des ersten Objekts speichern
   ptrBox = &Box1;

   // Versuchen Sie jetzt, den Memberzugriffsoperator zu verwenden, um auf Member zuzugreifen
   cout << "Volumen von Box1: " << ptrBox->Volume() << endl;

   // Speichern Sie die Adresse des zweiten Objekts
   ptrBox = &Box2;

   // Versuchen Sie jetzt, den Memberzugriffsoperator zu verwenden, um auf Member zuzugreifen
   cout << "Volumen von Box2: " << ptrBox->Volume() << endl;
 
   return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:

Constructor called.
Constructor called.
Volume of Box1: 5.94
Volume of Box2: 102

C++ Klassen und Objekte

Weitere Erweiterungen