Операторы привидения типа
Оператор приведения типа заставляет компилятор преобразовать один тип данных в другой. Он имеет следующую форму записи. (тип) выражение Здесь элемент тип означает желаемый тип данных. Например после выполнения следующей операции приведения типа результат деления заданных чисел будет иметь тип double. double d; d = (double) 10/3; Операторы приведения типа в языке C++Язык C++ поддерживает дополнительные операторы приведения типа: const_cast, dynamic_cast, reinterpret_cast и static_cast. Их общие формы записи выглядят следующим образом. const_cast<тип> (объект) dynamic_cast<тип> (объект) reinterpret_cast<тип> (объект) static_cast<тип> (объект) Здесь элемент тип задает новый тип, а элемент объект — объект, который должен приобрести новый тип. Оператор const_cast используется для явного переопределения модификаторов const и/или volatile. Новый тип должен совпадать с исходным типом, за исключением изменения его атрибутов const или volatile. Чаще всего оператор const_cast используется для удаления атрибута const. Оператор dynamic_cast проверяет законность выполнения заданной операции приведения типа. Если такую операцию выполнить нельзя, то выражение устанавливается равным нулю. Этот оператор в основном используется для полиморфных типов. Например, если даны два полиморфных класса, В и D, причем класс D выведен из класса В, то оператор dynamic_cast всегда может преобразовать указатель D* в указатель В*. Оператор dynamic_cast может преобразовать указатель В* в указатель D* только в том случае, если адресуемым объектом является объект D. И вообще, оператор dynamic_cast будет успешно выполнен только при условии, что разрешено полиморфное приведение типов(т.е. если новый тип можно законно применять к типу объекта, который подвергается этой операции). Если операцию приведения типа выполнить нельзя, результат действия оператора dynamic_cast оценивается как нулевой. Оператор static_cast выполняет не полиморфное приведение типов. Например, его можно использовать для приведения указателя на базовый класс к типу указателя на производный класс. Его можно также использовать для любого стандартного преобразования. При этом никакие проверки во время работы программы не выполняются. Оператор reinterpret_cast переводит один тип в совершенно другой. Например, его можно использовать для перевода указателя в целый тип. Оператор reinterpret_cast следует использовать для перевода типов указателей, которые несовместимы по своей природе. Однако следует помнить, что только оператор const_cast может освободить от "обета постоянства", т.е. ни один из остальных операторов этой группы(dynamic_cast, static_cast, reinterpret_cast) не может "снять" с объекта атрибут const. |
Нет комментариев. Оставить комментарий: |