wise 2013 | programmierpraktikum c++ - 06_Übungsblatt struct und class

2
Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung Programmierpraktikum C++ Jan G. Wieners, MA - [email protected] 1 / 2 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.

Upload: jan-wieners

Post on 30-Jul-2015

137 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: WiSe 2013 | Programmierpraktikum C++ - 06_Übungsblatt struct und class

Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung Programmierpraktikum C++ Jan G. Wieners, MA - [email protected]

1 / 2

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.

Page 2: WiSe 2013 | Programmierpraktikum C++ - 06_Übungsblatt struct und class

Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung Programmierpraktikum C++ Jan G. Wieners, MA - [email protected]

2 / 2

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.