This commit is contained in:
2026-05-12 17:10:45 +02:00
parent 2b9fa6f3ad
commit 4db9e10dd6
2 changed files with 17 additions and 19 deletions

View File

@@ -1,7 +1,6 @@
#include <cstddef> #include <cstddef>
#include <iostream> #include <iostream>
#include <memory> #include <memory>
#include <ostream>
#include <string> #include <string>
#include <vector> #include <vector>
@@ -17,11 +16,6 @@ public:
os << adres.ulica << " mieszkania " << adres.nr_mieszkania; os << adres.ulica << " mieszkania " << adres.nr_mieszkania;
return os; return os;
} }
friend std::ostream &operator<<(std::ostream &os, Adres &adres) {
os << adres.ulica << " mieszkania " << adres.nr_mieszkania;
return os;
}
}; };
class Pracownik { class Pracownik {
@@ -31,11 +25,14 @@ protected:
std::unique_ptr<Adres> adres; std::unique_ptr<Adres> adres;
public: public:
virtual float obliczWyplate() = 0; virtual float obliczWyplate() const = 0;
Pracownik(std::string imie, float pensja, std::unique_ptr<Adres> adres) Pracownik(std::string imie, float pensja, std::unique_ptr<Adres> adres)
: imie(imie), pensja(pensja), adres(std::move(adres)) {} : imie(imie), pensja(pensja), adres(std::move(adres)) {}
virtual ~Pracownik() = default; virtual ~Pracownik() = default;
friend std::ostream &operator<<(std::ostream &os, Pracownik &p) {
friend std::ostream &operator<<(std::ostream &os, const Pracownik &p) {
os << p.imie << " zarabia " << p.obliczWyplate() << " i mieszka na " os << p.imie << " zarabia " << p.obliczWyplate() << " i mieszka na "
<< *(p.adres); << *(p.adres);
return os; return os;
@@ -43,12 +40,11 @@ public:
}; };
class PracownikEtatowy : public Pracownik { class PracownikEtatowy : public Pracownik {
public: public:
PracownikEtatowy(std::string imie, float pensja, std::unique_ptr<Adres> adres) PracownikEtatowy(std::string imie, float pensja, std::unique_ptr<Adres> adres)
: Pracownik(imie, pensja, std::move(adres)) {} : Pracownik(imie, pensja, std::move(adres)) {}
float obliczWyplate() override { return pensja; } float obliczWyplate() const override { return pensja; }
}; };
class Zleceniobiorca : public Pracownik { class Zleceniobiorca : public Pracownik {
@@ -58,14 +54,15 @@ public:
Zleceniobiorca(std::string imie, float pensja, std::unique_ptr<Adres> adres, Zleceniobiorca(std::string imie, float pensja, std::unique_ptr<Adres> adres,
float godziny) float godziny)
: Pracownik(imie, pensja, std::move(adres)), godziny(godziny) {} : Pracownik(imie, pensja, std::move(adres)), godziny(godziny) {}
float obliczWyplate() override { return pensja * godziny; }
float obliczWyplate() const override { return pensja * godziny; }
}; };
class Dzial { class Dzial {
std::vector<std::shared_ptr<Pracownik>> pracownicy; std::vector<std::shared_ptr<Pracownik>> pracownicy;
public: public:
Dzial() {}; Dzial() = default;
void dodajPracownika(std::shared_ptr<Pracownik> pracownik) { void dodajPracownika(std::shared_ptr<Pracownik> pracownik) {
pracownicy.push_back(pracownik); pracownicy.push_back(pracownik);
@@ -73,7 +70,7 @@ public:
float sumaWyplat() const { float sumaWyplat() const {
float sum = 0; float sum = 0;
for (auto &pracownik : pracownicy) { for (const auto &pracownik : pracownicy) {
sum += pracownik->obliczWyplate(); sum += pracownik->obliczWyplate();
} }
return sum; return sum;
@@ -94,11 +91,11 @@ public:
Kierownik(std::string imie, float pensja, std::unique_ptr<Adres> adres) Kierownik(std::string imie, float pensja, std::unique_ptr<Adres> adres)
: PracownikEtatowy(imie, pensja, std::move(adres)) {} : PracownikEtatowy(imie, pensja, std::move(adres)) {}
float obliczWyplate() override { return pensja; } float obliczWyplate() const override { return pensja; }
float sumaWyplatZespolu() { float sumaWyplatZespolu() const {
float sum = 0; float sum = 0;
for (auto &pracownik : podwladni) { for (const auto &pracownik : podwladni) {
sum += pracownik->obliczWyplate(); sum += pracownik->obliczWyplate();
} }
return sum; return sum;
@@ -108,8 +105,8 @@ public:
}; };
int main() { int main() {
Kierownik kierownik = Kierownik( Kierownik kierownik("Stasiek", 238943,
"Stasiek", 238943, std::make_unique<Adres>("Wojska polskiego", 23)); std::make_unique<Adres>("Wojska polskiego", 23));
kierownik.dodajPracownika(std::make_shared<PracownikEtatowy>( kierownik.dodajPracownika(std::make_shared<PracownikEtatowy>(
"Bożena", 2500, std::make_unique<Adres>("Żołnierska", 18))); "Bożena", 2500, std::make_unique<Adres>("Żołnierska", 18)));
@@ -118,6 +115,7 @@ int main() {
"Adam", 6700, std::make_unique<Adres>("Wiejska", 1), 30)); "Adam", 6700, std::make_unique<Adres>("Wiejska", 1), 30));
std::cout << "Pracownicy sumarycznie zarabiają: " std::cout << "Pracownicy sumarycznie zarabiają: "
<< kierownik.sumaWyplatZespolu(); << kierownik.sumaWyplatZespolu() << std::endl;
return 0; return 0;
} }