Einführung in Konstanten in C++ im Rahmen der Lehre des Programmierens. (C++, const, Konstante, Konstanten), Lektion, Seite 721127
http://www.purl.org/stefan_ram/pub/c++_konstante_de ist die kanonische URI dieser Seite.
Startseite

Konstanten in C++

Ein Programmierer kann in C++ Namen  definieren. Ein Name muß mit einem Buchstaben beginnen, dem Ziffern oder Grundstriche folgen, und er darf kein Schlüsselwort sein.

Benannte Werte

Wird der Wert eines Bezeichner innerhalb seines Gültigkeitsbereiches unveränderbar festgelegt, so wird der Bezeichner auch als Konstante  bezeichnet.

Konstante [UML, static structure diagram]
.-----------.              .----------. 
| Konstante | 1 | Name | 
| |--------------| | 
| | | | 
| | '----------' 
| | .----------. 
| | * 1 | Datentyp | 
| |--------------| | 
| | | | 
| | '----------' 
| | .----------. 
| | * 1 | Wert | 
| |--------------| | 
| | | | 
'-----------' '----------'

In C++  können Werte  benannt werden. In dem folgenden Programm wird der Wert "12" vom Datentyp "int" durch den Namen "zwoelf" benannt.

Der erste Gebrauch des Namens "zwoelf" in dem folgenden Programm ist die Definition.

Die Definition stellt die Verbindung zwischen dem Namen, dem Typ und dem Wert dar.

Der zweite Gebrauch des Namens "zwoelf" ist die Verwendung. Bei der Verwendung steht der Name für den Wert, als den er definiert wurde.

constant.cpp
#include <iostream> 
#include <ostream>
int main() 
{ const int zwoelf( 12 ); 
std::cout << zwoelf << '\n'; }

std::cout
12

Konstante [UML, static structure diagram]
.-----------.              .----------------. 
| Konstante | 1 | zwoelf : Name | 
| |--------------| -------------- | 
| | | | 
| | '----------------' 
| | .----------------. 
| | * 1 | int : Datentyp | 
| |--------------| -------------- | 
| | | | 
| | '----------------' 
| | .----------------. 
| | * 1 | 12 : Wert | 
| |--------------| --------- | 
| | | | 
'-----------' '----------------'

Der Name selber ist egal und kann verändert werden, ohne daß dies die Funktion des Programmes verändert. Ein irreführender Name, wie in dem folgenden Beispiel, sollte natürlich vermieden werden. Doch für den Computer ist der Name ohne Bedeutung: Er verknüpft nur die verschiedenen Stellen seiner Verwendung.

Bei der Ersetzung eines Namens durch einen anderen, muß dieser überall ersetzt werden, wenn sich die Bedeutung nicht ändern soll.

constant.cpp
#include <iostream> 
#include <ostream>
int main() 
{ const int zehn( 12 ); 
std::cout << zehn << '\n'; }

std::cout
12

Das folgende Programm errechnet aus einem benannten Wert "300", der eine Temperatur in Kelvin darstellen soll, einen anderen benannten Wert: die entsprechende Celsius-Temperatur.

celsius.cpp
#include <iostream> 
#include <ostream>
int main() 
{ const double kelvin( 300 ); 
const double versatz( 273.15 ); 
const double celsius( kelvin - versatz ); 
std::cout << celsius << '\n'; }

Der Text "300" ist ein Literal vom Datentyp "int". Da der sich ergebende Wert aber eine Konstante vom Datentyp "double" definiert, wird der Wert vom Datentyp "int" in den Datentyp "double" gewandelt.

Ausdrücke, die neben Operator nur Konstanten und Literale enthalten, können oft bereits während der Übersetzung eines Programmes ausgewertet werden und kosten daher nur wenig Laufzeit.

Typwandlung bei Initialisierung

Die Festlegung des Wertes der Konstanten beim Anlegen wird auch als Initialisierung  bezeichnet. Bei der Initialisierung einer Konstanten kann ein Ausdruck verwendet werden, der nicht denselben Typ hat wie die Konstante, wenn C++  für diesen Fall eine Umwandlung vorsieht. Dies ist ähnlich wie beim Aufruf einer Funktion, die ein Argument vom Typ der Konstanten erwartet mit einem Argument vom Typ des zur Initialisierung verwendeten Ausdrucks. Das folgende Programmbeispiel zeigt, wie von solchen Umwandlungen Gebrauch gemacht wird.

conversion.cpp
#include <iostream> 
#include <ostream>
int main() 
{ const double d( 300 ); 
const int i( 273.15 ); 
const int j( true ); 
const bool b( 1 ); 
std::cout << std::boolalpha <<  
d << ", " << i << ", " << j << ", " << b << '\n'; }

std::cout
300, 273, 1, true

Übungsaufgaben

Übungsaufgabe   Übungsfrage
pluseins.cpp
#include <iostream> 
#include <ostream>
int main() 
{ const double a( 1 ); 
std::cout << a + 1 << '\n';  
// hier 
}

Welchen Wert hat die Konstante "a" nach der Ausgabe?

Übungsaufgabe   Übungsaufgabe

Schreiben Sie ein Programm nach dem obigen Muster, das aus einer Konstante mit dem Wert 1,29 (in Mark zu verstehen) eine entsprechende andere Konstante in Euro errechnet. Das Programm soll also mindestens  zwei Konstanten enthalten.

Übungsaufgabe   Übungsaufgabe
sinus1.cpp
#include <iostream> 
#include <ostream> 
#include <cmath>
int main() 
{ const double x( 1 ); 
const double y( std::sin( x ));  
const double z( std::sqrt( y ));  
const double u( std::pow( y, 0.51 ));  
std::cout << z << '\n'; 
std::cout << u << '\n'; }

std::cout
0.917317 
0.915735

Übungsaufgabe Schreiben Sie die Einheit "sinus1.cpp" so um, daß dieselben Werte ausgegeben werden und dieselben Numerale und Funktionen zur Berechnung verwendet werden, aber keine Konstanten mehr in dem Programm vorkommen. Ersetzen Sie zunächst die Konstante "x" überall durch ihre Definition, also durch den Wert "1" und entfernen Sie die Definition von x. Nach diesem Schema können dann alle anderen Definitionen eliminiert werden, bis nur noch die beiden Ausgabeausdrücke übrigbleiben.

Übungsaufgabe   Übungsaufgabe
sinus2.cpp
#include <iostream> 
#include <ostream> 
#include <cmath>
int main() 
{ std::cout << std::sin( 1 + std::log( 2.178 ))<< '\n'; 
std::cout << std::cos( 1 + std::log( 2.178 ))<< '\n'; }

std::cout
0.978526 
-0.206122

Übungsaufgabe Schreiben Sie die Einheit "sinus2.cpp" so um, daß derzeit wiederholt vorkommende gleiche Teilausdrücke nur einmal vorkommen. Definieren Sie diese dazu als Konstante oder Konstanten und verwenden Sie die Konstante oder Konstanten dann an deren Stellen. Die Ausgabe des Programmes darf sich dadurch nicht ändern.

Seiteninformation und Impressum   
Formular für diese Seite betreffende Mitteilungen an den Herausgeber   
Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. slrprd, PbclevtugFgrsnaEnz