From d281783d58b09348d7987ecc967fed59fcc5db8f Mon Sep 17 00:00:00 2001 From: Frank Mayer Date: Wed, 20 Nov 2024 17:54:08 +0100 Subject: [PATCH] aufgabe 1 --- src/Fahrzeug.cpp | 22 ++++++++++++++++++++++ src/Fahrzeug.h | 23 +++++++++++++++++++++++ src/Fuhrpark_1.cpp | 18 ++++++++++++++++++ src/Fuhrpark_1.h | 17 +++++++++++++++++ src/Fuhrpark_2.cpp | 12 ++++++++++++ src/Fuhrpark_2.h | 16 ++++++++++++++++ src/defer.h | 21 --------------------- src/main.cpp | 27 +++++++++++++++++---------- 8 files changed, 125 insertions(+), 31 deletions(-) create mode 100644 src/Fahrzeug.cpp create mode 100644 src/Fahrzeug.h create mode 100644 src/Fuhrpark_1.cpp create mode 100644 src/Fuhrpark_1.h create mode 100644 src/Fuhrpark_2.cpp create mode 100644 src/Fuhrpark_2.h delete mode 100644 src/defer.h diff --git a/src/Fahrzeug.cpp b/src/Fahrzeug.cpp new file mode 100644 index 0000000..43bba2b --- /dev/null +++ b/src/Fahrzeug.cpp @@ -0,0 +1,22 @@ +#include "Fahrzeug.h" +#include + +void Fahrzeug::Print() { + std::cout << "Hersteller: " << hersteller << std::endl + << "Modell: " << modell << std::endl + << "Kennzeichen: " << kennzeichen << std::endl + << "Reichweite in km: " << reichweiteInKm << std::endl + << "Ladung in Prozent: " << ladungInProzent << std::endl; +} + +Fahrzeug::Fahrzeug(std::string hersteller, std::string modell, + std::string kennzeichen, unsigned int reichweiteInKm, + unsigned int ladungInProzent) { + this->hersteller = hersteller; + this->modell = modell; + this->kennzeichen = kennzeichen; + this->reichweiteInKm = reichweiteInKm; + this->ladungInProzent = ladungInProzent; +} + +Fahrzeug::Fahrzeug() {} diff --git a/src/Fahrzeug.h b/src/Fahrzeug.h new file mode 100644 index 0000000..c9abea7 --- /dev/null +++ b/src/Fahrzeug.h @@ -0,0 +1,23 @@ +#ifndef FAHRZEUG_H +#define FAHRZEUG_H + +#include + +class Fahrzeug { +public: + void Print(); + +public: + Fahrzeug(std::string hersteller, std::string modell, std::string kennzeichen, + unsigned int reichweiteInKm, unsigned int ladungInProzent); + Fahrzeug(); + +protected: + std::string hersteller; + std::string modell; + std::string kennzeichen; + unsigned int reichweiteInKm; + unsigned int ladungInProzent; +}; + +#endif // FAHRZEUG_H diff --git a/src/Fuhrpark_1.cpp b/src/Fuhrpark_1.cpp new file mode 100644 index 0000000..b691ad4 --- /dev/null +++ b/src/Fuhrpark_1.cpp @@ -0,0 +1,18 @@ +#include "Fuhrpark_1.h" +#include "Fahrzeug.h" +#include + +void Fuhrpark_1::Add(const Fahrzeug &arg) { + if (anzElem < Max_Elems) { + pFuhrpark[anzElem] = new Fahrzeug(arg); + ++anzElem; + } else { + throw new std::out_of_range("Fuhrpark_1 instalce is full"); + } +} + +void Fuhrpark_1::Print() const { + for (size_t i = 0; i < anzElem; ++i) { + pFuhrpark[i]->Print(); + } +} diff --git a/src/Fuhrpark_1.h b/src/Fuhrpark_1.h new file mode 100644 index 0000000..0356a29 --- /dev/null +++ b/src/Fuhrpark_1.h @@ -0,0 +1,17 @@ +#ifndef FUHRPARK1_H +#define FUHRPARK1_H + +#include "Fahrzeug.h" + +class Fuhrpark_1 { +public: + void Add(const Fahrzeug &arg); + void Print() const; + +private: + static const size_t Max_Elems = 100; + size_t anzElem; + Fahrzeug *pFuhrpark[Max_Elems]; +}; + +#endif // !FUHRPARK1_H diff --git a/src/Fuhrpark_2.cpp b/src/Fuhrpark_2.cpp new file mode 100644 index 0000000..181c811 --- /dev/null +++ b/src/Fuhrpark_2.cpp @@ -0,0 +1,12 @@ +#include "Fuhrpark_2.h" +#include "Fahrzeug.h" + +void Fuhrpark_2::Add(const Fahrzeug &arg) { + pFuhrpark->push_back(new Fahrzeug(arg)); +} + +void Fuhrpark_2::Print() const { + for (size_t i = 0; i < pFuhrpark->size(); ++i) { + (*pFuhrpark)[i]->Print(); + } +} diff --git a/src/Fuhrpark_2.h b/src/Fuhrpark_2.h new file mode 100644 index 0000000..25e6b77 --- /dev/null +++ b/src/Fuhrpark_2.h @@ -0,0 +1,16 @@ +#ifndef FUHRPARK2_H +#define FUHRPARK2_H + +#include "Fahrzeug.h" +#include + +class Fuhrpark_2 { +public: + void Add(const Fahrzeug &arg); + void Print() const; + +private: + std::vector *pFuhrpark = new std::vector; +}; + +#endif // !FUHRPARK2_H diff --git a/src/defer.h b/src/defer.h deleted file mode 100644 index b7dc7af..0000000 --- a/src/defer.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef DEFER_H -#define DEFER_H - -#include -#include - -class Defer { -public: - Defer(std::function func) : func_(func) {} - ~Defer() { func_(); } - -private: - std::function func_; -}; - -#define CONCAT_IMPL(a, b) a##b -#define CONCAT(a, b) CONCAT_IMPL(a, b) - -#define DEFER(code) Defer CONCAT(defer__, __LINE__)([&]() { code; }); - -#endif // DEFER_H diff --git a/src/main.cpp b/src/main.cpp index 2e0c183..5ac1a83 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,15 +1,22 @@ -#include "defer.h" -#include - -struct Meep { - std::string foo = "Meep!"; -}; +#include "Fahrzeug.h" +#include "Fuhrpark_1.h" +#include "Fuhrpark_2.h" int main() { - Meep *meep = new Meep(); - DEFER(delete meep); + Fuhrpark_1 f1; + Fuhrpark_2 f2; + + Fahrzeug ts("Tesla", "Model S", "M-1234", 500, 80); + f1.Add(ts); + f2.Add(ts); + + Fahrzeug pt("Porsche", "Taycan", "M-5678", 400, 90); + pt.Print(); + f1.Add(pt); + f2.Add(pt); + + f1.Print(); + f2.Print(); - DEFER(std::cout << "Goodbye, " << meep->foo << std::endl); - std::cout << "Hello, " << meep->foo << std::endl; return 0; }