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



Pdf көрінісі
бет229/466
Дата20.07.2022
өлшемі3,66 Mb.
#37798
түріПрограмма
1   ...   225   226   227   228   229   230   231   232   ...   466
Байланысты:
pavlovskaia-jogargy-dengeili

C* c = new C;
demo(c); // "f2" (дұрыс) хабарламасы шығарылады 
return 0;
}
Бұл мысалдағы 
dynamic_cast
орнына С стиліндегі типтерді келтіруді 
қолданатын болсақ, мысалы:


253
С* с = (С*) р;
операцияның орындалу мүмкіндігін қадағалау мүмкін емес жəне 
р
нұсқауышы 
С
класының объектісіне сілтеме жасамайтын болса, бұл қателіктің 
пайда болуына алып келеді.
С стилінде түрлендірудің тағы бір кемшілігі – виртуалды базалық кла-
сты туынды класқа түрлендіру мүмкін емес, бұған синтаксистік түрде тыйым 
салынған. Мұндай түрлендіру класс полиморфты жəне түрлендіру екімағыналы 
болмаған жағдайда, 
dynamic_cast
операциясының көмегімен орындалуы 
мүмкін. Виртуалды базалық кластың төмендететін түрлендірілуі орында-
латын мысалды қарастырайық:
#include  
#include  
class A{ // A
public: virtual ~A(){};}; // / \
class B: public virtual A{}; // B C
class C: public virtual A{}; // \ /
class D: public B, public C{}; // D
void demo(A *a){
D* d = dynamic_cast(a); 
if (d) { ... }
}
int main(){
D *d = new D; demo(d); 
return 0;
}
Сілтемелерді түрлендіру
Аргумент-сілтеме үшін түрлендіру операциясының мағынасы 
нұсқауыштарқа қарағанда өзгешелеу болып келеді. Сілтеме əрқашанда 
нақты көрсетілетін объектіге нұсқайтын болғандықтан, 
dynamic_cast
опе-
рациясы дəл осы объектінің типіне түрлендіруді орындауы керек. Келтіру 
операциясының дұрыстығы автоматты түрде тексеріледі, сəйкессіздік 
жағдайында 
bad_cast
аластамасы туындайды:


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




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

    Басты бет