Bit wisem 2015-wieners-sitzung-12_Zusammenfassung I
WiSe 2013 | Programmierpraktikum C++ - 06_Übungsblatt struct und class
1. Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Programmierpraktikum C++
Jan G. Wieners, MA - jan.wieners@uni-koeln.de
Aufgabe 1: Eine einfache Struktur, eine einfache Klasse
In der vergangenen Kursstunde haben wir eine Filmdatenbank
implementiert, deren wesentliche Datenstruktur wir selbst erstellt
haben:
struct filmDB {
char deutscherName[100];
char originalTitel[100];
int veroeffentlichungsJahr;
char regie[100];
};
Die Struktur wurde über den einfachen Programmablauf mit Inhalt gefüllt:
class filmDB meineFilmDB[100];
int filmCounter = 0;
cout << "Film #" << filmCounter + 1 << endl;
cout << "Eingabe des Filmnamens (deutsch): ";
// Einen ersten Film hinzufügen
// --> Die erste Speicherstelle des Arrays füllen
cin >> meineFilmDB[filmCounter].deutscherName;
cout << "Eingabe des Filmnamens (Originaltitel): ";
cin >> meineFilmDB[filmCounter].originalTitel;
cout << "Eingabe des Veröffentlichungsjahres: ";
cin >> meineFilmDB[filmCounter].veroeffentlichungsJahr;
cout << "Eingabe des Regisseurs / Regisseurin: ";
cin >> meineFilmDB[filmCounter].regie;
Strukturen sind zwar ganz fein, erst Klassen (class) jedoch ermöglichen objektorientierte Programmierung
(Geheimnisprinzip, etc.):
class filmDB {
public:
char deutscherName[100];
char originalTitel[100];
int veroeffentlichungsJahr;
char regie[100];
};
class filmDB meineFilmDB[100];
cin >> meineFilmDB[filmCounter].deutscherName;
Die oben wiedergegebene Klasse unterscheidet sich nur durch die Schlüsselwörter class und public von der
besprochenen Struktur. public definiert den öffentlichen Teil der Klasse; auf öffentliche Teile (Member) der
Klasse lässt sich von außerhalb der Klasse zugreifen. Bereiche der Klasse, die mit private angegeben sind,
lassen sich von außen nicht erreichen.
Aufgabe 1.1: Ändern Sie das Schlüsselwort public in private und schauen Sie, was geschieht, wenn
Sie den Quelltext compilieren.
Aufgabe 1.2: (Lassen Sie die Membervariablen der Klasse filmDB definiert als private Variablen) In
der objektorientierten Programmierung werden private Teile der Klasse häufig über einfache
Funktionen zugänglich gemacht, die es ermöglichen, Inhalte der privaten Membervariablen zu lesen
(getter) und zu schreiben (setter). Ergänzen Sie die Klasse um einen public Teil und fügen Sie der
Klasse set (z.B. setRegie(…)) und get (z.B. getRegie(…)) Methoden hinzu, um den Zugriff auf die
Variableninhalte zu ermöglichen.
1/2
2. Universität zu Köln
Historisch-Kulturwissenschaftliche Informationsverarbeitung
Programmierpraktikum C++
Jan G. Wieners, MA - jan.wieners@uni-koeln.de
Aufgabe 2: Funktionalität auslagern – Eigene Headerdateien
Lagern Sie die Klassendeklaration in eine eigene Headerdatei mit der Dateieendung “*.h“ aus.
Headerdateien lassen sich mit Ihrer main.cpp verknüpfen durch (z.B.) #include “filmdb.h“:
#include <iostream>
using namespace std;
#include "filmdb.h"
int main() { […] }
Aufgabe 3: Funktionalität auslagern – Eigene Bibliotheken
Lagern Sie die Klassendeklaration in die Headerdatei „filmdb.h“ und die Funktionsdefinitionen der Klasse in
die C++ Datei „filmdb.cpp“ aus. Zu Beginn der Datei „filmdb.cpp“ finden sich die folgenden Angaben:
#include <iostream>
using namespace std;
#include "filmdb.h"
Aufgabe 4: Zeiger
Programmieren Sie die folgende Anwendung (oder ergänzen Sie die oben angeführte Klasse um die
entsprechende Funktionalität): Innerhalb der main-Funktion wird der Benutzer / die Benutzerin aufgefordert,
einen beliebigen Text einzugeben. Die main-Funktion übergibt diesen Text an eine Unterfunktion, welche die
Textlänge ermittelt. Die main-Funktion gibt anschließend die ermittelte Länge mit etwas Umgebungstext
wieder aus. Die Unterfunktion soll keine return-Anweisung benutzen.
2/2