Сегодня поговорим об операторе 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, но об этом в следующей статье)