Würde mich über Ratschläge freuen.
-
#include <iostream> using namespace std; // Im header kein using namespace class Reservierung; class Restaurant { private: string name; int anzahl_tische; bool* tische; // Warum nicht std::vector<bool> bzw. std::array<bool>? public: // a) Konstruktor Restaurant(string, int); // b) Destruktor void delete_dyn(); ~Restaurant(); Restaurant& operator+=(const Reservierung&); friend ostream& operator<<(ostream& os, Restaurant); }; class Reservierung { private: int tischnummer; public: friend class Restaurant; }; Restaurant::Restaurant(string n, int a): name(n), anzahl_tische(a){ tische = new bool[anzahl_tische]; // s.o. for (int i=0; i<anzahl_tische;i++){ tische[i]=false; } } // nicht benötigt mit std::vector void Restaurant::delete_dyn() { delete[] tische; } // nicht benötigt mit std::vector Restaurant::~Restaurant() { this->delete_dyn(); } Restaurant& Restaurant::operator+= (const Reservierung& s ){ // Wenn du eine Reservierung hinzufügst, warum erstellst du du ein neues Restaurant? Restaurant temp(name, anzahl_tische); // Warum greifst du auf das neue Restaurant zu, nicht auf das richtige? // Warum tische[0] ? temp.tische[0]=s.tischnummer; temp.tische[0]=true; // warum gibst du das gleiche Objekt zurück, ohne was an ihm verändert zuhaben? return *this; } ostream& operator<<(ostream& os, Restaurant k){ os << "Der Name des Rasturants ist: " << k.name << endl; // besser '\n' anstelle von endl; for(int i=0; i< k.anzahl_tische ; i++){ os << "Nr. " << i << " ist " << k.tische[i] << endl; // s.o. } return os; } int main () { Restaurant ha("Ritz", 5); Reservierung x; ha += x; cout << ha << endl; return 0; // implizit }
-
Hallo,
naja, ich soll mit dem operator+= die tischnummer mit Eins belegen und diesen belegten Tisch meinem Objekt Restaurant hinzufügen. Also der int tischnummer ist ein Tisch von anzahl_tische, lediglich im Gegensatz zu den anderen Tischen belegt. Der ausgabeoperator soll mir dann im Anschluß dessen alle nicht belegten Tische untereinander ausgeben. Das klappt irgendwie nicht, weil mir die Verknüpfungen nicht gelungen sind.
Den Destruktor habe ich gemäß der Aufgabenstellung hinzuzufügen. Genau wie den Konstruktor. Die müssten doch richtig sein, oder?
-
bool* tische;
Das ist eine Vorgabe
-
Dragonlady schrieb:
bool* tische;
Das ist eine Vorgabe
Weißt Du überhaupt, wie Pointer/CArrays funktionieren/sind?
-
Hi,
ja, im Groben schon. Ich bin halt noch eine absolute Anfängerin. Also ich bin da nicht so gut.
-
DargonLady schrieb:
Hallo,
naja, ich soll mit dem operator+= die tischnummer mit Eins belegen und diesen belegten Tisch meinem Objekt Restaurant hinzufügen. Also der int tischnummer ist ein Tisch von anzahl_tische, lediglich im Gegensatz zu den anderen Tischen belegt. Der ausgabeoperator soll mir dann im Anschluß dessen alle nicht belegten Tische untereinander ausgeben. Das klappt irgendwie nicht, weil mir die Verknüpfungen nicht gelungen sind.
Hola, dass ist schwer zu verstehen.
So, wie ich es deute soll der operator+= (ich improvisiere!)
suche einen index i mit tische[i] = false (das ist ein freier Tisch) wenn kein solch i: setze die tischnummer der Reservierung auf -1 (das ist improvisiert!) ende sonst: setz tische[i] auf true setz tischnummer der Reservierung auf i endeDas ergäbe für mich Sinn, allerdings dürftest Du dann keine Referenz auf const Reservierung übergeben, d.h.
Restaurant::operator+=(Reservierung&);
-
Leider soll ja eine Referenz zurückgegeben werden

Das ist wirklich kompliziert. Ich habe schon so viele Programme geschrieben, dies sogar erfolgreich. In der Uni mussten wir immer die Programme abgeben. Habe ich auch immer geschafft.
Nun möchte ich nur ein paar alte Klausuraufgaben machen und Nichts klappt mehr. Das nennst sich wohl programmieren. lol
-
DragonLady schrieb:
Leider soll ja eine Referenz zurückgegeben werden

