Программалау оқулық Алматы, 012 Қазақстан Республикасы Білім жəне ғылым министрлігінің «Оқулық»



Pdf көрінісі
бет229/465
Дата23.05.2022
өлшемі3.66 Mb.
#458577
түріПрограмма
1   ...   225   226   227   228   229   230   231   232   ...   465
pavlovskaia-jogargy-dengeili

#include  
#include  
class B{
public: virtual void f1(){};
};
class C: public B{
public: void f2(){ ... };
};
void demo(B& p){ 


254
try{
C& c = dynamic_cast(p); c.f2();
}
catch(Bad_cast){ 
...
}
}
int main(){
B* b = new B; demo(*b); // Аластама туындайды
С* c = new C; demo(*c); // Дұрыс
return 0;
}
Қиылысқан түрлендіру
dynamic_cast
операциясы бір базалық кластың туынды кластарының 
арасындағы түрлендіруді қауіпсіз түрде орындауды қамтамасыз етеді, мысалы:
#include  
#include  
class B{
public: virtual void f1(){};
};
class C: public B{
public: void f2(){ ... };
};
class D: public B{ ... }; 
void demo(D* p){
C* c = dynamic_cast(p); 
if(c)c->f2();
else cout <<" орындалмады ";
}
int main(){
B* b = new C; demo((D*)b); 
return 0;
}
С
жəне 
D
кластары 
В
класынан туынды болып табылады. 
demo
функци-
ясына 
D
класының нұсқауышы беріледі, ол шын мəнінде, оған «ағайынды» 
болып табылатын 
С
класына нұсқауыш болып табылады, сондықтан
 D
класы-
нан 
С
класына типті динамикалық түрде түрлендіру 
demo
функциясында сəтті 
аяқталады.
ЕСКЕРТУ 
Функцияға берілетін нұсқауыш жасанды түрде тек типті динамикалық түрлендірудің
мүмкіндігін көрсету үшін қалыптастырылған.


255
Қажет болса, бір туынды кластың базалық кластары арасындағы 
түрлендіруді де жүзеге асыруға болады, мысалы:


Достарыңызбен бөлісу:
1   ...   225   226   227   228   229   230   231   232   ...   465




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет