Programmhilfe
-
Hier die Aufgabenstellung:
Entwickeln Sie ein C/C++-Programm,
in dem eine Personenklasse gemäß
Klassendiagramm entwickelt wird. Die
Klassendefinition befindet sich in einer
Header-Datei, die Applikation in einer
cpp-Datei. In der cpp-Datei werden
drei Personen instanziiert. Zwei
Personen heiraten. Dies ist aber nur
möglich, diese Personen nicht
verheiratet sind. Der Versuch der
dritten Person m3, eine von zwei
verheiraten Personen zu heiraten,
muss scheitern. Die beiden
verheirateten Personen lassen sich
scheiden, dabei ist unerheblich, wer
die Scheidung wünscht. Danach kann
die dritte Person erfolgreich eine der
ersten beiden Personen heiraten.
Heirat ist nur möglich, wenn die
Partner verschiedengeschlechtlich
sind. Hierzu ist die Klasse um das
Attribut (Objekt-Variable) char
geschlecht zu erweitern.
Weiterhin soll eine statische Klassen-
Variable static int personenZaehler
vorgesehen werden, die neu angelegte
Instanzen hochzaehlt.
Die Instanziierung und Aktivitäten der
Personen sind in einer cpp-Datei
namens appliP.cpp und die
Klassendefinition in einer Datei
namens Person.h unterzubringen.
In der Klassenfunktion vorstellen() wird
der Name der Person unf ggf. der
Name des (Ehe-)Partners angezeigt.
Anmerkung: Aus Gründen der
Einfachheit sind Konstruktoren und
Destruktoren nicht im Diagramm
dargestellt. Der Schwerpunkt der
Aufgabe liegt in der Gestaltung der
Klassenfunktionen heiraten(...) und
scheiden(). Sie sind verantwortlich für
die Einhaltung der o. g. Regeln.
Zerstören Sie bei Programmende alle
Instanzen mit delete."Da ich noch nicht so fähig bin bin ich erst bis dahin gekommen:" Würde mich freuen wenn ihr ein paar Ideen habt. Natürlich auch Kritik.
Hier das Programm soweit wie ich bisher gekommen bin:
#include<iostream>
#include<string>using namespace std;
class CPerson{
string name;
string nachname;
CPerson * partner;
static int z1; //Klassenvariable
int z; //Objektvariablepublic:
CPerson(string n,string m){
cout<<"Neue Instanz..."<<endl;
name = n;
nachname = m;
partner = NULL;
z1++; //Klassenvariable
z=z1;
}void vorstellen(){
cout<<"Hallo ich bin Objekt "<< z <<" "<<name<<nachname;
if(partner !=NULL)
cout<<", mein Partner ist "
<<partner->name
<<partner->nachname
<<endl;}//vorstellen
void partnern(CPerson &p){
cout<<"\n";
this->partner = &p;
partner->partner = this;}//partnern
};//CPerson
int CPerson::z1 = 0;
int main(){
CPerson p1("Ingeborg"," Von der Knutsen\n");
p1.vorstellen();CPerson p2("Alfred"," Hitchacker\n");
p2.vorstellen();CPerson p3("Thomas"," Heck\n");
p3.vorstellen();p1.partnern(p2);
p1.vorstellen();
p2.vorstellen();cout<<endl;
getchar();
return 0;
}//main
-
Sieht doch schon ganz anständig aus. Eine Frage: Wieso übergibst du die Namen-Strings mit Space am Anfang und \n am Ende? Das gehört nicht zum Namen, sollte also auch nicht gespeichert werden. Wenn du eine neue Zeile willst, dann musst du die eben einfach bei der Ausgabe anhängen. Aber sowas abzuspeichern, führt dann später zu Problemen wenn man das Programm ändern muss.
Beim partnern fehlt noch die Abfrage, ob beide noch keinen Partner haben. Ebenso eine Abfrage, ob das Geschlecht des Objekts ungleich des Geschlechts des zu Heiratenden ist. Zur Festlegung des Geschlechts wirst du wohl am besten eine zusätzliche Variable einführen und diese beim Instanziere gleich mit übergeben.
Scheiden ist dann analog, erst prüfen, ob man mit der Person, von der geschieden werden soll, überhaupt verheiratet ist, dann gleich die beiden Pointer auf Null setzen.
Destruktor mit delete fehlt noch, laut Angabe wird er gefordert.
Und die Klassendefinition kommt in eine extra .h-Datei, die Methoden der Klasse (also heiraten(..), scheiden(), vorstellen()) kommt in die appliP.cpp.
-
aus versehen selbst zitiert statt editiert, sry...
-
So, bin dran und versuche es heute noch hinzubekommen dann stelle ich es nochmal rein. Aber schon mal vielen Dank für deine Tipps
Gruß maurice
-
[...] die Klassendefinition in einer Datei namens Person.h unterzubringen. [...]
Ich finde den permanenten Gebrauch der Möglichkeit, dass sich Methoden auch in Headerdateien definieren lassen, nicht gut. Würde man alle Methoden so definieren würde der Quelltext schnell sehr chaotisch aussehen.
Vielleicht ist aber auch dem Autor der Aufgabenstellung der Unterschied zwischen Deklaration und Definition nicht bewusst gewesen.
Ich würde dir raten eine Datei person.h (man beachte die Groß- / Kleinschreibung des Dateinamens
) für die Deklaration und eine Datei person.cpp für die Definition / Implemenatation zu verwenden.