Программирование >>  Расширенная версия языка c++ 

1 ... 121 122 123 [ 124 ] 125 126 127 ... 227


преобразование типа лишает указатель ртбута 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;



1 ... 121 122 123 [ 124 ] 125 126 127 ... 227

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика