Die main.cpp funktion:
#include "AutovermietungsGesellschaft.h"
#include <iostream>
int main() {
// PKW mit einer Leistung von 160 PS, 0.71 EUR pro PS und mit Navigationssystem
PKW PKW01(160, 0.71f, true);
// PKW mit einer Leistung von 210 PS, 0.85 EUR pro PS und ohne Navigationssystem
PKW PKW02(210, 0.85f, false);
// Elektroauto mit einer Leistung von 110 PS, 2.12 EUR pro PS, ohne Navigationssystem, einer Akkukapazität von 80 kWh und einem kWh-Preis von 0.33 EUR
Elektroauto elektroauto01(110, 2.12f, false, 80.0f, 0.33f);
// Elektroauto mit einer Leistung von 98 PS, 2.03 EUR pro PS, mit Navigationssystem, einer Akkukapazität von 95 kWh und einem kWh-Preis von 0.34 EUR
Elektroauto elektroauto02(98, 2.03f, true, 95.0f, 0.34f);
Autovermietungsgesellschaft HinzKunzAutos;
HinzKunzAutos.addAuto(&PKW01);
HinzKunzAutos.addAuto(&PKW02);
HinzKunzAutos.addAuto(&elektroauto01);
HinzKunzAutos.addAuto(&elektroauto02);
HinzKunzAutos.printList();
std::cout << "JAHRESMIETEINNAHMEN der Gesellschaft, wenn jedes Auto 300 Tage im Jahr vermietet ist: "
<< HinzKunzAutos.berechneGesamtJahresmiete(300)
<< std::endl << std::endl;
return 0;
}
AutovermietungsGesellschaft.cpp:
#include "AutovermietungsGesellschaft.h"
#include <iostream>
// Implementierung der Auto Klasse
Auto::Auto() : Leistung(0), MietpreisProPS(0.0f) {}
Auto::Auto(unsigned leistung, float mietpreisProPS)
: Leistung(leistung), MietpreisProPS(mietpreisProPS) {}
void Auto::setLeistung(unsigned PS) {
Leistung = PS;
}
unsigned Auto::getLeistung() const {
return Leistung;
}
void Auto::setMietpreisProPS(float mietpreisPS) {
MietpreisProPS = mietpreisPS;
}
float Auto::getMietpreisProPS() const {
return MietpreisProPS;
}
// Implementierung der PKW Klasse
PKW::PKW() : Auto(), NavigationsSystem(false) {}
PKW::PKW(unsigned leistung, float mietpreisProPS, bool navi)
: Auto(leistung, mietpreisProPS), NavigationsSystem(navi) {}
void PKW::setNavigationsSystem(bool navi) {
NavigationsSystem = navi;
}
bool PKW::getNavigationsSystem() const {
return NavigationsSystem;
}
float PKW::berechneJahresmiete(unsigned anzahlTageVermietet) const {
float Jahresmiete = MietpreisProPS * Leistung * anzahlTageVermietet;
if (NavigationsSystem) {
Jahresmiete += MieteNavi * anzahlTageVermietet;
}
return Jahresmiete;
}
void PKW::printInfo() const {
std::cout << "Leistung: " << Leistung << " PS\n"
<< "Mietpreis pro PS: " << MietpreisProPS << " EUR\n"
<< "Navigationssystem: " << (NavigationsSystem ? "Ja" : "Nein") << std::endl;
}
// Implementierung der Elektroauto Klasse
Elektroauto::Elektroauto()
: PKW(), Akkukapazitaet(0.0f), MietpreisProKWH(0.0f) {}
Elektroauto::Elektroauto(unsigned leistung, float mietpreisProPS, bool navi, float akkukapazitaet, float mietpreisProKWH)
: PKW(leistung, mietpreisProPS, navi), Akkukapazitaet(akkukapazitaet), MietpreisProKWH(mietpreisProKWH) {}
void Elektroauto::setAkkukapazitaet(float kapazitaet) {
Akkukapazitaet = kapazitaet;
}
float Elektroauto::getAkkukapazitaet() const {
return Akkukapazitaet;
}
void Elektroauto::setMietpreisProKWH(float mietpreisKWh) {
MietpreisProKWH = mietpreisKWh;
}
float Elektroauto::getMietpreisProKWH() const {
return MietpreisProKWH;
}
float Elektroauto::berechneJahresmiete(unsigned anzahlTageVermietet) const {
float Jahresmiete = MietpreisProPS * Leistung * anzahlTageVermietet + MietpreisProKWH * Akkukapazitaet * anzahlTageVermietet;
if (getNavigationsSystem()) {
Jahresmiete += MieteNavi * anzahlTageVermietet;
}
return Jahresmiete;
}
void Elektroauto::printInfo() const {
PKW::printInfo();
std::cout << "Akkukapazität: " << Akkukapazitaet << " kWh\n"
<< "Mietpreis pro kWh: " << MietpreisProKWH << " EUR" << std::endl;
}
// Implementierung der Autovermietungsgesellschaft Klasse
Autovermietungsgesellschaft::Autovermietungsgesellschaft()
: anzahlAutos(0) {}
void Autovermietungsgesellschaft::addAuto(Auto* neuesAuto) {
if (anzahlAutos < 100) {
Autos[anzahlAutos++] = neuesAuto;
}
}
void Autovermietungsgesellschaft::printList() const {
for (unsigned i = 0; i < anzahlAutos; ++i) {
Autos[i]->printInfo();
std::cout << std::endl;
}
}
float Autovermietungsgesellschaft::berechneGesamtJahresmiete(unsigned anzahlTageVermietet) const {
float GesamtJahresmiete = 0.0f;
for (unsigned i = 0; i < anzahlAutos; ++i) {
GesamtJahresmiete += Autos[i]->berechneJahresmiete(anzahlTageVermietet);
}
return GesamtJahresmiete;
}
AutovermietungsGesellschaft.h:
#ifndef AUTOVERMIETUNGSGESELLSCHAFT_H
#define AUTOVERMIETUNGSGESELLSCHAFT_H
#include <iostream>
// Forward declaration for the classes
class Auto;
class PKW;
class Elektroauto;
class Autovermietungsgesellschaft;
const static float MieteNavi = 100.0f;
class Auto {
public:
Auto();
Auto(unsigned leistung, float mietpreisProPS);
void setLeistung(unsigned PS);
unsigned getLeistung() const;
void setMietpreisProPS(float MietpreisPS);
float getMietpreisProPS() const;
virtual float berechneJahresmiete(unsigned anzahlTageVermietet) const = 0;
virtual void printInfo() const = 0;
protected:
unsigned Leistung;
float MietpreisProPS;
};
class PKW : public Auto {
public:
PKW();
PKW(unsigned leistung, float mietpreisProPS, bool navi);
void setNavigationsSystem(bool navi);
bool getNavigationsSystem() const;
float berechneJahresmiete(unsigned anzahlTageVermietet) const override;
void printInfo() const override;
private:
bool NavigationsSystem;
};
class Elektroauto : public PKW {
public:
Elektroauto();
Elektroauto(unsigned leistung, float mietpreisProPS, bool navi, float akkukapazitaet, float mietpreisProKWH);
void setAkkukapazitaet(float kapazitaet);
float getAkkukapazitaet() const;
void setMietpreisProKWH(float mietpreisKWh);
float getMietpreisProKWH() const;
float berechneJahresmiete(unsigned anzahlTageVermietet) const override;
void printInfo() const override;
private:
float Akkukapazitaet;
float MietpreisProKWH;
};
class Autovermietungsgesellschaft {
public:
Autovermietungsgesellschaft();
void addAuto(Auto* neuesAuto);
void printList() const;
float berechneGesamtJahresmiete(unsigned anzahlTageVermietet) const;
private:
Auto* Autos[100];
unsigned anzahlAutos;
};
#endif // AUTOVERMIETUNGSGESELLSCHAFT_H