Commit bc59b51ad6b3ad796f4c3f789dd084fda1a8ec95
1 parent
982549f4
Casting examples
Showing
13 changed files
with
106 additions
and
0 deletions
examples10/05-ptrconv/makefile
0 → 100644
examples10/05-ptrconv/ptrconv1.cpp
0 → 100644
examples10/05-ptrconv/ptrconv2.cpp
0 → 100644
1 | +class A { | ||
2 | +public: | ||
3 | + int a; | ||
4 | +}; | ||
5 | + | ||
6 | +class B : virtual public A { | ||
7 | + int b; | ||
8 | +}; | ||
9 | + | ||
10 | +class C : virtual public A { | ||
11 | + int c; | ||
12 | +}; | ||
13 | + | ||
14 | +class D: public B, public C | ||
15 | +{ | ||
16 | + int d; | ||
17 | +}; | ||
18 | + | ||
19 | +class E: public C, public B | ||
20 | +{ | ||
21 | + int e; | ||
22 | +}; | ||
23 | + | ||
24 | +int main() | ||
25 | +{ | ||
26 | + D d; | ||
27 | + E e; | ||
28 | + | ||
29 | + C* cptr1 = &d; | ||
30 | + C* cptr2 = &e; | ||
31 | + | ||
32 | + cptr1->a = 1; | ||
33 | + cptr2->a = 2; | ||
34 | + | ||
35 | +} | ||
36 | + |
examples11/01-cast/cast.cpp
0 → 100644
1 | +class Storable { | ||
2 | +public: | ||
3 | +virtual ~Storable(){}; | ||
4 | +}; | ||
5 | + | ||
6 | +class Component : public virtual Storable | ||
7 | +{ /* ... */ }; | ||
8 | +class Receiver : public Component | ||
9 | +{ /* ... */ }; | ||
10 | +class Transmitter : public Component | ||
11 | +{ /* ... */ }; | ||
12 | +class Radio : public Receiver, public Transmitter | ||
13 | +{ /* ... */ }; | ||
14 | + | ||
15 | +int main() | ||
16 | +{ | ||
17 | + Radio r; | ||
18 | + | ||
19 | + Storable* s = &r; | ||
20 | + | ||
21 | + Transmitter* t = dynamic_cast<Transmitter*> (&r); | ||
22 | + | ||
23 | + Component* c = t; | ||
24 | + | ||
25 | + Radio* rptr = dynamic_cast<Radio*>(c); | ||
26 | + | ||
27 | +} |
examples11/01-cast/makefile
0 → 100644
examples11/01-funptr/funptr1.cpp renamed to examples11/02-funptr/funptr1.cpp
examples11/01-funptr/funptr2.cpp renamed to examples11/02-funptr/funptr2.cpp
examples11/01-funptr/makefile renamed to examples11/02-funptr/makefile
examples11/02-new/makefile renamed to examples11/03-new/makefile
examples11/02-new/newhandler.cpp renamed to examples11/03-new/newhandler.cpp
examples11/02-new/placement2.cpp renamed to examples11/03-new/placement2.cpp
examples11/02-new/placementnew.cpp renamed to examples11/03-new/placementnew.cpp
examples11/02-new/placementnew2.cpp renamed to examples11/03-new/placementnew2.cpp