Zuweisung einfacher Objekte

Es ist eine einfache Klasse Person zu schreiben, die aus mindestens einem Vor- und einem Nachnamen für eine Person besteht.

Es sind mindestens zwei Methoden zu definieren:

Die Klasse ist in drei verschiedenen Versionen zu implementieren, wobei sich die interne Darstellung der Namen (Vor- und Nachname) unterscheidet:

  1. in der primitivsten Version sollen die Namen als char-Felder mit fester Länge vorliegen; damit wird für kurze Namen Platz verschwendet und Namen ab einer gewissen Länge sind nicht möglich
  2. die für den Ersteller der Klasse bequemste, aber auch zur Laufzeit uneffektivste Version soll den in C++ vorhandenen Datentyp string verwenden, der automatisch für das Allokieren von ausreichend Speicher sorgt
  3. die dritte Version soll selbst für das Allokieren sorgen, indem in der Klasse nur ein Zeiger auf die Namen steht, und bei Bedarf mit new oder malloc() Platz beschafft wird.

    Hierbei ist aber darauf zu achten, daß nicht mehr benötigter Speicher auch sauber freigegeben wird.

Die Klasse soll mit folgendem Testprogramm ausprobiert werden:

// Time-stamp: "08.12.02 13:14 test_person.cpp klaus@wachtler.de"
//
// Testprogramm für class Person aus der C++-Übung A

//#include <cstdlib>
//#include <cstddef>
//#include <cstdio>
//#include <cstring>

#include <iostream>

#include <exception>


#include "Person.h"

using namespace std;

int main( int nargs, char **args )
{
  try
  {
    // zwei Personen vereinbaren und initialisieren:
    cout << "(definieren)" << endl;
    Person a( "Karl", "Moik", 72 ), b( "Otto", "Waalkes", 55 );

    // Beide Personen ausgeben:
    a.zeige(); b.zeige();

    // a zu einer Kopie von b machen:
    cout << "(zuweisen)" << endl;
    a = b;

    // Beide Personen ausgeben:
    a.zeige(); b.zeige();

    // b neu setzen:
    cout << "(b setzen)" << endl;
    b.setze( "Eddi", "Stotter", 88 );

    // Beide Personen ausgeben:
    a.zeige(); b.zeige();
  }
  catch( exception &Fehler )
  {
    cerr << "Ausnahme in main() gefangen:\n"
         << Fehler.what() << endl;
  }
  catch( ... )
  {
    cerr << "unbekannte Ausnahme in main()" << endl;
  }


  return 0;
} // main( int nargs, char **args )
(Der Anwender der Klasse wird also nicht damit belästigt, wie die Implementation intern aussieht.)

Themen:

Lösung siehe Zuweisung einfacher Objekte.

AnyWare@Wachtler.de