Datentypen (nur die wichtigsten):
C++ | Bytes |
char | 1 |
int | 2/4 |
long | 4/8 |
float | 4 |
double | 8 |
bool | 4 |
int i = 5;
float y = 3.7;
bool b = true;
Nicht immer führen Rechnungen zu einem gültigen Ergebnis, d.h. zu darstellbarer Zahl
double a = 0, b=1; double c = b/a; double d = sqrt(-1.); cout << " a = " << a // ok << ", b = " << b // ok << ", c = " << c // inf << ", d = " << d // nan ... // check mit if ( isinf(c) ) { // Funktion deklariert in cmath ...
double a = 0; a = ... double b; b = 2 * a;
Neues key-word (C++-11) erlaubt vereinfachte Deklaration von Variablen, wenn sich die Typ–Defintion aus dem Kontext eindeutig ableiten lässt, z.B.:
// C++ 11 |
auto hellostr = "Hello World!"; // type clear from context -> string |
auto x = tan(1.0); // type clear from context -> double |
// C++ 03 |
string hellostr = "Hello World!"; double x = tan(1.0); |
Diese Variable umfasst vier Dinge:
Man kann jederzeit im Programm Zahlenwerte oder Strings direkt hinschreiben, das sind die sog. Literals.
cout <<"9 * 9 = " <<9*9 <
Für simple Zwecke ok, aber bei komplexeren Grössen und/oder häufigem Gebrauch besser als Konstante definieren:
const double C_LIGHT = 2.99792458e8;
const double M_PROTON = 1.6726215813e-27;
Das Keyword const bewirkt dass “Variable” bei Initialisierung festgelegt wird und später nicht mehr geändert werden kann.
Konvention: Grossbuchstaben für Konstanten verwenden !
Ansonsten gilt für Variablen-Namen (Identifier):
Liste der reservierten Wörter in C++
Dürfen nicht als Namen für Variablen, Funktionen, Klassen verwendet werden!
asm auto bitand bitor bool break case catch char class compl const |
const_cast continue default delete do double dynamic_cast else enum explicit export |
extern false float for friend goto if inline int long mutable namespace new not not_eq |
operator or or_eq private protected public register |
reinterpret_cast return short signed sizeof static static_cast struct switch template |
this throw true try typedef typeid typename union unsigned using virtual void volatile |
wchar_t while xor xor_eq |
define else endif if ifdef ifndef include undef |
Hinzu kommen noch die Namen gängiger Klassen und Methoden wie
printf cout sin exp ...
Wird zwar syntaktisch von C++ akzeptiert, führt aber leicht ins Chaos ...
Strings/Zeichenketten in C (für Spezialisten):
In
C kein eigener Datentyp für Zeichenketten (character strings),
sondern gebildet als array (s.u.) von char Variablen:
char s[] = "Hallo"
'H'|'a'|'l'|'l'|'o'|'
'
Länge = # Buchstaben + 1,
wird angehängt zum Kennzeichnen
des String–Endes.
Wichtig: Unterschied zwischen single und double quotes:
'a' = single character
"a" = character string mit 2 Elementen:
'a'|'
'
#include <string> .. string s1("Hello "); // s1 deklariert und initialisiert string s2; // s2 deklariert s2 = s1 + "world "; // zusammenketten mit '+' // => s2 = "Hello world" cout << s2 << endl; // Ausgabe ... cout << "Name ? "; cin >> s2; // Einlesen von Tastatur cout << s1 << s2 << endl;
int i = 3, k = 1; double a = i; double b = k/i; // b = 0 double c = double(k)/double(i); // cast
Zuweisung meist ok, aber Vorsicht bei Rechen–Operationen:
int und
float Arithmetik
völlig verschieden !
struct person { char *name; int age; ... } struct person gd; gd.name = "Guenter Duckeck"; gd.age = 0x29;
Diese Funktionalität erlauben auch Klassen, daher selten verwendet in C++ ( später).
typedef int Length; .... Length len, maxlen;
Kann Verständlichkeit des Variablengebrauchs erleichtern, oft aber auch komplex auf echten Datentyp zurückzuschliessen.
Häufig benutzt in C/C++