![]() |
|
Программирование >> Расширенная версия языка c++
преобразование типа лишает указатель ртбута const . v = const cast<int *> (р) ; , . . *v = 100; теперь указатель v может изменить объект int raainO . . < int x = 99; cout Объект х перед вызовом функции равен endl; f их); cou Объект х после вызова функции равен endl; return 0; Ниже представлен результат выполнения программы: Объект х перед вызовом функции равен: 99 . Объект х после вызова функции равен: 100 Как видите, несмотря на то что параметром функциО задан постоянный указатель, вызов этой функции с объектом х в качестве параметра изменил значение объекта. ![]() Возможность снятия оператором const cast атрибута const при выполнении операция приведения типов потенциально очень опасна. Пользоваться этой возможностью следует с величайшей осторожностью. 3. Оператор cast, по существу, предназначен для замены прежнего оператора приведения типов. Он просто выполняет операцию приведения типов над объеьсгами неполиморфных ьслассов. Например, в следующей программе тип float приводится к типу int. . i Пример использования оператора static cast tinclude <iostream> using namespace std; . , . , : : inrt- ; , j int main () int i; . .. float f; f = 199.22; . i = static cast<int> (f); Глава 12. Динамическая жация и приведение типов 379 cou i; . . . , л т.,. i-,; return 0; * - jT Упражнения! 1. Объясните, зачем нужны операторы и 2. В следующей программе имеется ошибка. Исправьте ее с помощью оператора finclude <iostream> usin space std; void f (const double Si) { i = 100; Ошибка! Исправьте ее с помощью оператора constcast int main () . , , { , . double x = 98.6; , cou< x endl; f(x); cou endl; . return 0; . . jL 3. Объясните, почему оператор const cast следует использовать только в самых крайних случаях. ![]() Проверка усвоения материала главы Теперь вам необходимо выполните дающие упражнения и ответить на вопросы. 1. Опишите операции, которые можно выполнить с помощью оператора typeid. 2. Какой заголовок нужно включить в вашу программу для использования оператора typeid? class A { virtual void f() {} class B: public A { class C: public В { A *p, a ob; В b ob; С C ob; cou Ввейте О для объектов типа А, ; cou 1 для объектов типа В или ; cou 2 для объектов типа С.\п ; ci i ; if (i-=l> p = Sbjob; . .. else if (i-=2) p = Sc ob; else p = Sa ob; выведите на экран сообщение о типе выбранного пользователем объекта return 0; 5. Объясните, каким образом оператор typeid можно иногда заменить оператором dynamic cast. 6. Тип какого объекта можно определить с помощью оператора typeid? 3. Помимо стандартного приведения типов, в C++ определено для этой цели еще четыре оператора. Что это за операторы и зачем они нужны? 4. Допишите следующую программу, чтобы на экран выводилась информация о выбранном пользователем типе объекта. linclude <iostream> #include <typeinfo> using namespace std;
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |