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
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/
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