mirror of
https://github.com/szymon-jozef/ZUT-notatki.git
synced 2026-10-28 11:10:38 +01:00
bla bla
This commit is contained in:
51
uczelnia/2_semestr/programowanie/laby/lab11/zad10.cpp
Normal file
51
uczelnia/2_semestr/programowanie/laby/lab11/zad10.cpp
Normal file
@@ -0,0 +1,51 @@
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
|
||||
class StrategiaPodatkowa {
|
||||
public:
|
||||
virtual double oblicz(double kwota) const = 0;
|
||||
virtual ~StrategiaPodatkowa() = default;
|
||||
};
|
||||
|
||||
class PodatekLiniowy : public StrategiaPodatkowa {
|
||||
const double procent = 0.19;
|
||||
|
||||
public:
|
||||
double oblicz(double kwota) const override { return kwota * procent; }
|
||||
};
|
||||
|
||||
class PodatekProgresywny : public StrategiaPodatkowa {
|
||||
const double prog_1 = 0.19;
|
||||
const double prog_2 = 0.8;
|
||||
|
||||
public:
|
||||
double oblicz(double kwota) const override {
|
||||
return (kwota < 4000) ? (kwota * prog_1) : (kwota * prog_2);
|
||||
}
|
||||
};
|
||||
|
||||
class BrakPodatku : public StrategiaPodatkowa {
|
||||
public:
|
||||
double oblicz(double) const override { return 0.0; }
|
||||
};
|
||||
|
||||
class Faktura {
|
||||
std::unique_ptr<StrategiaPodatkowa> strategia;
|
||||
double kwota;
|
||||
|
||||
public:
|
||||
Faktura(std::unique_ptr<StrategiaPodatkowa> s, double kwota)
|
||||
: strategia(std::move(s)), kwota(kwota) {}
|
||||
|
||||
double kwotaDoZaplaty() const { return strategia->oblicz(kwota) + kwota; }
|
||||
};
|
||||
|
||||
int main() {
|
||||
Faktura faktura_socjalistyczna(std::make_unique<PodatekProgresywny>(), 5000);
|
||||
Faktura faktura_wolnorynkowa(std::make_unique<PodatekLiniowy>(), 5000);
|
||||
Faktura faktura_libertalinistyczna(std::make_unique<BrakPodatku>(), 5000);
|
||||
|
||||
std::cout << faktura_socjalistyczna.kwotaDoZaplaty() << std::endl;
|
||||
std::cout << faktura_wolnorynkowa.kwotaDoZaplaty() << std::endl;
|
||||
std::cout << faktura_libertalinistyczna.kwotaDoZaplaty() << std::endl;
|
||||
}
|
||||
Reference in New Issue
Block a user