Daran ändert sich ja auch nix.
Restaurant& operator+=(Reservierung&);siehst Du: gibt eine Referenz zurück.
Ich sagte nur, dass der Parameter keineconst Reservierung&mehr sein darf.Vom Prinzip her ändert mein Vorschlag eh nicht viel - ich habe mir nur Gedanken gemacht wie es gemeint sein könnte.
Aber ich schau morgen beim Bleigiessen noch mal...
-
Ahso, ja, jetzt verstehe ich, was du meinst.
Ok, danke dir. Das wäre sehr nett von dir.
-
Furble Wurble schrieb:
So, wie ich es deute soll der operator+= (ich improvisiere!)
[blablabla...]Da ich nicht denke, dass meine Improvisation sonderlich hilfreich war, aber schon denke, dass Du im großen und ganzen richtige Ansätze hast versuch ich es anders.
Du schreibst:
DargonLady schrieb:
ich soll mit dem operator+= die tischnummer mit Eins belegen und diesen belegten Tisch meinem Objekt Restaurant hinzufügen.
Gegeben diese Reservierung:
DragonLady schrieb:
class Reservierung { private: int tischnummer; public: friend class Restaurant; };Wie und wer soll da die Tischnummer setzen? Kein Konstruktor und
tischnummeristprivate.
Entweder Du baust noch einen Konstruktor, oder nur Restaurant (weil einefriendKlasse) kann das.Und wenn Du dann eine Reservierung mit tischnummer hast sieht der
operator+=in Pseudocode so auswenn -1 < tischnummer && tischnummer < anzahl_tische wenn tische[tischnummer] == false tische[tischnummer] = true return *this;Richtig? Dann brauchst Du auch nicht an den Parametern rumschrauben.
-
Ich habe schon mehrere Klausuraufgaben programmiert. Alle sind kein Problem, lediglich an diesem Programm beisse ich mir die Zähne aus. Also den Konstruktor und Destruktor habe ich ja wohl richtig(?) implementiert. Nur der operator+= und der Ausgabeoperator klappen nicht. Oder verstehe ich die aufgabenstellung nicht richtig?
c) Geben Sie die Definition eines operator+= an, welcher Memberfunktion der Klasse Restaurant ist, eine Referenz auf ein Objekt vom Typ Reservierung ubergeben bekommt und den in der Reservierung vermerkten Tisch für das Restaurant belegt. Der Operator soll eine Referenz auf das ver änderte Restaurant-Objekt zurückliefern.
d) Geben Sie die Definition eines Ausgabeoperators für die Klasse Restaurant an, welcher den Namen des Restaurants sowie die Tischnummern aller noch freien Tische in diesem Restaurant untereinander ausgibt. Der Operator soll friend der Klasse Restaurant sein (die entsprechende Deklaration muss nicht mit angegeben werden).
-
also momentan schaut mein Code wie folgt aus:
#include <iostream> using namespace std; class Reservierung; class Restaurant { private: string name; int anzahl_tische; bool* tische; public: //a) Konstruktor Restaurant(string, int); //b) Destruktor //void delete_dyn(); //~Restaurant(); Restaurant& operator+=(const Reservierung&); friend ostream& operator<<(ostream& os, Restaurant); }; class Reservierung { private: int tischnummer; public: friend class Restaurant; }; Restaurant::Restaurant(string n, int a): name(n), anzahl_tische(a){ tische = new bool[anzahl_tische]; for (int i=0; i<anzahl_tische;i++){ tische[i]=false; } } /* void Restaurant::delete_dyn(){ delete[] tische; }*/ //Restaurant::~Restaurant(){ //delete[] tische; //this->delete_dyn(); //} Restaurant& Restaurant::operator+= (const Reservierung& s ){ Restaurant temp(name, anzahl_tische); //s.tischnummer=1; temp.tische[0]=s.tischnummer; temp.tische[0]=true; return *this; } ostream& operator<<(ostream& os, Restaurant k){ os<<"Der Name des Rasturants ist: "<<k.name<<endl; for(int i=0; i< k.anzahl_tische && k.tische[i]==false ; i++){ os<<"Nr. "<<i<<" ist "<<k.tische[i]<<endl; } return os; } int main (){ Restaurant ha("Ritz", 9); //Reservierung x; //ha+=x; cout<<ha<<endl; return 0; }Das Problem ist doch, dass ich tischnummer im operator+= gar nicht ändern kann. Der compiler sagt: read only. Es muss dort eine += Operation rein, nur wie?
-
Dragonlady schrieb:
Ich habe schon mehrere Klausuraufgaben programmiert. Alle sind kein Problem, lediglich an diesem Programm beisse ich mir die Zähne aus. Also den Konstruktor und Destruktor habe ich ja wohl richtig(?) implementiert.
Vielleicht nicht schön, aber richtig - jedenfalls in Deinem ersten Post.
Das Problem ist wohl wirklich, dass Du die Aufgabe missverstehst.Dragonlady schrieb:
c) Geben Sie die Definition eines operator+= an, welcher Memberfunktion der Klasse Restaurant ist, eine Referenz auf ein Objekt vom Typ Reservierung ubergeben bekommt und den in der Reservierung vermerkten Tisch für das Restaurant belegt. Der Operator soll eine Referenz auf das ver änderte Restaurant-Objekt zurückliefern.
[...]
Das Problem ist doch, dass ich tischnummer im operator+= gar nicht ändern kann. Der compiler sagt: read only. Es muss dort eine += Operation rein, nur wie?Lies nochmal meinen letzten Post:
- Du erstellst eine Reservierung. Mit Tischnummer i.
Das geschieht inmain, dazu musst Du die Klasse Reservierung noch so verändern, dass, z.B. in einem Konstruktor die Tischnummer gesetzt werden kann. - Diese Reservierung wird im folgenden nicht mehr geändert.
- Diese Reservierung übergibst Du als Argument an den
operator+=() - Der
operator+=()verändert*this(Das Restaurant!), indem es den entsprechenden bool an der Stelletische[s.tischnummer]=truesetzt. (siehe dazu meinen letzten Pseudocode). - Fertig ist der Lack mit
operator+=()
Wenn's immer noch nicht klingelt, folgende Fragen aus dem Thread hast Du noch nicht beantwortet:
wozu ist das Objekttempimoperator+=()?
Wie willst Du die Tischnummer der Reservierung setzen?Wenn ich mir die Evolution Deines Codes in 24h ansehe, bin ich etwas weniger optimistisch, was evtl. anstehende Prüfungen anbelangt...
- Du erstellst eine Reservierung. Mit Tischnummer i.