diff --git a/C_C++/cpp_zh/source/Manager.hpp b/C_C++/cpp_zh/source/Manager.hpp new file mode 100644 index 0000000..86dab51 --- /dev/null +++ b/C_C++/cpp_zh/source/Manager.hpp @@ -0,0 +1,70 @@ +#ifndef MANAGER_H +#define MANAGER_H + +#include "Company.hpp" + +class Manager : Employee { + /* fix fizetés + */ + int pay_m; + Company * company_m; + +public: + Manager(std::string name, Company * company) + : Employee(name), pay_m(0), company_m(company) { + } + + Manager(std::string name, int year_of_birth, int pay, Company * company) + : Employee(name, year_of_birth), pay_m(pay), company_m(company) { + } + + // ### ### + + int get_cost() override { + return pay_m; + } + + /* "ennek megfelelő levonást (egészen 0-ig)" kitűzés teljesítése + */ + int get_pay() { + int r = (signed long long)(company_m->profit() * 0.01); + return std::max(get_cost() + r, 0); + } + + virtual void details() { + common_details(); + printf( + "\tBase pay: %7d\n" + "\tCalculated pay: %7d\n", + get_cost(), + get_pay() + ); + } + + bool modify(const std::string &modification) override { + if (Employee::modify(modification)) { return true; } + + auto eq_pos = modification.find("="); + try { + if (modification.substr(0, eq_pos) == "pay") { + pay_m = std::stoi(modification.substr(eq_pos+1)); + return true; + } + } catch (...) { // lehetséges `invalid_argument` vagy `out_of_range` + return false; + } + + return false; + } + + std::string serialize() { + return std::string() + + "m;" + + Employee::serialize() + ";" + + std::to_string(pay_m) + ";" + + company_m->name_m + ; + } +}; + +#endif