Commit 22fa8509 by Szeberényi Imre

UTF-8

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