Розділ ІІІ. МОВИ ПРОГРАМУВАННЯ С ТА С++
Специфікатор static-cast указує на перетворення споріднених типів, тобто такі, що можуть здійснюватися неявно, на основі правил за умовчанням. Використовується для уникнення попередження ком- пілятора про можливу втрату точності.
Приклад 3.96. Перетворення типів static-cast:
double d=55.0;
int i=static-cast<int>(d);
■
Крім того, покажчик на void* можна перетворювати на покажчик довільного типу, арифметичне значення – на enum, а базовий клас – на похідний.
Приклад 3.97. Перетворення типів static-cast із використанням void*:
void *p;
int *pi=static-cast <int*>(p);
■
Специфікатор dynamic-cast використовується для динамічного перетворення типів, що реалізується на етапі виконання, і безпечного зведення покажчика на базовий клас до покажчика на похідний
(знижувальне зведення).
Увага! Це єдиний формат перетворення, що перевіряє, чи підтри- мується об'єктом заданий інтерфейс (до якого зводять); якщо ні – то результат 0 ►
Отже, перетворення dynamic-cast виконує відразу дві операції: пе- ревіряє, чи можливе перетворення, а якщо можливе – то здійснює його. Таке перетворення типів, що виконується під час роботи про- грами, безпечніше за інші.
Приклад 3.98. Перетворення типів dynamic-cast:
class A {...};
class B:public A {...}; class C:public A {...};
void f(A* pa)
{
B* pb=dynamic-cast<B*>(pa); if(pb){
/*якщо pa є об'єктом типу B, то виконується перетво-
рення
і працюємо з об'єктом pb*/
…