Commit 22fa8509 by Szeberényi Imre

UTF-8

parent 1b9919ba
...@@ -29,8 +29,10 @@ ...@@ -29,8 +29,10 @@
</Target> </Target>
</Build> </Build>
<Compiler> <Compiler>
<Add option="-pedantic" />
<Add option="-std=c++11" />
<Add option="-Wfatal-errors" />
<Add option="-Wall" /> <Add option="-Wall" />
<Add option="-fexceptions" />
</Compiler> </Compiler>
<Unit filename="ctor_dtor.cpp" /> <Unit filename="ctor_dtor.cpp" />
<Extensions> <Extensions>
......
/** /**
* Egyszer osztlyhierarchia az ctor/dtor feladatainak bemutatshoz * Egyszerű osztályhierarchia az ctor/dtor feladatainak bemutatásához
* A pointerek tlltst csak kzvetve, az f() virtulis fggvnyen * A pointerek átállítását csak közvetve, az f() virtuális függvényen
* keresztl tudjuk megfigyelni, amit mindig a g() fggvny hv az alaposztlybl. * keresztül tudjuk megfigyelni, amit mindig a g() függvény hív az alaposztályból.
* A g() fggvnyt viszont minden konstruktorbl s destruktorbl meghvunk. * A g() függvényt viszont minden konstruktorból és destruktorból meghívunk.
* gy Attl fggen, hogy az f() virt. fggvny pointere hova mutat, * Így Attól függően, hogy az f() virt. függvény pointere hova mutat,
* ms s ms f() vltozat futnak le. * más és más f() változat futnak le.
*/ */
/** /**
* HA a DUMP makr definilt, akkor a g() fggvny az alaposztly * HA a DUMP makró definiált, akkor a g() függvény az alaposztály
* memriakpt is kirja hexadecimlisan. * memóriaképét is kiírja hexadecimálisan.
* FELTTELEZZK, hogy a memriakp elejn a virt. tbla mutatja ll. * FELTÉTELEZZÜK, hogy a memóriakép elején a virt. tábla mutatója áll.
* Ezt kvetik az adattagok. Az egyszersg kedvrt 3 db pointer az * Ezt követik az adattagok. Az egyszerűség kedvéért 3 db pointer az
* adattag amit 1,2,3 rtkkel tltnk fel. * adattag amit 1,2,3 értékkel töltünk fel.
*/ */
#define DUMP #define DUMP
...@@ -25,29 +25,29 @@ using std::endl; ...@@ -25,29 +25,29 @@ using std::endl;
/** /**
Konstruktor: Konstruktor:
* rklsi lnc vgn hvja a virtulis alaposztlyok konstruktorait. * Öröklési lánc végén hívja a virtuális alaposztályok konstruktorait.
* Hvja a kzvetlen, nem virtulis alaposztlyok konstruktorait. * Hívja a közvetlen, nem virtuális alaposztályok konstruktorait.
* Ltrehozza a sajt rszt: * Létrehozza a saját részt:
- belltja a virtulis alaposztly mutatit - beállítja a virtuális alaposztály mutatóit
- belltja a virtulis fggvnyek mutatit - beállítja a virtuális függvények mutatóit
- hvja a tartalmazott objektumok konstruktorait - hívja a tartalmazott objektumok konstruktorait
- vgrehajtja a programozott trzset - végrehajtja a programozott törzset
*/ */
/** /**
Destruktor: Destruktor:
* Megsznteti a sajt rszt: * Megszünteti a saját részt:
- vgrehajtja a programozott trzset - végrehajtja a programozott törzset
- hvja a tartalmazott objektumok destruktorait - hívja a tartalmazott objektumok destruktorait
- belltja a virtulis fggvnyek mutatit - beállítja a virtuális függvények mutatóit
- belltja a virtulis alaposztly mutatit - beállítja a virtuális alaposztály mutatóit
* Hvja a kzvetlen, nem virtulis alaposztlyok destruktorait. * Hívja a közvetlen, nem virtuális alaposztályok destruktorait.
* rklsi lnc vgn hvja a virtulis alaposztlyok destruktorait. * Öröklési lánc végén hívja a virtuális alaposztályok destruktorait.
*/ */
/// Virtulis alaposztly /// Virtuális alaposztály
struct VirtAlap { struct VirtAlap {
int* adat[3]; /// dump miatt 3 db int* int* adat[3]; /// dump miatt 3 db int*
VirtAlap() { VirtAlap() {
...@@ -55,7 +55,7 @@ struct VirtAlap { ...@@ -55,7 +55,7 @@ struct VirtAlap {
cout << "Oroklesi lanc vegen virt. alaposztaly konstruktor" << endl; cout << "Oroklesi lanc vegen virt. alaposztaly konstruktor" << endl;
g("VirtAlap()"); g("VirtAlap()");
} }
~VirtAlap() { virtual ~VirtAlap() {
cout << "Oroklesi lanc vegen alaposztaly destruktor" << endl; cout << "Oroklesi lanc vegen alaposztaly destruktor" << endl;
g("~VirtAlap()"); g("~VirtAlap()");
} }
...@@ -67,7 +67,7 @@ struct VirtAlap { ...@@ -67,7 +67,7 @@ struct VirtAlap {
virtual void f() { virtual void f() {
cout << " VirtAlap::f() vagyok" << endl; cout << " VirtAlap::f() vagyok" << endl;
} }
/// p0 cmtl l darab int*-ot r ki /// p0 címtől l darab int*-ot ír ki
void dump(void*p0, int l) { void dump(void*p0, int l) {
int **p = reinterpret_cast<int**>(p0); int **p = reinterpret_cast<int**>(p0);
for (int i = 0; i < l; i++) for (int i = 0; i < l; i++)
...@@ -86,13 +86,13 @@ struct VirtAlap { ...@@ -86,13 +86,13 @@ struct VirtAlap {
} }
}; };
/// Kzvetlen nem virt alaposztly /// Közvetlen nem virt alaposztály
struct KozvNemVirtAlap : virtual VirtAlap { struct KozvNemVirtAlap : virtual VirtAlap {
KozvNemVirtAlap() { KozvNemVirtAlap() {
cout << "Kozvetlen nem virt. alaposztaly konstruktor" << endl; cout << "Kozvetlen nem virt. alaposztaly konstruktor" << endl;
g("KozvNemVirtAlap()"); g("KozvNemVirtAlap()");
} }
~KozvNemVirtAlap() { virtual ~KozvNemVirtAlap() {
cout << "Kozvetlen nem virt. alaposztaly destruktor" << endl; cout << "Kozvetlen nem virt. alaposztaly destruktor" << endl;
g("~KozvNemVirtAlap()"); g("~KozvNemVirtAlap()");
} }
......
...@@ -2,10 +2,10 @@ ...@@ -2,10 +2,10 @@
#define CALLBACK_H #define CALLBACK_H
/// Callback objektum. /// Callback objektum.
/// Nem ismeri modellt se, s a felhasznli felletet se. /// Nem ismeri modellt se, és a felhasználói felületet se.
class GombCallback { // callback funkcihoz class GombCallback { // callback funkcióhoz
public: public:
virtual void callBack() = 0;// virtulis cb. fggvny virtual void callBack() = 0;// virtuális cb. függvény
}; };
#endif #endif
/** /**
* \file felhfelulet.h * \file felhfelulet.h
* *
* A felhasznli felletet megvalst osztlyok definicii * A felhasználói felületet megvalósító osztályok definiciói
* Nem ismeri a modellt. * Nem ismeri a modellt.
* *
*/ */
...@@ -10,14 +10,14 @@ ...@@ -10,14 +10,14 @@
#include "callback.h" #include "callback.h"
/// Gomb. /// Gomb.
/// A gomb "megnyomsra" meghvdik a nnyom() tagfggvny /// A gomb "megnyomására" meghívódik a nnyom() tagfüggvény
class Gomb { class Gomb {
GombCallback &cb; // callback objektum referencia GombCallback &cb; // callback objektum referencia
public: public:
Gomb (GombCallback &t) :cb(t) {}// referencia inic. Gomb (GombCallback &t) :cb(t) {}// referencia inic.
/// A felhasznl felleten megnyomtk a gombot /// A felhasználó felületen megnyomták a gombot
void nyom() { // megnyomtk void nyom() { // megnyomták
cb.callBack(); cb.callBack();
} }
}; };
......
/** /**
* Felhasznli fellet s a modell kapcsolata * Felhasználói felület és a modell kapcsolata
* Callback fv. dem * Callback fv. demó
* *
*/ */
#include <iostream> #include <iostream>
...@@ -13,16 +13,16 @@ using std::cin; ...@@ -13,16 +13,16 @@ using std::cin;
int main() { int main() {
Kapcsolo k1; Kapcsolo k1;
Gomb g1(k1); // itt ktjk ssze a felhasznli felletet s a modellt. Gomb g1(k1); // itt kötjük össze a felhasználói felületet és a modellt.
cout << "Megyomjuk a gombot: " << endl; cout << "Megyomjuk a gombot: " << endl;
cin.ignore(100, '\n'); cin.ignore(100, '\n');
g1.nyom(); // felleten megnyomtk g1.nyom(); // felületen megnyomták
cout << "Megint megyomjuk a gombot: " << endl; cout << "Megint megyomjuk a gombot: " << endl;
cin.ignore(100, '\n'); cin.ignore(100, '\n');
g1.nyom(); // jra g1.nyom(); // újra
cout << "Ismet megyomjuk a gombot: " << endl; cout << "Ismet megyomjuk a gombot: " << endl;
cin.ignore(100, '\n'); cin.ignore(100, '\n');
g1.nyom(); // jra g1.nyom(); // újra
return 0; return 0;
} }
/** /**
* \file modell.cpp * \file modell.cpp
* *
* A modell-t megvalst osztlyok deklarcii * A modell-t megvalósító osztályok deklarációi
* Nem ismeri a felhasznli felletet. * Nem ismeri a felhasználói felületet.
* *
*/ */
#include <iostream> #include <iostream>
...@@ -23,8 +23,8 @@ void Kapcsolo::be() { ...@@ -23,8 +23,8 @@ void Kapcsolo::be() {
cout << " Bekapcs" << endl; cout << " Bekapcs" << endl;
} }
/// GombCallback callBack fggvnynek megvalstsa /// GombCallback callBack függvényének megvalósítása
/// A felhasznli fellet ezt hvja /// A felhasználói felület ezt hívja
void Kapcsolo::callBack() { void Kapcsolo::callBack() {
if (bent) if (bent)
ki(); ki();
......
/** /**
* \file modell.h * \file modell.h
* *
* A modell-t megvalst osztlyok defincii * A modell-t megvalósító osztályok definíciói
* Nem ismeri a felhasznli felletet. * Nem ismeri a felhasználói felületet.
* *
*/ */
#ifndef MODELL_H #ifndef MODELL_H
...@@ -10,18 +10,18 @@ ...@@ -10,18 +10,18 @@
#include "callback.h" #include "callback.h"
/// Drot /// Drot
/// A drot modelljt megvalst osztly /// A drot modelljét megvalósító osztály
class Drot { class Drot {
public: public:
/// Valahogy mkodik. /// Valahogy működik.
/// A plda szempontjbl rdektelen /// A példa szempontjából érdektelen
void set() {} void set() {}
}; };
/// Kapcsol /// Kapcsoló
/// A kapcsolt modelljt megvalst osztly /// A kapcsolót modelljét megvalósító osztály
class Kapcsolo :public Drot, public GombCallback { class Kapcsolo :public Drot, public GombCallback {
bool bent; // llapot bool bent; // állapot
public: public:
Kapcsolo() :bent(false) {} Kapcsolo() :bent(false) {}
...@@ -31,8 +31,8 @@ public: ...@@ -31,8 +31,8 @@ public:
/// Bekapcsol /// Bekapcsol
void be(); void be();
/// GombCallback callBack fggvnye /// GombCallback callBack függvénye
/// A felhasznli fellet ezt hvja /// A felhasználói felület ezt hívja
void callBack(); void callBack();
}; };
#endif // MODELL_H #endif // MODELL_H
...@@ -29,8 +29,10 @@ ...@@ -29,8 +29,10 @@
</Target> </Target>
</Build> </Build>
<Compiler> <Compiler>
<Add option="-pedantic" />
<Add option="-std=c++11" />
<Add option="-Wfatal-errors" />
<Add option="-Wall" /> <Add option="-Wall" />
<Add option="-fexceptions" />
</Compiler> </Compiler>
<Unit filename="callback.h" /> <Unit filename="callback.h" />
<Unit filename="felhfelulet.h" /> <Unit filename="felhfelulet.h" />
......
/* /*
* \file polimorf.cpp * \file polimorf.cpp
* *
* Tbbszrs rkls s a polimorf viselkeds, * Többszörös öröklés és a polimorf viselkedés,
* valamint a dynamic_cast memutatsa. * valamint a dynamic_cast memutatása.
* *
* A dynamic_cast-hoz fontos, hogy a fordtskor legyen * A dynamic_cast-hoz fontos, hogy a fordításkor legyen
* engedlyezve a Run-Time Type Info (RTTI) generlsa * engedélyezve a Run-Time Type Info (RTTI) generálása
* (Vis.stud: /GR opci) * (Vis.stud: /GR opció)
* GCC-nl automatikus * GCC-nél automatikus
* *
*/ */
...@@ -16,35 +16,35 @@ ...@@ -16,35 +16,35 @@
using namespace std; using namespace std;
/// A oszty. /// A osztáy.
/// (struct: mindene publikus) /// (struct: mindene publikus)
struct A { struct A {
void f() { cout << " A::f()\n"; } void f() { cout << " A::f()\n"; }
void f(int) { cout << " A::f(int)\n"; } void f(int) { cout << " A::f(int)\n"; }
virtual ~A() {} // csak ezrt virt., hogy legyen RTTI inf virtual ~A() {} // csak ezért virt., hogy legyen RTTI infó
}; };
/// B oszty. /// B osztáy.
/// (struct: mindene publikus) /// (struct: mindene publikus)
struct B { struct B {
void f(double) { cout << " B::f(double)\n"; }; void f(double) { cout << " B::f(double)\n"; };
}; };
/// C oszty. /// C osztáy.
/// (struct: mindene publikus) /// (struct: mindene publikus)
struct C { struct C {
void f(int*) { cout << " C::f(int*)\n"; }; void f(int*) { cout << " C::f(int*)\n"; };
}; };
/// AB oszty. /// AB osztáy.
class AB :public A, public B { class AB :public A, public B {
public: public:
// Tbbszrs rklsnl az azonos nev tagfggvnyekrl a fordt felttelezi, // Többszörös öröklésnél az azonos nevű tagfüggvényekről a fordító feltételezi,
// hogy teljesen eltr viselkedst valstanak meg, ezrt egyik elrst sem // hogy teljesen eltérő viselkedést valósítanak meg, ezért egyik elérését sem
// engedi automatikusan, hiba publikus az rkls. // engedi automatikusan, hiába publikus az öröklés.
using A::f; // gy elrhetk az A-beli f()-ek using A::f; // Így elérhetõk az A-beli f()-ek
using B::f; // gy elrhet a B-beli f()is using B::f; // Így elérhető a B-beli f()is
void f() { void f() {
cout << " AB::f()\n"; cout << " AB::f()\n";
A::f(); A::f();
...@@ -53,7 +53,7 @@ public: ...@@ -53,7 +53,7 @@ public:
} }
}; };
/// Kiprobljuk... /// Kiprobáljuk...
int main() { int main() {
AB ab; AB ab;
...@@ -67,7 +67,7 @@ int main() { ...@@ -67,7 +67,7 @@ int main() {
B *Bp = &ab; // az upcast automaiikus B *Bp = &ab; // az upcast automaiikus
cout << endl << "Pointerek konvertalasa:" << endl; cout << endl << "Pointerek konvertalasa:" << endl;
AB *ABp = dynamic_cast<AB*>(Ap); // biztonsgos down cast AB *ABp = dynamic_cast<AB*>(Ap); // biztonságos down cast
if (ABp != 0) { if (ABp != 0) {
cout << "Sikeres volt a down cast" << endl; cout << "Sikeres volt a down cast" << endl;
ABp->f(); ABp->f();
...@@ -79,7 +79,7 @@ int main() { ...@@ -79,7 +79,7 @@ int main() {
if (Cp == 0) cout << "AB* nem konvertalhato C*-ra" << endl; if (Cp == 0) cout << "AB* nem konvertalhato C*-ra" << endl;
cout << endl << "Referencia konvertalasa:" << endl; cout << endl << "Referencia konvertalasa:" << endl;
// Referencia konvertlsnl a hibajelzs kivetellel jn // Referencia konvertálásánál a hibajelzés kivétellel jön
try { try {
AB& ab2 = dynamic_cast<AB&>(*Ap); AB& ab2 = dynamic_cast<AB&>(*Ap);
cout << "Sikeres volt a down cast referenciara is:" << endl; cout << "Sikeres volt a down cast referenciara is:" << endl;
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
</Build> </Build>
<Compiler> <Compiler>
<Add option="-Wall" /> <Add option="-Wall" />
<Add option="-fexceptions" />
</Compiler> </Compiler>
<Unit filename="main.cpp" /> <Unit filename="main.cpp" />
<Extensions> <Extensions>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment