C++ Zeiger auf eine Klasse
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
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
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
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
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: 102Weitere Erweiterungen