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