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


f2  функция- сы анықталған  С



Pdf көрінісі
бет352/642
Дата30.03.2022
өлшемі3,66 Mb.
#29231
түріПрограмма
1   ...   348   349   350   351   352   353   354   355   ...   642
Байланысты:
pavlovskaia-jogargy-dengeili

 f2

 функция-

сы анықталған 

С

 класы сипатталған. 



demo

 функциясынан туынды класс 

объектісіне нұсқауыш берілген жағдайда ғана 

f2

 функциясын 



demo

 функ-


циясынан шақыру үшін түрлендіру нəтижесінің тексерілуі орындалатын 

dynamic_cast

 операциясы қолданылады:



#include  

#include  

class B{

   public: virtual void f1(){};

};

class C: public B{

   public: void f2(){cout << "f2";};

};

void demo(B* p){

C* c = dynamic_cast(p); 

if (c) c->f2();

else cout << "Берілген С класы емес";

}

int main(){ 

   B* b = new B;

      demo(b); // "Берілген С класы емес" 

               // хабарламасы шығарылады

      C* c = new C;

      demo(c); // "f2" (дұрыс) хабарламасы шығарылады 

      return 0;

}

Бұл мысалдағы 



dynamic_cast

  орнына С стиліндегі типтерді келтіруді 

қолданатын болсақ, мысалы:   



253

    С* с = (С*) р;

операцияның орындалу мүмкіндігін қадағалау мүмкін емес жəне 



р

 

нұсқауышы 



С

 класының объектісіне сілтеме жасамайтын болса, бұл қателіктің 

пайда болуына алып келеді.

С стилінде түрлендірудің тағы бір кемшілігі – виртуалды базалық кла-

сты туынды класқа түрлендіру мүмкін емес, бұған синтаксистік түрде тыйым 

салынған. Мұндай түрлендіру класс полиморфты жəне түрлендіру екімағыналы 

болмаған жағдайда

dynamic_cast

 операциясының көмегімен орындалуы 

мүмкін. Виртуалды базалық кластың төмендететін түрлендірілуі орында-

латын мысалды қарастырайық:





Достарыңызбен бөлісу:
1   ...   348   349   350   351   352   353   354   355   ...   642




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

    Басты бет