Kapitel 7
Alle Codedateien dieses Kapitels herunterladen
07_5_1_Fuhrpark.cpp
/*
* Lösung für Übung 7.5.1 - Fuhrpark
*
* In der Wahl der Klassennamen haben Sie natürlich mehrere Möglichkeiten.
* Wichtig ist nur, dass die Benennung inhaltlich Sinn ergibt.
* So wäre zum Beispiel "Banana" als Oberklasse von Cabrio und Van unlogisch.
*/
#include <iostream>
#include <string>
class Vehicle
{
};
class Bike : public Vehicle
{
};
class MotorBike : public Bike
{
};
class Bicycle : public Bike
{
};
class Car : public Vehicle
{
};
class Cabrio : public Car
{
};
class Van : public Car
{
};
// Für die dritte Unterklasse von Vehicle gibt es viele Möglichkeiten.
// Eine davon wäre das Boot.
class Boat : public Vehicle
{
};
int main()
{
Vehicle vehicle;
Bike bike;
MotorBike motorBike;
Bicycle bicycle;
Car car;
Cabrio cabrio;
Van van;
return 0;
}
07_5_2_TierHierarchie.cpp
/*
* Lösung für Übung 7.5.2 - Tierhierarchie
*/
#include <iostream>
#include <string>
class Animal
{
public:
Animal(const std::string& name)
: name(name)
{}
virtual void eat() const
{
std::cout << name << " isst" << std::endl;
}
void rename(const std::string& newName)
{
name = newName;
}
std::string getName()
{
return name;
}
protected:
std::string name;
};
class Cat : public Animal
{
public:
Cat(const std::string& name)
: Animal(name)
{
}
void eat() const override
{
std::cout << "Katze " << name << " isst eine Maus" << std::endl;
}
};
class Mouse : public Animal
{
public:
Mouse(const std::string& name)
: Animal(name)
{
}
void eat() const override
{
std::cout << "Maus " << name << " isst K\204se" << std::endl;
}
};
int main()
{
// Die Katzen sind als Konstanten definiert
const Cat mia("Mia");
const Cat carlo("Carlo");
mia.eat();
carlo.eat();
// Eine nicht-konstante Maus
Mouse mouse("Philipp");
mouse.eat();
std::cout << "Maus " << mouse.getName();
mouse.rename("Despereaux");
std::cout << " hei\341t nun " << mouse.getName();
return 0;
}
07_5_3_DigitalesWarenhaus.cpp
/*
* Lösung für Übung 7.5.3 - Digitales Warenhaus
*/
#include <iostream>
#include <string>
struct Date
{
// Sie können Standardparameter für den Konstuktor verwenden, sodass Sie auch
// ein "leeres" Datum leicht anlegen können
Date(int day = 0, int month = 0, int year = 0)
: day(day), month(month), year(year)
{
}
int day = 0;
int month = 0;
int year = 0;
// Hilfreich zur testweisen Konsolenausgabe
std::string toString()
{
return std::to_string(day) + "." + std::to_string(month) + "." + std::to_string(year);
}
};
class Article
{
public:
Article(const std::string& name, double price)
: name(name), price(price)
{
}
std::string getName()
{
return name;
}
double getPrice()
{
return price;
}
virtual void sell(const Date& currentDate)
{
std::cout << name << " verkauft" << std::endl;
}
private:
std::string name;
double price;
};
class FoodArticle : public Article
{
public:
FoodArticle(const std::string& name, double price, const Date& expirationDate)
: Article(name, price), expirationDate(expirationDate)
{
}
Date getExpirationDate()
{
return expirationDate;
}
private:
Date expirationDate;
};
class TechArticle : public Article
{
public:
TechArticle(const std::string& name, double price, int yearsOfWarranty)
: Article(name, price), yearsOfWarranty(yearsOfWarranty)
{
}
int getYearsOfWarranty()
{
return yearsOfWarranty;
}
Date getWarrantyExpirationDate()
{
return warrantyExpirationDate;
}
void sell(const Date& currentDate) override
{
std::cout << getName() << " verkauft" << std::endl;
warrantyExpirationDate = currentDate;
warrantyExpirationDate.year += yearsOfWarranty;
}
private:
int yearsOfWarranty = 0;
// Das Ablaufdatum wird erst beim Verkauf gesetzt.
Date warrantyExpirationDate;
};
int main()
{
TechArticle laptop("Thinkpad", 799, 3);
TechArticle freezer("Arktis 3000", 1200, 5);
FoodArticle milk("Vollmilch", 1.38, Date(25, 5, 2021));
const Date today(4, 5, 2021);
laptop.sell(today);
freezer.sell(today);
milk.sell(today);
std::cout << "Der Laptop hat Garantie bis zum "
<< laptop.getWarrantyExpirationDate().toString() << std::endl;
std::cout << "Der K\201hlschrank hat Garantie bis zum "
<< freezer.getWarrantyExpirationDate().toString() << std::endl;
return 0;
}
07_5_4_Preismacht.cpp
/*
* Lösung für Übung 7.5.4 - Preismacht
*/
#include <iostream>
#include <string>
struct Date
{
// Sie können Standardparameter für den Konstuktor verwenden, sodass Sie auch
// ein "leeres" Datum leicht anlegen können
Date(int day = 0, int month = 0, int year = 0)
: day(day), month(month), year(year)
{
}
int day = 0;
int month = 0;
int year = 0;
// Hilfreich zur testweisen Konsolenausgabe
std::string toString()
{
return std::to_string(day) + "." + std::to_string(month) + "." + std::to_string(year);
}
};
class Article
{
public:
Article(const std::string& name, double price)
: name(name), price(price)
{
}
std::string getName()
{
return name;
}
double getPrice()
{
return price;
}
void setPrice(double newPrice)
{
if (newPrice <= 0)
{
std::cout << "Preis nicht valide!" << std::endl;
// Der Preis wird nicht geändert
return;
}
price = newPrice;
}
virtual void sell(const Date& currentDate)
{
std::cout << name << " verkauft" << std::endl;
}
private:
std::string name;
double price;
};
class FoodArticle : public Article
{
public:
FoodArticle(const std::string& name, double price, const Date& expirationDate)
: Article(name, price), expirationDate(expirationDate)
{
}
Date getExpirationDate()
{
return expirationDate;
}
private:
Date expirationDate;
};
class TechArticle : public Article
{
public:
TechArticle(const std::string& name, double price, int yearsOfWarranty)
: Article(name, price), yearsOfWarranty(yearsOfWarranty)
{
}
int getYearsOfWarranty()
{
return yearsOfWarranty;
}
Date getWarrantyExpirationDate()
{
return warrantyExpirationDate;
}
void sell(const Date& currentDate) override
{
std::cout << getName() << " verkauft" << std::endl;
warrantyExpirationDate = currentDate;
warrantyExpirationDate.year += yearsOfWarranty;
}
private:
int yearsOfWarranty = 0;
// Das Ablaufdatum wird erst beim Verkauf gesetzt.
Date warrantyExpirationDate;
};
int main()
{
TechArticle laptop("Thinkpad", 799, 3);
TechArticle freezer("Arktis 3000", 1200, 5);
FoodArticle milk("Vollmilch", 1.38, Date(25, 5, 2021));
const Date today(4, 5, 2021);
laptop.sell(today);
freezer.sell(today);
milk.sell(today);
std::cout << "Der Laptop hat Garantie bis zum "
<< laptop.getWarrantyExpirationDate().toString() << std::endl;
std::cout << "Der K\201hlschrank hat Garantie bis zum "
<< freezer.getWarrantyExpirationDate().toString() << std::endl;
return 0;
}