Оператор static_cast

Сегодня поговорим об операторе static_cast. Он используется для явных преобразований.

Мы рассмотрим три примера:

— в арифметических выражениях;

— математических функциях;

— в иерархии наследования.

Рассмотрим первый пример. Арифметические выражения.

int t = 99;
double res = static_cast<double>(t) / 2;
cout<<res<<endl;

У нас есть выражение, где мы делим целочисленную переменную t (равную 99) на 2. Если не использовать преобразование типов, то мы получим целочисленное деление, результат 49. С помощью static_cast мы t преобразуем в double и получаем результат деления также double.

Математические функции.

cout<<pow(static_cast<double>(25), 3)<<endl;

Функция pow в качестве аргумента принимает double значение. Здесь мы с помощью оператора static_cast преобразуем целочисленное значение 25 к типу double.

В иерархии наследования.

Если нам необходимо выполнить нисходящее преобразование типов. Рассмотрим простой пример.

#include <iostream>
using namespace std;

class Base
{
};

class Derived : public Base
{
};

void main()
{
Base *bp;
Derived *dp = new Derived();
bp = dp;
dp = static_cast<Derived*>(bp);
}

С помощью static_cast мы можем преобразовать указатель типа Base в указатель типа Derived.

Оператор static_cast является небезопасным, так как не выполняет динамический контроль типов. Для безопасного приведения типов необходимо использовать оператор dynamic_cast, но об этом в следующей статье)

 

Комментарии и пинги к записи запрещены.

Комментарии закрыты.

Яндекс.Метрика