Objektorientierte Programmierung mit C++

Inhalt:

  1. Von C zu C++

Uebung:

  1. Ziel: Klasse für einen Stack in C++
  2. Schreiben Sie eine Klasse "Name", die folgende Eigenschaften hat:

    Speichern Sie die Klasse in der Datei "name.h". Schreiben Sie ein Test-Programm name-test.cc, das mehrere Namen anlegt und mit print() ausgibt sowie das passende Makefile um mit "make name-test" zu compilieren:

    % cat name.h
    class Name {
    	// Hier Klasse Name einfuegen
    };
    % cat name-test.cc
    #include <iostream>
    #include "name.h"
    
    int main(void) {
      Name hubert;
      Name hans("Hans");
      hubert.print();
      hans.print();
      cout << "[" << hubert << "]" << endl;
      cout << "[" << hans << "]" << endl;
      return 0;
    }
    % make name-test
    ...
    % ./name-test
    Hans[]
    [Hans]
    % 
  3. Schreiben Sie eine Klasse "Liste", mit folgenden Eigenschaften:

    Speichern Sie die Klasse in in der Datei "liste.h". Schreiben Sie die Klasse mit dem Programm liste-test.cc, das zwei Listen anlegt, eine fuer Vornamen und eine fuer Nachnamen. Das Programm soll abwechselnd Vornamen und Nachnamen von Tastatur einlesen, und bei erreichen des Dateiendes erst alle Vornamen, dann alle Nachnamen ausgibt:

    % cat liste-test.cc
    #include <iostream>
    #include "liste.h"
    
    using namespace std;
    
    int main(void)
    {
    	char name[80];
    	Liste vn, nn;
    	while (!cin.eof()) {
    		cout << "Vorname eingeben:  ";
    		cin >> name;
    		if (cin.eof()) break;
    		vn.einfuegen(name);  // impliziter Konstruktoraufruf: Name(char*)
    
    		cout << "Nachname eingeben: ";
    		cin >> name;
    		if (cin.eof()) break;
    		nn.einfuegen(name);
    	}
    	cout << endl;
    	cout << endl;
    	cout << "Vornamen: " << vn << endl;
    	cout << "Nachnamen: " << nn << endl;
    
    	return 0;
    }
    % make liste-test
    ...
    % ./liste-test
    Vorname eingeben:  Hubert
    Nachname eingeben: Feyrer
    Vorname eingeben:  Angela
    Nachname eingeben: Merkel
    Vorname eingeben:  Bill
    Nachname eingeben: Gates
    Vorname eingeben:  ^D
    
    Vornamen: Bill Angela Hubert
    Nachnamen: Gates Merkel Feyrer
    % 
  4. Schreiben Sie eine Klasse "Stack", mit folgenden Eigenschaften:

    Schreiben Sie ein Testprogramm stack-test.cc, das einen Stack anlegt. Das Programm soll Namen von Tastatur einlesen, und diese auf den Stack legen. Bei erreichen des Dateiendes werden alle Namen auf dem Stack ausgegeben:

    % cat stack-test.cc
    #include <iostream>
    #include "name.h"
    #include "stack.h"
    
    int main(void)
    {
            char name[80];
            Stack s;
    
            while (!cin.eof()) {
                    cin >> name;
                    if (cin.eof()) break;
                    s.push(name);
            }
            cout << "Stack: " << s << " |" << endl;
            while(!s.istLeer()) {
                    Name n = s.pop();
    			cout << "> " << n << endl;
            }
    
            return 0;
    }
    % make stack-test
    ...
    % ./stack-test
    foo
    bar
    baz
    ^D
    Stack: baz bar foo |
    > baz
    > bar
    > foo
    % 
    
  5. Erstellen Sie für Ihre Programme ein Makefile mit den Targets "all" und "clean". Ersteres soll alle drei Programme compilieren, letzteres alle erzeugten Dateien (Object Files, Programme, ...) loeschen.

  6. Importieren Sie Ihren Quellcode inkl. Makefile etc. in's Subversion-Repository in das Verzeichnis "MB/abc12345/uebung3".


$Id: mb-mittwoch.html,v 1.9 2008/02/15 14:49:31 feyrer Exp $
Copyright (c) 2008 Hubert Feyrer <hubert@feyrer.de>
Alle Rechte vorbehalten.