Verwendung und Initialisierung konstanter Datenelemente
Wir kennen das Konzept der Konstante bereits, wenn wir die C-Sprache lernen. Die sogenannte „Konstante“ oder eine durch „Konstante“ geänderte Variable kann beispielsweise nicht geändert werden. Dieser Wert kann nicht geändert werden.
Nun, in C++ gibt es auch das Konzept der Konstante. Der zusätzliche Unterschied besteht darin, dass const nicht nur allgemeine Variablen in konstante Variablen umwandelt, sondern auch dazu verwendet werden kann, ein Objekt zu ändern und in ein konstantes Objekt umzuwandeln. Und die Datenelemente und Elementfunktionen, die die Klasse ändern können, werden als konstante Datenelemente bzw. konstante Elementfunktionen der Klasse bezeichnet.
Als Nächstes erklären wir nacheinander konstante Datenelemente , konstante Elementfunktionen und konstante Objekte .
1. Konstante Datenelemente:
Die Verwendung konstanter Datenelemente ist dieselbe wie in der C-Sprache, mit der Ausnahme, dass dieser Teil der Daten in der Klasse erscheint und das verwendete Format wie folgt ist:
Datentyp const Datenelementname;
oder
const-Datentyp-Datenelementname;
Durch const geänderte Mitglieder müssen initialisiert werden und können nicht geändert werden. Die Initialisierungsmethode wird in der Initialisierungsliste des Konstruktors der Klasse ausgeführt.
Darüber hinaus gibt es einen Sonderfall: Wenn das Mitglied ein statischer Typ ist, dh ein statisches Konstantendatenmitglied , muss die Initialisierung außerhalb der Klasse erfolgen, da es sich um ein statisches Attribut handelt. Lassen Sie uns die gerade erwähnte Situation zur Veranschaulichung in den Code einfügen:
#include<iostream>usingnamespacestd;classClock{private:constinth;//Ändern Sie h als konstantes Typmitglied constintm;//Ändern Sie m als konstantes Typmitglied intconsts;//Die beiden oben genannten Verwendungen können verwendet werden staticconstintx;public:Clock (inta, intb,intc):h(a),m(b),s(c){cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<:<<m<< :<< s<<endl;return0;}intGetX(){cout<<x<<endl;return0;}};constintClock::x=99;intmain(){ClockA(12,10,30);A. ShowTime() ;A.GetX();return0;}
Führen Sie die Demo-Ergebnisse aus:
Bitte beachten Sie die vier konstanten Datenelemente in der Klasse. Da X ein statischer Typ ist, muss er außerhalb der Klasse initialisiert werden.
2. Konstante Objekte:
In C++ kann ein Objekt als const-Typ, also als konstantes Objekt, deklariert werden. Nach dieser Deklaration kann das Objekt während des gesamten Lebenszyklus nicht mehr geändert werden, daher muss es beim Definieren vom Konstruktor initialisiert werden. Das Definitionsformat ist wie folgt:
Geben Sie const Objektname ein;
oder
Objektname vom Typ const;
Es ist zu beachten, dass konstante Objekte nicht auf Nicht-Mitgliedsfunktionen in der Klasse zugreifen können, sondern nur auf konstante Mitgliedsfunktionen (Teil 3 unten). Schauen wir uns unten ein Beispiel an:
#include<iostream>usingnamespacestd;classClock{private:constinth;//Ändern Sie h, um ein konstantes Typmitglied zu sein constintm;//Ändern Sie m, um ein konstantes Typmitglied zu sein intconsts;//Die beiden oben genannten Verwendungen sind möglich intx;public: Clock(inta, intb,intc):h(a),m(b),s(c){x=99;cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<: <<m< <:<<s<<endl;return0;}intGetX()const{//x=99;cout<<x<<endl;return0;}};intmain(){constClockA(12,10, 30);constClockB (14,20,50);//A=B;//A.ShowTime();A.GetX();return0;}
Beachten Sie die Anweisungen in den Zeilen 39 und 40 im Code. Bei der normalen Kompilierung wird ein Fehler gemeldet, da A ein konstantes Objekt ist und kein Wert zugewiesen werden kann und die ShowTime-Funktion keine Mitgliedsfunktion ist. Die 41 Codezeilen können ausgeführt werden, und der Effekt ist wie folgt:
3. Konstante Elementfunktionen:
In ähnlicher Weise wird eine Mitgliedsfunktion in einer Klasse, nachdem sie durch const geändert wurde, zu einer konstanten Mitgliedsfunktion. Die Definition einer konstanten Mitgliedsfunktion lautet wie folgt:
Rückgabetyp Funktionsname (Parameterlistenspalte) const;
Darauf müssen Sie achten:
(1) Die Definition und Deklaration konstanter Elementfunktionen muss const enthalten;
(2) Konstante Mitgliedsfunktionen können nur konstante Mitgliedsfunktionen aufrufen, aber keine außergewöhnlichen Mitgliedsfunktionen aufrufen und können nicht auf außerordentliche Mitgliedsvariablen zugreifen, diese jedoch nicht ändern.
Zum Beispiel der folgende Code:
#include<iostream>usingnamespacestd;classClock{private:constinth;//Ändern Sie h, um ein konstantes Typmitglied zu sein constintm;//Ändern Sie m, um ein konstantes Typmitglied zu sein intconsts;//Die beiden oben genannten Verwendungen sind möglich intx;public: Clock(inta, intb,intc):h(a),m(b),s(c){x=99;cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<: <<m< <:<<s<<endl;return0;}intGetX()const{//x=99;cout<<x<<endl;return0;}};intmain(){constClockA(12,10, 30);A .GetX();return0;}
Achten Sie auf die 29. und 30. Codezeile. Wenn Sie die 29. Codezeile verwenden, wird ein Kompilierungsfehler gemeldet. Der tatsächliche Ausführungseffekt ist wie folgt.
Die Einführung des Konstantenkonzepts in C++ verdeutlicht die Grenzen zwischen Änderung und Unveränderlichkeit jedes Objekts im Programm und verbessert außerdem die Sicherheit und Steuerbarkeit von C++-Programmen.
Bitte probieren Sie es selbst aus.