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



Pdf көрінісі
бет228/465
Дата09.01.2023
өлшемі3,66 Mb.
#60709
түріПрограмма
1   ...   224   225   226   227   228   229   230   231   ...   465
Байланысты:
аибм сплюс

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   ...   224   225   226   227   228   229   230   231   ...   465




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

    Басты бет