:
;
;
;
, , .
static_cast <> ()
, , , . , . static_cast .
, . .
dynamic_cast. , , static_cast. , dynamic_cast ,
.
dynamic_cast
.
, . , . RTTI (run-time type information) . , dynamic_cast , . dynamic_cast ,
, .
, , :
, , . , dynamic_cast . dynamic_cast .
, f2. , demo , ,
dynamic_cast :
|
|
#include <iostream.h>
#include <typeinfo.h>
class B{
public: virtual void fl () { };
};
class C: public B{
public: void f2(){cout "f2":};
};
void demo(6* p){
C* = dynamic_cast<C*>(p);
if (c) c->f2();
else cout " ";
}
int main(){
* b = new ;
demo(b); // " "
* - new ;
demo(c); // "f2" ()
Return 0;
}
dynamic_cast
, :
* = (*) ;
, PI , .
, . dynamic_cast
, . ,
:
#include <iostream.h>
#include <typeinfo.h>
class A{
public: virtual ~A(){};}
c]ass B: public virtual A{};
class C: public virtual A{};
class D: public B. public C{};
void demo(A *a){
D* d = dynamic_cast<D*>(a);
i f (d) {... }
/ / A
/ / / \
/ /
/ / \ /
/ / D
int main(){
D *d = new D; demo(d);
Return 0;
}