Konstante Memberfunktionen sind Funktionen, denen die Berechtigung zum Ändern der Werte der Datenmember ihrer Klasse verweigert wird. Um eine Mitgliedsfunktion konstant zu machen, wird das Schlüsselwort const an den Funktionsprototyp und auch an den Funktionsdefinitionsheader angehängt.
Wie Mitgliedsfunktionen und Mitgliedsfunktionsargumente können auch die Objekte einer Klasse als const deklariert werden. Ein als const deklariertes Objekt kann nicht geändert werden und kann daher nur const-Memberfunktionen aufrufen, da diese Funktionen sicherstellen, dass das Objekt nicht geändert wird. Ein const-Objekt kann erstellt werden, indem der Objektdeklaration das Schlüsselwort const vorangestellt wird. Jeder Versuch, das Datenelement von const-Objekten zu ändern, führt zu einem Fehler bei der Kompilierung.
Syntax
Die const-Memberfunktion kann auf drei Arten definiert werden:
1. Zur Funktionsdeklaration innerhalb einer Klasse.
return_type function_name () const ;>
Beispiel:
int get_data() const;>
2. Zur Funktionsdefinition innerhalb der Klassendeklaration.
return_type function_name () const { //function body }> Beispiel:
int get_data() const { //function body }> 3. Zur Funktionsdefinition außerhalb der Klasse.
return_type class_name::function_name () const { //function body }> Beispiel:
int Demo :: get_data() const { }> Wichtige Punkte
- Wenn eine Funktion als const deklariert ist, kann sie für jeden Objekttyp aufgerufen werden, sowohl für const-Objekte als auch für nicht-const-Objekte.
- Immer wenn ein Objekt als const deklariert wird, muss es zum Zeitpunkt der Deklaration initialisiert werden. Allerdings ist die Objektinitialisierung bei der Deklaration nur mit Hilfe von Konstruktoren möglich.
- Eine Funktion wird zu const, wenn das Schlüsselwort const in der Deklaration der Funktion verwendet wird. Die Idee von const-Funktionen besteht nicht darin, dass sie das Objekt ändern können, für das sie aufgerufen werden.
- Es wird empfohlen, so viele Funktionen wie möglich konstant zu halten, um versehentliche Änderungen an Objekten zu vermeiden.
Beispiele für Const-Memberfunktionen
Beispiel 1
Das folgende C++-Programm zeigt, dass Datenelemente in einer Elementfunktion aktualisiert werden können, die nicht konstant ist.
C++
Befehl im Knoten js
// C++ program to demonstrate that data members can be> // updated in a member function that is not constant.> #include> using> namespace> std;> class> Demo {> >int> x;> public>:> >void> set_data(>int> a) { x = a; }> >// non const member function> >// data can be updated> >int> get_data()> >{> >++x;> >return> x;> >}> };> main()> {> >Demo d;> >d.set_data(10);> >cout << d.get_data();> >return> 0;> }> |
>
>Ausgabe
11>
Beispiel 2
Das folgende C++-Programm zeigt, dass Daten in einer Constant-Member-Funktion nicht aktualisiert werden können.
C++
// C++ program to demonstrate that data cannot be updated> // in a Constant member function> #include> using> namespace> std;> class> Demo {> >int> x;> public>:> >void> set_data(>int> a) { x = a; }> >// constant member function> >int> get_data()>const> >{> >// Error while attempting to modify the data> >// member> >++x;> >return> x;> >}> };> main()> {> >Demo d;> >d.set_data(10);> >cout << endl << d.get_data();> >return> 0;> }> |
String-Teilstring
>
>
Ausgabe
./Solution.cpp: In member function 'int Demo::get_data() const': ./Solution.cpp:17:11: error: increment of member 'Demo::x' in read-only object ++x; ^>
Beispiel 3
Der folgende C++-Code demonstriert, wie konstante Mitgliedsfunktionen außerhalb der Klassendefinition definiert werden, und demonstriert die Verwendung einer konstanten Mitgliedsfunktion zum Festlegen und Abrufen des Werts einer privaten Mitgliedsvariablen.
C++
// Constant member function defined outside the class> #include> using> namespace> std;> class> Demo {> >int> x;> public>:> >void> set_data(>int>);> >// const member function> >int> get_data()>const>;> };> // Function definition for setting the value of x.> void> Demo::set_data(>int> a) { x = a; }> // Function definition for retrieving the value of x (const> // member function).> int> Demo::get_data()>const> {>return> x; }> main()> {> >Demo d;> >// Set the value of x to 10 using the non-const member> >// function.> >d.set_data(10);> >// Print the value of x using the const member function.> >cout << d.get_data();> >return> 0;> }> |
Quicksort-Algorithmus
>
>Ausgabe
10>
Beispiel 4
Das folgende C++-Programm zeigt, dass konstante Funktionen von nicht konstanten Objekten aufgerufen werden können.
C++
// C++ program to demonstrate that const functions can be> // called by non const objects> #include> using> namespace> std;> class> Test {> >int> value;> public>:> >Test(>int> v = 0) { value = v; }> >// const member function> >int> getValue()>const> {>return> value; }> };> int> main()> {> >// non const object> >Test t(20);> >cout << t.getValue();> >return> 0;> }> |
>
>Ausgabe
20>
Wenn eine Funktion als const deklariert ist, kann sie für jeden Objekttyp aufgerufen werden. Nicht-konstante Funktionen können nur von nicht-konstanten Objekten aufgerufen werden.
Das folgende Programm weist beispielsweise Compilerfehler auf.
C++
String-zu-Int-Konvertierung in Java
// C++ program that demonstrate that non-const functions can> // not be called by const objects> #include> using> namespace> std;> class> Test {> >int> value;> public>:> >Test(>int> v = 0) { value = v; }> >// non const member function> >int> getValue() {>return> value; }> };> int> main()> {> >// const object> >const> Test t;> >cout << t.getValue();> >return> 0;> }> |
>
>
Ausgabe
./d869c7ba-f199-4a67-9449-3936b5db4c5b.cpp: In function 'int main()': ./d869c7ba-f199-4a67-9449-3936b5db4c5b.cpp:14:24: error: passing 'const Test' as 'this' argument of 'int Test::getValue()' discards qualifiers [-fpermissive] cout << t.getValue();>
Schauen wir uns ein anderes Beispiel an:
C++
// Demonstration of constant object,> // show that constant object can only> // call const member function> #include> using> namespace> std;> class> Demo {> >int> value;> public>:> >Demo(>int> v = 0) { value = v; }> >void> showMessage()> >{> >cout <<>'Hello World We are Tushar, '> >'Ramswarup, Nilesh and Subhash Inside'> >' showMessage() Function'> ><< endl;> >}> >// const member function> >void> display()>const> >{> >cout <<>'Hello world I'm Rancho '> >'Baba Inside display() Function'> ><< endl;> >}> };> int> main()> {> >// Constant object are initialised at the time of> >// declaration using constructor> >const> Demo d1;> >// d1.showMessage();Error occurred if uncomment.> >d1.display();> >return> (0);> }> |
Java-Zeichen in Zeichenfolge umwandeln
>
>Ausgabe
Hello world I'm Rancho Baba Inside display() Function>
FAQs zu Const-Memberfunktionen
Q1. Können konstante Objekte einer Klasse nicht konstante Mitgliedsfunktionen aufrufen?
Antwort:
Nein, ein als const deklariertes Objekt kann nicht geändert werden und kann daher nur const-Memberfunktionen aufrufen, da diese Funktionen sicherstellen, dass das Objekt nicht geändert wird.
Q2. Können nicht konstante Objekte einer Klasse die konstante Memberfunktion aufrufen?
Antwort:
Wenn eine Funktion als const deklariert ist, kann sie für jeden Objekttyp aufgerufen werden.