Klasse um Mengen von INT zu verwalten
-
In der Programmiersprache PASCAL gibt es den abgeleiteten Datentyp Set. Er stellt die Nachbildung des mathematischen Begriffs der Menge dar. Der so definierte Datentyp beinhaltet ein statisches Feld des Grunddatentyps, in dem die Elemente der Menge abgespeichert werden. Dabei ist die Eigenschaft der Menge zu beachten, daß jedes Element nur einmal in der Menge auftreten kann.
Entwickeln Sie eine C++-Klasse, die eine solche Menge von int-Werten verwaltet.
Dafür muss ich folgende Klassendefinition verwenden:
#ifndef MENGE_H #define MENGE_H const unsigned int Dim=256; class IntMenge { public: IntMenge(void); // Standardkonstruktor IntMenge(unsigned int,int*); // Konstruktor, der ein Feld von // int-Werten in die Menge eintraegt IntMenge &Vereinigung(IntMenge&); // Vereinigung zweier Mengen IntMenge &Durchschnitt(IntMenge&); // Durchschnitt zweier Mengen void AddElement(int); // Hinzufuegen eines int-Wertes bool In(int); // Ueberpruefen, ob der int-Wert // im Argument in der Menge enthalten ist void Ausgabe(void); // Ausgabe der Menge auf cout private: int m_nElemente; // Zahl der Elemente der Menge int m_Menge[Dim]; // Feld der Elemente der Menge }; #endif
Beachten Sie, daß die Referenz, welche in den Methoden Vereinigung und Durchschnitt als Ergebnis dem aufrufenden Programm zurückgegeben wird, auf einen auch in diesem Programmteil gültigen Speicherplatz verweisen muß. D.h. die Ergenismenge darf nicht auf dem Stack gespeichert werden, sondern muß mit dem new-Operator im Freispeicher angelegt werden.
Bitte helft mir!!!
-
wobei?
-
otze schrieb:
wobei?
lol, aber genau das frage ich auch...
-
Wobei wir helfen sollen, das frage ich mich allerdings auch.
Aber mal so am Rande:
Die Memberfunktionen 'Vereinigung' und 'Durchschnitt' finde ich sind in ihrer
Deklaration ungluecklich gewaehlt. Angenommen ich habe zwei Mengen und will
die Vereinigungsmenge bilden:A U B
Dadurch bilde ich ja eine neue Menge und manipuliere nicht A bzw. B. Nun sind
die beiden Memberfunktionen aber so deklariert, dass man folgendes machen muss:int A[] = { 1, 2, 3, 4, 5 }, B[] = { 6, 7, 8, 9, 0 }; IntMenge Am(A, 4), Bm(B, 4); //durchschnittsmenge bilden IntMenge &Dm = Am.Vereinigung(Bm);
Da 'Vergeinigung' eine Referenz zurueck gibt, muss es sich ja auch ein konkretes
Objekt beziehen (welches natuerlich keines sein darf, welches lokal angelegt
worden ist) und fuer mich kommt da, zumindest aus dem Bauch heraus, nur 'Bm'
in Frage. Damit haben wir die Menge 'Bm' selbst modifiziert, was doch
eigentlich nicht im Sinne des Erfinders sein wird, oder verhaspel ich mich hier
irgendwo?Die Definition der beiden Funktionen 'Vereinigung' und 'Durchschnitt' erzeugen
ja eine neue Menge (eben die Vereinigungsmenge bzw. Durchschnitssmenge von
gegebenen Mengen) und mir erscheint daher folgende Deklaration sinnvoller:IntMenge Vereinigung(const IntMenge&); IntMenge Durchschnitt(const IntMenge&);
Falls ich hier quatsch erzaehlt habe, bitte ich um kurze Erklaerung wo mein
Fehler liegt (ausser das die o. Klasse eben so vorgegeben worden ist :)).mfg
v R
-
Ich danke euch für eure hilfe ich bin aber jetzt schon drauf gekommen.