:
class { / *... * / };
class : public { /*... */ };
* = new ;
* b = dynamic_cast<B*>(c); // * b = ;
29.3.
dynamic_cast , :
#include <iostream.h>
#include <typeinfo.h>
class B{
public: virtual void fl () { };
};
class C: public B{
public: void f2(){... };
};
class D: public B{... };
void demo(D* p){
C* = dynamic_cast<C*>(p);
if(c)c->f2();
else cout " ";
}
int main(){
B* b = new C: demo((D*)b);
return 0:
}
D . demo D, , D demo .
, :
#include <iostream.h>
finclude <typeinfo.h>
class B{
public: virtual void fl () {... }; / /
}: // \ /
class C{ // D
public: virtual void f2(){... };
};
class D: public B, public C{};
void demo(B* b){
* = dynamic_cast<C*>(b);
if(c)c->f2();
}
int main(){
D* d = new D; demo(d);
Return 0;
}
D , . demo , D, .
!!! static_cast!
- ,
. , dynamic_cast . , bad_cast:
#include <iostream.h>
#include <typeinfo.h>
class B{
public: virtual void fl () { };
};
class C: public B{
public: void f2(){... };
};
void demo(B& p){
try{
C& = dynamic_cast<C&>(p);
C.f2();
catch(bad_cast){
}
}
int main(){
B* b = new B; demo(*b); //
* = new ; demo(*c); //
Return 0;
}
!!! reinterpret_cast!
. .
( ) , , , . Object.
,
|
|
, , . . ,
. , , .
. .
.
+ (, ).
(, );
(, -, , );
.
30.3. :
:
; ;
: