Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Prog2
/
eloadas_peldak
/
ea_09
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
22fa8509
authored
Apr 09, 2019
by
Szeberényi Imre
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
UTF-8
parent
1b9919ba
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
83 additions
and
81 deletions
+83
-81
ctor_dtor/ctor_dtor.cbp
+3
-1
ctor_dtor/ctor_dtor.cpp
+30
-30
nyomogomb/callback.h
+4
-5
nyomogomb/felhfelulet.h
+4
-4
nyomogomb/gomb_demo.cpp
+6
-6
nyomogomb/modell.cpp
+4
-4
nyomogomb/modell.h
+10
-10
nyomogomb/nyomogomb.cbp
+3
-1
polimorf/polimorf.cpp
+19
-19
virt_destruktor/virt_destruktor.cbp
+0
-1
No files found.
ctor_dtor/ctor_dtor.cbp
View file @
22fa8509
...
...
@@ -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>
...
...
ctor_dtor/ctor_dtor.cpp
View file @
22fa8509
/**
* Egyszer
osztlyhierarchia az ctor/dtor feladatainak bemutats
hoz
* A pointerek
tlltst csak kzvetve, az f() virtulis fggv
nyen
* kereszt
l tudjuk megfigyelni, amit mindig a g() fggvny hv az alaposztlyb
l.
* A g() f
ggvnyt viszont minden konstruktorbl s destruktorbl megh
vunk.
*
gy Attl fggen, hogy az f() virt. fggv
ny pointere hova mutat,
* m
s s ms f() v
ltozat 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 alaposzt
ly
* mem
riakpt is kirja hexadecim
lisan.
* FELT
TELEZZK, hogy a memriakp elejn a virt. tbla mutatja
ll.
* Ezt k
vetik az adattagok. Az egyszersg kedv
rt 3 db pointer az
* adattag amit 1,2,3
rtkkel tlt
nk 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 alaposzt
lyok konstruktorait.
* H
vja a kzvetlen, nem virtulis alaposzt
lyok konstruktorait.
* L
trehozza a sajt r
szt:
- be
lltja a virtulis alaposztly mutat
it
- be
lltja a virtulis fggvnyek mutat
it
- hvja a tartalmazott objektumok konstruktorait
- v
grehajtja a programozott t
rzset
*
Ö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:
* Megsz
nteti a sajt r
szt:
- v
grehajtja a programozott t
rzset
- hvja a tartalmazott objektumok destruktorait
- be
lltja a virtulis fggvnyek mutat
it
- be
lltja a virtulis alaposztly mutat
it
* H
vja a kzvetlen, nem virtulis alaposzt
lyok destruktorait.
*
rklsi lnc vgn hvja a virtulis alaposzt
lyok 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.
*/
/// Virtu
lis alaposzt
ly
/// 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 c
mtl 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 {
}
};
/// K
zvetlen nem virt alaposzt
ly
/// 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()"
);
}
...
...
nyomogomb/callback.h
View file @
22fa8509
...
...
@@ -2,10 +2,10 @@
#define CALLBACK_H
/// Callback objektum.
/// Nem ismeri modellt se,
s a felhasznli fel
letet 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
;
// virtu
lis cb. fggv
ny
virtual
void
callBack
()
=
0
;
// virtu
ális cb. függvé
ny
};
#endif
\ No newline at end of file
#endif
nyomogomb/felhfelulet.h
View file @
22fa8509
/**
* \file felhfelulet.h
*
* A felhaszn
li felletet megvalst osztlyok definici
i
* 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 "megnyom
sra" meghvdik a nnyom() tagfggv
ny
/// 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 felhaszn
l felleten megnyomt
k a gombot
void
nyom
()
{
// megnyomtk
/// A felhaszn
áló felületen megnyomtá
k a gombot
void
nyom
()
{
// megnyomt
á
k
cb
.
callBack
();
}
};
...
...
nyomogomb/gomb_demo.cpp
View file @
22fa8509
/**
* Felhaszn
li 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 k
tjk 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
();
// fel
leten megnyomt
k
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
;
}
nyomogomb/modell.cpp
View file @
22fa8509
/**
* \file modell.cpp
*
* A modell-t megval
st osztlyok deklarci
i
* Nem ismeri a felhaszn
li fel
letet.
* 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 f
ggvnynek megvalst
sa
/// A felhaszn
li fellet ezt h
vja
/// 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
();
...
...
nyomogomb/modell.h
View file @
22fa8509
/**
* \file modell.h
*
* A modell-t megval
st osztlyok definci
i
* Nem ismeri a felhaszn
li fel
letet.
* 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 modellj
t megvalst oszt
ly
/// A drot modellj
ét megvalósító osztá
ly
class
Drot
{
public
:
/// Valahogy m
ko
dik.
/// A p
lda szempontjbl
rdektelen
/// Valahogy m
űkö
dik.
/// A p
élda szempontjából é
rdektelen
void
set
()
{}
};
/// Kapcsol
/// A kapcsol
t modelljt megvalst oszt
ly
/// 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 f
ggv
nye
/// A felhaszn
li fellet ezt h
vja
/// GombCallback callBack f
üggvé
nye
/// A felhaszn
álói felület ezt hí
vja
void
callBack
();
};
#endif // MODELL_H
nyomogomb/nyomogomb.cbp
View file @
22fa8509
...
...
@@ -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"
/>
...
...
polimorf/polimorf.cpp
View file @
22fa8509
/*
* \file polimorf.cpp
*
* T
bbszrs rkls s a polimorf viselked
s,
* 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 ford
t
skor legyen
* enged
lyezve a Run-Time Type Info (RTTI) generl
sa
* (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 ez
rt 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
:
// T
bbszrs rklsnl az azonos nev tagfggvnyekrl a fordt felt
telezi,
// hogy teljesen elt
r viselkedst valstanak meg, ezrt egyik elrs
t sem
// engedi automatikusan, hi
ba publikus az rkl
s.
using
A
::
f
;
//
gy elrhet
k 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 konvert
lsnl a hibajelzs kivetellel j
n
// 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
;
...
...
virt_destruktor/virt_destruktor.cbp
View file @
22fa8509
...
...
@@ -30,7 +30,6 @@
</Build>
<Compiler>
<Add
option=
"-Wall"
/>
<Add
option=
"-fexceptions"
/>
</Compiler>
<Unit
filename=
"main.cpp"
/>
<Extensions>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment