.


:




:

































 

 

 

 


dynamic_cast




:

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. :

:

; ;

:





:


: 2016-07-29; !; : 492 |


:

:

. .
==> ...

1761 - | 1685 -


© 2015-2024 lektsii.org - -

: 0.012 .