From 1b609a41fa61751fd42762b9521569ef0bb98eae Mon Sep 17 00:00:00 2001
From: anon <anon@anon.anon>
Date: Mon, 22 Jul 2024 19:39:19 +0200
Subject: [PATCH] Added 'C_C++/cpp_zh/source/Manager.hpp'

---
 C_C++/cpp_zh/source/Manager.hpp | 70 +++++++++++++++++++++++++++++++++
 1 file changed, 70 insertions(+)
 create mode 100644 C_C++/cpp_zh/source/Manager.hpp

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