16.01.2003 Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 1
Wie bekommen Objekte ihre
Initialwerte?
Klassenbibliothek iostream
Durch
#include <iostream>verwendbar Eingabe durch
istream, Ausgabe durch
ostream
Drei standard Streamobjekte
cin: Daten von der Tastatur lesen
cout: Daten auf Bildschirm schreiben
cerr: Für Programmfehlermeldungen
16.01.2003 Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 3
Ausgabe durch überladenen links- shift Operator <<
Eingabe durch überladenen rechts-
shift Operator >>
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main(void) {
int x;
cin >> x;
cout << "Hallo ..." << " x = " << x << endl;
return 0;
}
16.01.2003 Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 5
Verwendung von namespaces jetzt erforderlich, um
Bezeichnerüberlappung zu
verhindern: hier
using namespace std;Syntax genau beachten
Beide Operatoren sind erweiterbar Können für Dateiverarbeitung
verwendet werden
ifstream
verbindet Programm mit einer Datei für Eingabe
ofstream
verbindet Programm mit einer Datei für Ausgabe
fstream
verbindet Programm mit
einer Datei für Ein- und Ausgabe
16.01.2003 Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 7
Ein- und Ausgabe Operationen im Hauptspeicher
Drei Objekttypen
istringstream ostringstream stringstream
Sehr einfach
Erster Operand ist der Stream
Zweiter Operand ist das ein- oder auszugebende Objekt
Das Ergebnis: ein Stream
Mehrere Operationen werden durch entsprechende shift
Operatoren verknüpft
16.01.2003 Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 9
Defaultmässig ist der Typ des Objekts massgebend
Include-Datei
<iomanip>Basis durch
setbaseändern Für int -Typen:
Basis 10 ist default
hex
für Hexadezimal,
octfür Oktal
Für Gleitkommatypen:
precision
ist aktuelle Präzision
Präzision ändern mit
setprecision#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <iomanip>
using std::hex;
using std::dec;
using std::oct;
using std::setbase;
int main(void){
int n;
cout << "Bitte integer eingeben: ";
cin >> n;
cout << n << "in hex: " << hex << n << '\n'
<< dec << n << "in octal: " << oct << n << '\n'
16.01.2003 Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 11
!
#include <iostream>
... //wie oben
#include <iomanip>
#include <cmath>
using std::ios;
using std::setiosflags;
using std::setprecision;
int main(void){
double x; x = sqrt(2.0);
int nachkst;
cout << setiosflags(ios::fixed)
<< "sqrt(2) mit versch. Praezis: " << endl;
for(nachkst = 0; nachkst < 10; nackkst++){
cout.precision(nachkst); cout << x << endl;
}
"
Wie normale C-Variablen werden Objekte während ihrer Entstehung initialisiert
Dafür gibt es einige Spezielle-
elementfunktionen. Diese heissen Konstruktoren
Sie werden durch ihre Parameter-
liste voneinander unterschieden
Sie haben keinen Rückgabetyp
16.01.2003 Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 13
meineKlasse.h
class meineKlasse{
private:
int n;
public:
meineKlasse();
meineKlasse(int = 0);
void setn(int);
int getn();
};
meineKlasse.cc
#include "meineKlasse.h"
meineKlasse::meineKlasse() {
x = 0;
}
meineKlasse::meineKlasse(int num) {
n = num;
} ...
16.01.2003 Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 15
Konstruktor
meineKlasse()ohne Parameter ist der Standard-konstruktor
Konstruktor
meineKlasse(int num)mit
Parameter ist der allgemeine Konstruktor Der Compiler erzeugt einen Default-
Konstruktor falls Konstruktoren nicht definiert sind
Der allgemeine Konstruktor hat einen Default-Wert von 0. Syntax genau
beachten!
"
Initialwerte können vor der
Konstruktorausführung angegeben werden
Reihenfolge der Initialisierungen ist die in der Klassendefinition (wichtig bei Abhängigkeiten)
Später bei Vererbung wichtig
In
cc-Datei anzugeben
16.01.2003 Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 17
meineKlasse.cc
meineKlasse::meineKlasse(int num) : n(num) {
cout << "n bereits initialisert" << endl;
}
Erlauben Initialisierungen von Klassen durch andere Klassen Genau wie man im C-Programm
int x = 5;
schreiben kann, kann man im C++-Programm
meineKlasse Objekt1 = Objekt2schreiben
Natürlich muss die rechte Seite
bereits initialisiert sein
16.01.2003 Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 19