Konstante Member-Funktion in C++

Muhammad Husnain 12 Oktober 2023
Konstante Member-Funktion in C++

In diesem Artikel geht es um die Verwendung konstanter Elementfunktionen in C++. Wir verwenden das Schlüsselwort const, um jedes Objekt, jede Variable oder Funktion konstant zu machen.

Wie jede andere Variable oder jedes Objekt können auch Member-Funktionen einer Klasse const gemacht werden. Bestimmte Regeln und Vorschriften für solche Funktionen werden in diesem Artikel besprochen.

Const Member-Funktion in C++

Const ist ein Typqualifizierer, ein Schlüsselwort, das mit einem Datentyp verwendet wird, der angibt, dass die Daten schreibgeschützt sind. Während es zum Deklarieren von Konstanten verwendet werden kann, unterscheidet sich Const von vergleichbaren Konstruktionen in anderen Sprachen darin, dass es Teil des Typs ist und daher ein kompliziertes Verhalten zeigt, wenn es mit Zeigern, Referenzen, zusammengesetzten Datentypen und Typprüfungen gepaart wird.

Const Memberfunktionen werden im Programm als Konstanten deklariert. Das Objekt, auf das diese Funktionen verweisen, kann nicht geändert werden.

Es empfiehlt sich, das Schlüsselwort const zu verwenden, um unbeabsichtigte Änderungen am Objekt zu vermeiden. Jedes Objekt kann eine const-Elementfunktion aufrufen.

Nur nicht konstante Objekte können nicht konstante Funktionen aufrufen. Wenn wir das Objekt einer Klasse als const-Objekt deklarieren, kann es nur const-Member-Funktionen aufrufen, während ein non-const-Objekt alle Member-Funktionen const oder non-const aufrufen kann.

Die Syntax zum Erstellen einer const-Funktion lautet:

return -datatype function_name() const;

Betrachten Sie das folgende Beispiel.

#include <iostream>
using namespace std;
class Data {
  int val;

 public:
  Data(int a = 0) { val = a; }
  int getValue() const { return val; }
};
int main() {
  Data d(10);
  cout << d.getValue();
  return 0;
}

In diesem Codesegment haben wir eine Klasse Data mit einem Konstruktor und einer Member-Funktion getValue() deklariert. Diese Funktion ist eine const-Funktion, sodass sie den Wert des Datenelements nicht ändern kann.

Wenn er die Daten eines Datenmembers ändert, generiert der Compiler einen Fehler. Der this-Zeiger in dieser Funktion ist ein Zeiger auf ein const-Objekt, das einer const-Elementfunktion bereitgestellt wird.

Dadurch wird sichergestellt, dass der Zeiger nicht zum Ändern der Datenelemente des Objekts verwendet werden kann. Jeder Versuch, ein Datenelement eines Objekts zu ändern, das als konstante Methode bezeichnet wird, und jeder Versuch, eine nicht konstante Elementfunktion für dieses Objekt aufzurufen, führt zu einem Syntaxfehler.

Bei einer konstanten Elementfunktion kann eine nicht konstante Version überladen werden. Der Compiler bestimmt, welche Version verwendet werden soll, je nachdem, ob sie von einem const-Objekt oder einem non-const-Objekt aufgerufen wird.

Const-Konstruktoren und -Destruktoren können niemals deklariert werden. Sie können ein Datenelement immer ändern, auch wenn das Objekt selbst konstant ist.

Statische Elementfunktionen können nicht als const definiert werden. Das Schlüsselwort const wirkt sich auf die Pointer-Referenz this aus, die einer Member-Funktion bereitgestellt wird, aber statische Member-Funktionen haben keine, weil sie ohne ein Objekt aufgerufen werden können.

Es ist auch möglich, die Einschränkung der Funktion const zu lockern, die verhindert, dass die Funktion in eine beliebige Klassenvariable schreibt. Diese Klassenvariablen sind mit dem Schlüsselwort mutable gekennzeichnet, damit sie auch dann beschreibbar sind, wenn die Funktion als const-Funktion markiert ist.

Wenn eine Klassenvariable als mutable markiert ist und eine const-Funktion darauf schreibt, wird der Code korrekt kompiliert und die Variable kann geändert werden (C++11).

Das Ändern der Platzierung des Schlüsselworts const in einer C++-Anweisung hat eine völlig andere Semantik, wie es typisch ist, wenn mit dem Schlüsselwort const gearbeitet wird. Die vorstehende Verwendung von const gilt nur, wenn const am Ende der Funktionsdeklaration nach den Klammern steht.

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn