const-Exemplare in C++ (const-Exemplare in C++), Lektion, Seite 724162
https://www.purl.org/stefan_ram/pub/const_exemplare_c++ (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C++-Kurs

const-Exemplare in C++ 

Ein mit »const« deklariertes Exemplar einer Klasse (Objekt einer Klasse) ist konstant. Es kann nach der Initialisierung nicht verändert werden.

Funktionen konstanter Exemplare

Im folgenden Programm wird durch »s.find( 'b' )« die Position des »b« in »abc« ausgedrückt und dann mit »s.push_back( 'd' )« noch ein »d« an »abc« angefügt.

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main()
{ ::std::string s = "abc";
::std::cout << s.find( 'b' ) << '\n';
s.push_back( 'd' );
::std::cout << s << '\n'; }

Protokoll

1

abcd

Im folgenden Programm wurde das Objekt »s« als »const« deklariert. Danach ist der Aufruf »s.push_back( 'd' );« nicht mehr erlaubt.

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main()
{ ::std::string const s = "abc";
::std::cout << s.find( 'b' ) << '\n';
s.push_back( 'd' );
::std::cout << s << '\n'; }

Protokoll (frei übersetzt)
Fehler: const string ist kein zulaessiges Zielobjekt bei 'push_back'.

Die folgende Dokumentation zeigt, daß »find« eine const-Funktion ist, während »push_back« keine  const-Funktion ist.

Dokumentation (vereinfacht, gekürzter Auszug)

namespace std
{ using string = basic_string< char >;

template< class charT >
class basic_string
{ size_type find( charT c ) const;
void push_back( charT c ); }}

Nur die const-Funktionen eines const-Objekts dürfen aufgerufen werden. Das sind Funktionen, die das Objekt nicht verändern können.

Felder konstanter Exemplare

In dem folgenden Programm wird etwas in die Felder eines Objekts geschrieben.

main.cpp

#include <initializer_list>
#include <ostream>
#include <iostream>
#include <utility> /* ::std::pair */

int main()
{ auto p { ::std::make_pair( 3, 4 ) };

p.first = 7;
p.second = 2;

::std::cout << p.first << '\n';
::std::cout << p.second << '\n'; }

Protokoll
7
2

Das folgende Programm zeigt, daß Felder konstanter Objekte nicht verändert werden dürfen.

main.cpp

#include <initializer_list>
#include <ostream>
#include <iostream>
#include <utility> /* ::std::pair */

int main()
{ auto const p { ::std::make_pair( 3, 4 ) };

p.first = 7;
p.second = 2;

::std::cout << p.first << '\n';
::std::cout << p.second << '\n'; }

Protokoll
Fehler: Veraenderungen eines Feldes eines konstanten Objekts sind nicht zulaessig.

 

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724162 stefan_ram:724162 const-Exemplare in C++ Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724162, slrprddef724162, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/const_exemplare_c++