0 Daumen
354 Aufrufe

Frage:

● Schreiben Sie eine Klasse, welche eine Immobilie (mit Adresse, Baujahr und Besitzer) repräsentiert und auch zwei Methoden bereitstellt, um eine Instanz dieser Klasse mit entsprechenden Werten zu belegen (z.B. Methoden ::eingabe() und
::ausgabe().

● Leiten Sie von der Klasse Immobilie zwei weitere Klassen für eine Wohn- und Geschäftsimmobilie ab. Die Klasse Wohnimmobilie enthalte eine zusätzliche Eigenschaft, die anzeigt, ob es sich um eine Wohnung oder um ein Haus handelt. Die Klasse Geschäftsimmobilie enthalte eine zusätzliche Eigenschaft, die anzeigt, ob in der Immobilie auch Wohnungen enthalten sind.

● Nutzen Sie diese Klassen in einem Programm, welches nach einer Zahl n fragt, und dann zur Eingabe der Daten von n
Immobilien auffordert, und diese dann in umgekehrter Reihenfolge wieder ausgibt. Vor jeder Eingabe sollte abgefragt werden, um welchen Typ von Immobilie es sich handelt.


Code:

#include<iostream>
#include<string>
using namespace std;

class Immobilie{

public:
string Adresse,Besitzer,Baujahr;

void eingabe(string x,string y,string z)
{
Adresse=x;
Besitzer=y;
Baujahr=z;
/*cout<<"Adresse der Immobilie : "<<endl;
cin>>Adresse;
cout<<"Besitzer der Immobilie : "<<endl;
cin>>Besitzer;
cout<<"Baujahr der Immobilie : "<<endl;
cin>>Baujahr;*/
}

void ausgabe()
{
cout<<"Adresse der Immobilie : "<<Adresse<<endl;
cout<<"Besitzer der Immobilie : "<<Besitzer<<endl;
cout<<"Baujahr der Immobilie : "<<Baujahr<<endl;
/* for(int i=n;i>0;i--)
  {
  cout<<array[i]<<endl;

  }*/
}


};


class Wohnimmobilie : public Immobilie{
public:
bool wohnung_nicht_Haus;
//void eingabe(string x,string y,string z);
//ausgabe();
eingabe(string x,string y,string z){
eingabe(x,y,z);
return 0;

}
ausgabe(){return 0;}

};

/*class Geschäftsimmobilie : public Immobilie{
public:
void fra(){
if(frage=="Wohnung"){
cout<<" Sind in der Immobilie auch Wohnungen enthalten : ja ";
}
else{
cout<<" Sind in der Immobilie auch Wohnungen enthalten : nein ";
}
}
};*/

int main(){
Wohnimmobilie a[10];
cout<<"Anzahl der Immobilien : ";
int n;
cin>>n;
Wohnimmobilie* array=nullptr;
array= new Wohnimmobilie[n];
  for(int i=0;i<n;i++)
  {
// Wohnimmobilie array[i];
  int h;
  cout<<"Wenn Wohnung dann gib 0 ein und wenn Haus gib 1 ein : ";
  cin>>h;
  if(h==0)
  {
  array[i].wohnung_nicht_Haus=true;
  }
  else
  {
  array[i].wohnung_nicht_Haus=false;
  }
// array[i].eingabe(x,y,z);
//  array[i].ausgabe();
 
  string x,y,z;
 
  cin>>x;
  cin>>y;
  cin>>z;
  array[i].eingabe(x,y,z);
  //array[i].ausgabe();
 
  /*for(int i=n;i>0;i--)
  {
  array[i].ausgabe();

  }*/
 

 
  /*Wohnimmobilie a;
  a.ausgabe();*/
}
}
Avatar von

1 Antwort

0 Daumen

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.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community