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 @@
...
@@ -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>
...
...
ctor_dtor/ctor_dtor.cpp
View file @
22fa8509
/**
/**
* Egyszer
osztlyhierarchia az ctor/dtor feladatainak bemutats
hoz
* Egyszer
ű osztályhierarchia az ctor/dtor feladatainak bemutatásá
hoz
* A pointerek
tlltst csak kzvetve, az f() virtulis fggv
nyen
* 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() fggvny hv az alaposztlyb
l.
* kereszt
ül tudjuk megfigyelni, amit mindig a g() függvény hív az alaposztálybó
l.
* A g() f
ggvnyt viszont minden konstruktorbl s destruktorbl megh
vunk.
* A g() f
üggvényt viszont minden konstruktorból és destruktorból meghí
vunk.
*
gy Attl fggen, hogy az f() virt. fggv
ny pointere hova mutat,
*
Így Attól függően, hogy az f() virt. függvé
ny pointere hova mutat,
* m
s s ms f() v
ltozat futnak le.
* m
ás és más f() vá
ltozat futnak le.
*/
*/
/**
/**
* HA a DUMP makr
definilt, akkor a g() fggvny az alaposzt
ly
* HA a DUMP makr
ó definiált, akkor a g() függvény az alaposztá
ly
* mem
riakpt is kirja hexadecim
lisan.
* mem
óriaképét is kiírja hexadecimá
lisan.
* FELT
TELEZZK, 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 k
vetik az adattagok. Az egyszersg kedv
rt 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 tlt
nk 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 alaposzt
lyok konstruktorait.
*
Öröklési lánc végén hívja a virtuális alaposztá
lyok konstruktorait.
* H
vja a kzvetlen, nem virtulis alaposzt
lyok konstruktorait.
* H
ívja a közvetlen, nem virtuális alaposztá
lyok konstruktorait.
* L
trehozza a sajt r
szt:
* L
étrehozza a saját ré
szt:
- be
lltja a virtulis alaposztly mutat
it
- be
állítja a virtuális alaposztály mutató
it
- be
lltja a virtulis fggvnyek mutat
it
- be
állítja a virtuális függvények mutató
it
- hvja a tartalmazott objektumok konstruktorait
- h
í
vja a tartalmazott objektumok konstruktorait
- v
grehajtja a programozott t
rzset
- v
égrehajtja a programozott tö
rzset
*/
*/
/**
/**
Destruktor:
Destruktor:
* Megsz
nteti a sajt r
szt:
* Megsz
ünteti a saját ré
szt:
- v
grehajtja a programozott t
rzset
- v
égrehajtja a programozott tö
rzset
- hvja a tartalmazott objektumok destruktorait
- h
í
vja a tartalmazott objektumok destruktorait
- be
lltja a virtulis fggvnyek mutat
it
- be
állítja a virtuális függvények mutató
it
- be
lltja a virtulis alaposztly mutat
it
- be
állítja a virtuális alaposztály mutató
it
* H
vja a kzvetlen, nem virtulis alaposzt
lyok destruktorait.
* H
ívja a közvetlen, nem virtuális alaposztá
lyok destruktorait.
*
rklsi lnc vgn hvja a virtulis 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
{
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 c
mtl 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 {
}
}
};
};
/// K
zvetlen nem virt alaposzt
ly
/// 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()"
);
}
}
...
...
nyomogomb/callback.h
View file @
22fa8509
...
@@ -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 fel
letet 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
;
// virtu
lis cb. fggv
ny
virtual
void
callBack
()
=
0
;
// virtu
ális cb. függvé
ny
};
};
#endif
#endif
\ No newline at end of file
nyomogomb/felhfelulet.h
View file @
22fa8509
/**
/**
* \file felhfelulet.h
* \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.
* Nem ismeri a modellt.
*
*
*/
*/
...
@@ -10,14 +10,14 @@
...
@@ -10,14 +10,14 @@
#include "callback.h"
#include "callback.h"
/// Gomb.
/// 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
{
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 felhaszn
l felleten megnyomt
k a gombot
/// A felhaszn
áló felületen megnyomtá
k a gombot
void
nyom
()
{
// megnyomtk
void
nyom
()
{
// megnyomt
á
k
cb
.
callBack
();
cb
.
callBack
();
}
}
};
};
...
...
nyomogomb/gomb_demo.cpp
View file @
22fa8509
/**
/**
* Felhaszn
li 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 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
;
cout
<<
"Megyomjuk a gombot: "
<<
endl
;
cin
.
ignore
(
100
,
'\n'
);
cin
.
ignore
(
100
,
'\n'
);
g1
.
nyom
();
// fel
leten megnyomt
k
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
;
}
}
nyomogomb/modell.cpp
View file @
22fa8509
/**
/**
* \file modell.cpp
* \file modell.cpp
*
*
* A modell-t megval
st osztlyok deklarci
i
* A modell-t megval
ósító osztályok deklaráció
i
* Nem ismeri a felhaszn
li fel
letet.
* 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 f
ggvnynek megvalst
sa
/// GombCallback callBack f
üggvényének megvalósítá
sa
/// A felhaszn
li fellet ezt h
vja
/// A felhaszn
álói felület ezt hí
vja
void
Kapcsolo
::
callBack
()
{
void
Kapcsolo
::
callBack
()
{
if
(
bent
)
if
(
bent
)
ki
();
ki
();
...
...
nyomogomb/modell.h
View file @
22fa8509
/**
/**
* \file modell.h
* \file modell.h
*
*
* A modell-t megval
st osztlyok definci
i
* A modell-t megval
ósító osztályok definíció
i
* Nem ismeri a felhaszn
li fel
letet.
* 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 modellj
t megvalst oszt
ly
/// A drot modellj
ét megvalósító osztá
ly
class
Drot
{
class
Drot
{
public
:
public
:
/// Valahogy m
ko
dik.
/// Valahogy m
űkö
dik.
/// A p
lda szempontjbl
rdektelen
/// A p
élda szempontjából é
rdektelen
void
set
()
{}
void
set
()
{}
};
};
/// Kapcsol
/// Kapcsol
ó
/// A kapcsol
t modelljt megvalst oszt
ly
/// 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 f
ggv
nye
/// GombCallback callBack f
üggvé
nye
/// A felhaszn
li fellet ezt h
vja
/// A felhaszn
álói felület ezt hí
vja
void
callBack
();
void
callBack
();
};
};
#endif // MODELL_H
#endif // MODELL_H
nyomogomb/nyomogomb.cbp
View file @
22fa8509
...
@@ -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"
/>
...
...
polimorf/polimorf.cpp
View file @
22fa8509
/*
/*
* \file polimorf.cpp
* \file polimorf.cpp
*
*
* T
bbszrs rkls s a polimorf viselked
s,
* 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 ford
t
skor legyen
* A dynamic_cast-hoz fontos, hogy a ford
ítá
skor legyen
* enged
lyezve a Run-Time Type Info (RTTI) generl
sa
* 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 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: 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
:
// T
bbszrs rklsnl az azonos nev tagfggvnyekrl a fordt felt
telezi,
// T
öbbszörös öröklésnél az azonos nevű tagfüggvényekről a fordító felté
telezi,
// hogy teljesen elt
r viselkedst valstanak meg, ezrt egyik elrs
t sem
// hogy teljesen elt
érő viselkedést valósítanak meg, ezért egyik elérésé
t sem
// engedi automatikusan, hi
ba publikus az rkl
s.
// engedi automatikusan, hi
ába publikus az öröklé
s.
using
A
::
f
;
//
gy elrhet
k 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 konvert
lsnl a hibajelzs kivetellel j
n
// 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
;
...
...
virt_destruktor/virt_destruktor.cbp
View file @
22fa8509
...
@@ -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>
...
...
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