Antwort mit KI erzeugt
Implementierung der Immobilienklassen in C++
Zunächst schreiben wir eine grundlegende Klasse
Immobilie
, die allgemeine Eigenschaften wie Adresse, Baujahr und Besitzer einer Immobilie beinhaltet. Davon leiten wir zwei Klassen ab:
Wohnimmobilie
, mit einer zusätzlichen Eigenschaft, die angibt, ob es sich um eine Wohnung oder ein Haus handelt, und
Geschäftsimmobilie
, die kennzeichnet, ob Wohnungen in der Immobilie enthalten sind.
Danach erstellen wir ein Programm, welches Daten für eine beliebige Anzahl von Immobilien einliest und in umgekehrter Reihenfolge wieder ausgibt.
Korrektur und Weiterentwicklung des Codes:
cpp
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Immobilie{
public:
string Adresse, Besitzer, Baujahr;
Immobilie(){} // Standardkonstruktor
void eingabe(const string& x, const string& y, const string& z) {
Adresse = x;
Besitzer = y;
Baujahr = z;
}
virtual void ausgabe() const {
cout << "Adresse der Immobilie : " << Adresse << endl;
cout << "Besitzer der Immobilie : " << Besitzer << endl;
cout << "Baujahr der Immobilie : " << Baujahr << endl;
}
};
class Wohnimmobilie : public Immobilie {
public:
bool wohnungNichtHaus; // true für Wohnung, false für Haus
// Hier überladen wir die Methode ausgabe(), um die zusätzliche Eigenschaft anzuzeigen
void ausgabe() const override {
Immobilie::ausgabe();
cout << "Typ der Immobilie : " << (wohnungNichtHaus ? "Wohnung" : "Haus") << endl;
}
};
class Geschaeftsimmobilie : public Immobilie {
public:
bool hatWohnungen; // true, wenn Wohnungen enthalten sind
// Ähnlich überladen wir die ausgabe()-Methode für Geschaeftsimmobilie
void ausgabe() const override {
Immobilie::ausgabe();
cout << "Enthält Wohnungen : " << (hatWohnungen ? "Ja" : "Nein") << endl;
}
};
int main() {
vector<Immobilie*> immobilien;
cout << "Anzahl der Immobilien: ";
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cout << "Typ der Immobilie (1 für Wohnimmobilie, 2 für Geschäftsimmobilie): ";
int typ;
cin >> typ;
string adresse, besitzer, baujahr;
cout << "Adresse: ";
cin >> adresse;
cout << "Besitzer: ";
cin >> besitzer;
cout << "Baujahr: ";
cin >> baujahr;
if (typ == 1) {
bool istWohnung;
cout << "Ist es eine Wohnung (1 für ja, 0 für nein): ";
cin >> istWohnung;
auto wohn = new Wohnimmobilie;
wohn->eingabe(adresse, besitzer, baujahr);
wohn->wohnungNichtHaus = istWohnung;
immobilien.push_back(wohn);
} else if (typ == 2) {
bool hatWohnungen;
cout << "Enthält Wohnungen? (1 für ja, 0 für nein): ";
cin >> hatWohnungen;
auto gesch = new Geschaeftsimmobilie;
gesch->eingabe(adresse, besitzer, baujahr);
gesch->hatWohnungen = hatWohnungen;
immobilien.push_back(gesch);
}
}
// Ausgabe in umgekehrter Reihenfolge
cout << "\n--- Immobilien in umgekehrter Reihenfolge ---\n";
for (auto it = immobilien.rbegin(); it != immobilien.rend(); ++it) {
(*it)->ausgabe();
cout << endl;
}
// Speicher freigeben
for (auto& immo : immobilien) {
delete immo;
}
return 0;
}
Dieser Code korrigiert und vervollständigt die ursprüngliche Aufgabenstellung. Es werden nun dynamisch Instanzen der abgeleiteten Klassen basierend auf der Nutzereingabe erstellt, wobei die Polymorphie genutzt wird, um die
ausgabe()
-Methode der entsprechenden Immobilienklasse aufzurufen. Abschließend wird der Speicher, der dynamisch für jede Immobilie auf dem Heap reserviert wurde, korrekt freigegeben, um Speicherlecks zu vermeiden.