Традиционные преобразования. Объявления (declarations) и определения (definitions)

Страницы работы

Фрагмент текста работы

Пример:

u*3-i

unsigned

f*3-i

float

3*s*lg

long

d+s

double

char с; short s; int i; long Ig; float f; double d; unsigned u;

Выражение

Тип

c-s/i

int

u*3.0-i

double

c+1

int

c+1.0

double

Автоматическое преобразование может происходить при присваивании:

d=i //повышение (расширение) типа

i=d //понижение (сужение) типа. Может привести к потере информации

Существует явное преобразование, называемое приведением (cast):

static_cast<double>(i)

static_cast<int>(d)

static_cast говорит компилятору, чтобы он сгенерировал такое преобразо­вание, чтобы значение после преобразования максимально соответствовало значению до преобразования.

reinterpret_cast<char*>(OxfffiO)

reinterpret_cast говорит компилятору, чтобы он сгенерировал такое преоб­разование, чтобы цепочка бит до преобразования максимально соответствовала цепочке бит после преобразования. reinterpret_cast осуществляет приведение любого типа указателя в любой тип указателя, а также приведение между инте­гральным типом и типом указателя.

dynamic_cast - для преобразования с проверкой на этапе выполнения.

const_cast<int>(c_var) - отмена действия модификатора const.

Унаследованная от С форма записи явного преобразования (не рекоменду­ется использовать):

(Т)е,

означает любое преобразование, которое может быть выражено комбина­цией static_cast, reinterpret_cast и const_cast для получения значения типа Т из выражения е.

Функциональный стиль приведения

Т(е)

Т(е1,е2) - если Т - определяемый пользователем тип

2.6. Перечисления.

Тип enum задает набор значений, определяемый пользователем. Элемента-• ми перечисления являются именованные целые константы. Например:

enum  keyword   {ASM,   AUTO,    BREAK}

- так определяется тип keyword, который может принимать значения ASM,
AUTO,   BREAK.    Кроме   того   определяются   целые   константы   ASM==0,
AUTO=1,BREAK==2.

keyword kw=ASM, kwl=BREAK;

- так определяются переменные типа keyword и инициализируются.
Можно инициализировать константы перечислимого типа произвольными

целыми значениями: enumel{a=3,b=5};

Перечислимые константы могут объявляться анонимно: enum {MIN=0, MAX=99}; enum {small, normal, big} cat;

2.7. Объявления (declarations) и определения (definitions) Прежде чем имя (идентификатор) может быть использовано в программе на C++, оно должно быть объявлено. То есть должен быть указан тип имени, чтобы компилятор знал, на сущность какого типа ссылается имя.

extern  const  double  pi;//объявлено,   но   не   определено

int  main()

{

double area;//объявлено, определено, не инициализировано double radius=5.5;//объявлено, определено, инициализировано area=pi*radius*radius;//это не инициализация, а присваивание return 0;

}

const  double  pi=3.14;//объявлено и  определено

Здесь объявления area и radius являются еще и определениями (definitions), то есть под них выделяется память. Каждая переменная может иметь несколько объявлений, но только одно определение.

Определение может инициализировать переменную. Синтаксически ини­циализация представляет собой имя идентификатора с последующим инициали­затором. Для простых переменных:

тип идентификатор = выражение; {

int   1=5;

double   x=0.777,    y=x+i;

cout«x«'\t' «у;         //   0.777   5.777

char   cl,c2='I

cout«c2;

cout«cl;

//cl   не  инициализирована //   В //мусор

Инициализировать можно при помощи произвольного выражения при ус­ловии, что все переменные и функции, используемые в выражении, определе­ны.

Инициализация обычно эффективнее, чем определение с последующим

Похожие материалы

Информация о работе