#include <iostream>
#include "orokles.cpp"
#include "destruktor_this.cpp"
#include "binaris.cpp"
using namespace std;
int main() {
setlocale(LC_ALL, "");
cout << "==== Öröklés 3 fajtája: Műhely eszközök példája ====" << endl;
cout << "\n--- Public öröklés ---" << endl;
AltalanosEszkoz kalapacs("Kalapács", 1.2, "KAL123", "GY-KAL");
kalapacs.mutat();
kalapacs.kiirPublic(); // ősosztály public metódusa
kalapacs.nev = "Gumikalapács"; // közvetlenül módosítható (public öröklés)
kalapacs.kiirPublic();
cout << "\n--- Protected öröklés ---" << endl;
BelsoHasznalat belsoGep("Ipari Prés", 250.0, "PR250", "GY-PRS");
belsoGep.belsoInfo();
// belsoGep.kiirPublic(); // <- fordítási hiba (protected öröklés miatt az ős public tagjai kívülről nem érhetők el)
cout << "\n--- Private öröklés ---" << endl;
TitkosFejlesztes prototipus("Lézeres Vágó", 120.0, "LX9000", "GY-LX9");
prototipus.riport();
// prototipus.kiirPublic(); // <- fordítási hiba (private öröklés, az ős "arca" rejtett)
cout << "\n==== Virtual / polimorfizmus példa ====" << endl;
Alakzat* a1 = new Kor(2.0);
Alakzat* a2 = new Negyzet(4.0);
cout << "Kor területe: " << a1->terulet() << endl;
cout << "Négyzet területe: " << a2->terulet() << endl;
delete a1;
delete a2;
// 3.
cout << "\n--- Destruktor (dinamikus memória) ---\n";
{
DinTomb dt(5); // scope/blokk végén felszabadul
}
// 4.
cout << "\n--- this pointer: method chaining ---\n";
User u;
u.setName("Példa Elemér").setAge(23).print();
cout << "\n--- this pointer: paraméternév ütközés ---\n";
// 5.
cout << "\n--- Bináris vs. CSV összehasonlítás + random elérés ---\n";
auto v = generalas(1'000'000);
auto msWB = binaris_iras("adatok.bin", v);
vector<Adat> vb;
auto msRB = binaris_olvasas("adatok.bin", vb);
auto msWT = csv_iras("adatok.csv", v);
vector<Adat> vt;
auto msRT = csv_olvasas("adatok.csv", vt);
cout << "BIN írás: " << msWB << " ms, olvasás: " << msRB
<< " ms, fájlméret: " << fajlmeret("adatok.bin") << " B\n";
cout << "CSV írás: " << msWT << " ms, olvasás: " << msRT
<< " ms, fájlméret: " << fajlmeret("adatok.csv") << " B\n";
auto csB = egyezes_ellenorzes(vb);
auto csT = egyezes_ellenorzes(vt);
cout << "egyezes_ellenorzes egyezés (bin vs csv)? "
<< (csB == csT ? "igen" : "nem") << endl;
if (!vb.empty()) {
cout << "BIN első: " << vb.front().id << " " << vb.front().ertek
<< ", utolsó: " << vb.back().id << " " << vb.back().ertek << endl;
}
if (!vt.empty()) {
cout << "CSV első: " << vt.front().id << " " << vt.front().ertek
<< ", utolsó: " << vt.back().id << " " << vt.back().ertek << endl;
}
Adat rec{};
if (bin_kiolvasas("adatok.bin", 123456, rec)) {
cout << "Random rekord [123456] -> id=" << rec.id
<< ", ertek=" << rec.ertek << endl;
}
else {
cout << "Random rekord olvasás sikertelen.\n";
}
return 0;
}