Files
C_C++
Cerbian
Tcl
anon_-_poller
autoconfig
bison
compile_times
cpp_zh
data
documentation
object
source
Company.cpp
Company.hpp
Contractee.cpp
Contractee.hpp
Employee.cpp
Employee.hpp
Manager.cpp
Manager.hpp
Worker.cpp
Worker.hpp
dummy_constructors.inc
help_message.h
main.cpp
rapidcsv.h
.gitignore
GNUmakefile
emil_header_guards
flex
linking
sds
1st_day_of_month.cpp
JJbY.cpp
Tp6G.cpp
access.c
alternatice_bracket.c
arrows.cpp
auto_variad.c
c.php
c_old_argument_notation.c
clear_bindings.c
cnn.c
comment_as_space.c
comp.c
compare_to.py
conditional_const.c
const.c
correct_c_equivalent.c
cpp_regex_error.cpp
current_year.cpp
dda2.cpp
does_freeing_a_const_char_pointer_warn_or_is_it_a_footgun_under_gcc.c
dog.jpg
dog2.jpg
eh.cpp
else_while.c
finalize_reprepare.c
for_ctags.cpp
for_nop_true.c
free_null.c
function_pointer_strategy.c
function_pointer_strategy2.c
gcc_include_next.c
gdb_graph.c
getopt_test.c
getter_example.cpp
gnu_decimals.c
gnu_history.c
gnu_regex.c
gnu_regex2.c
header.h
highlight.c
hw.c
index_in_initializer_list_compiler_extension.c
int.ino
is_embed_finally_here.c
is_extern_c_retarded.c
is_this_what_you_are_asking_emil.c
knr.c
levenshtein_dist_-_usage.cpp
macro_paren.c
magic.c
main.ino
manual_unrolling.c
map_initialization.cpp
ncurses_labels.c
ncurses_mv_win.cpp
ncurses_out_of_bounds.c
ncurses_plus_readline.cpp
ncurses_resize2.cpp
ncurses_resize_hello_world.cpp
ncurses_resize_test.c
ncurses_scroll.c
ncurses_text_subwin_overflow.c
nf.c
no_way.cpp
null_printf.c
null_printf.cpp
pointer_array.c
portable_namespace.c
portable_namespace.h
printf_star.c
process_renaming.c
pta.c
raylib_hw.cpp
re2c_test.c
re2c_test2.c
readline_rl_redisplay_function_NULL.c
scoping_showcase.c
screen_size_(without_curses).c
sdl_render_to_texture.cpp
self_pointer.c
sentinel_pack.c
servo1.ino
setjmp_test.cpp
shebang.c
signals.c
strategiless.c
strcmp_vs_tricks.c
strdup.c
tcc_int.c
test.c
typedef.c
unctrl.c
undefined_reference.c
usb.c
vasprintf.c
void_main.c
x.cpp
xtermio.c
xtp.cpp
Haskell
Java
LaTeX
Misc.
Python
Vim
Webdev
git
.gitignore
Makefile
tests/C_C++/cpp_zh/source/Employee.hpp
2024-07-22 19:39:19 +02:00

134 lines
2.8 KiB
C++

#ifndef EMPLOYEE_H
#define EMPLOYEE_H
#include <stdio.h>
#include <string.h>
#include <string>
#include <sstream>
#include <numeric>
/* Dolgozó ős osztály
*/
class Employee {
public:
/* ezt át menetileg használtam
*/
#if 0
/* Csúnya hack, hogy valami id/hash szerűséget kapjak
* nem 64bites rendszereken szörnyű bugokat okozna
*/
string id(){
string r = std::to_string((long)this).substr(12);
while (r.size() != 4) {
r.insert(0, 1, '0');
}
return r;
}
#endif
/* "elsődleges kulcs"
*/
int id_m;
std::string name_m;
int year_of_birth_m;
/* alap értelmezett érték születési dátumokhoz, a UNIX epoch után
*/
const static int myepoc = 1970;
/* az id_m kiosztására használatos érték;
* minden Employee létrehozásával növekszik
*/
static int id_head;
// ### ###
Employee(const std::string& name) : Employee(name, myepoc) { ; }
Employee(const std::string& name, int year_of_birth) : name_m(name), year_of_birth_m(year_of_birth) {
id_m = id_head++;
}
virtual ~Employee() { ; }
virtual int get_cost() = 0;
virtual int get_pay() = 0;
virtual void details() = 0;
virtual std::string serialize() {
return std::string() // üres string, hogy használhassuk a '+' operátort
// + std::to_string(id) + ";"
+ name_m + ";"
+ std::to_string(year_of_birth_m)
;
}
/* felhasználó álltali módosításra használt függvény;
* a sikerességet adja vissza;
* minden override először meghívja ezt a függvényt
*/
virtual bool modify(const std::string &modification) {
auto eq_pos = modification.find("=");
if (eq_pos == std::string::npos) {
return false;
}
if (modification.substr(0, eq_pos) == "birth") {
try {
year_of_birth_m = std::stoi(modification.substr(eq_pos+1));
return true;
} catch (...) {
return false;
}
}
return false;
}
/* segéd függvény az is_match() számára
*/
/* bár technikailag csak int-ekkel dolgozunk,
* semmi akadája például string-ekkel bővíteni
*/
template<typename T>
bool mycompare(char c, T a, T b) {
switch (c) {
case '>': {
return a > b;
};
case '<': {
return a < b;
};
case '=': {
return a == b;
};
}
return false;
}
bool is_match(const char * const filter) {
size_t del = strcspn(filter, "<=>");
if (del == strlen(filter)) { return false; }
try { // lehetséges konverziós hiba
std::string_view field(filter, del);
if (field == ".id") {
return mycompare(filter[del], this->id_m, std::stoi(filter + del + 1));
} else if (field == ".yeaf_of_birth") {
return mycompare(filter[del], this->year_of_birth_m, std::stoi(filter + del + 1));
}
} catch (...) { ; }
return false;
}
protected:
void common_details () {
printf("#%s: %s (%d)\n",
std::to_string(id_m).c_str(), name_m.c_str(), year_of_birth_m
);
}
};
#endif