| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
Объявление типов Таблица 1.13
-----------------------------------------------------------
type t; Объект типа type
type array[10]; Десять типов: array[0]-array[9]
type *ptr; ptr это указатель типа
type &ref=t; ref = ссылка на тип (C++)
type func(void); func возвращает значение типа type
void func1(type t); func1 принимает параметр типа type
struct st (type t1; type t2); структура st содержит два типа
------------------------------------------------------------
Ниже показано, как производные типы могут быть объявле-
ны в пределах класса:
class cl (* // класс cl содержит указатель ptr на тип, плюс
// функцию, принимающую параметр type (C++)
type *ptr;
public:
void func(type*);
Тип void
Void это специальный спецификатор типа, указывающий на
отсутствие каких-либо значений. Он задается в следующих си-
туациях:
- Пустой список параметров в объявлении функции:
int func(void); // функция не принимает аргументов
С++ обрабатывает 0 специальным образом. См. раздел
"Объявления и прототипы" на стр.60 и примеры кода на стр.61
оригинала.
- Когда объявленная функция не возвращает значений:
void func(int n); // возвращаемое значение отсутствует
- В качестве родового указателя. Указатель на void яв-
ляется родовым указателем на все что угодно:
void *ptr; // далее ptr может быть установлен на любой
// объект
- Выражения с проверкой типа:
extern int errfunc(); // возвращает код ошибки
...
(void) errfunc(); // значение возврата теряется
Фундаментальные типы
signed и unsigned - это модификаторы, применяемые к ин-
тегральным типам.
Фундаментальные спецификаторы типа создаются из следую-
- 41 -
щих ключевых слов:
char int signed
double long unsigned
float short
На базе этих ключевых слов вы можете построить
интегральные типы и типы с плавающей точкой, которые в сово-
купности называются арифметическими типами. Включаемый
файлlimits.h содержит определения диапазонов значений для
всех фундаментальных типов.
Интегральные типы
Типы char, short, int и long, а также их варианты
unsigned называются интегральными типами. Ниже приводятся
спецификаторы интегральных типов с помещенными в той же
строке синонимами.
Интегральные типы Таблица 1.14
-----------------------------------------------------------
char,signed char Если по умолчанию char установлен как
signed, то это синонимы
unsigned char
char,unsigned char Если по умолчанию char установлен как
unsigned, то это синонимы
signed char
int,signed int
unsigned,unsigned int
short,short int,signed short int
unsigned short,unsigned short int
long,long int,signed long int
unsigned long,unsigned long int
-----------------------------------------------------------
С типами char,short, int или long можно использовать
либо signed, либо unsigned. Если же использовать только сами
ключевые слова signed или unsigned, то они означают signed
int или unsigned int, соответственно.
В отсутствие слова unsigned обычно принимается тип
signed. Исключение возникаетв случае char. Turbo C++ позво-
ляет устанавливатьдля char умолчание signed или unsigned.
(Если вы не устанавливали это умолчание сами, то это умолча-
ние будет равно signed). Если умолчание установлено в значе-
ние unsigned, то объявление char ch объявит ch как unsigned.
Для переопределение этогоумолчания нужно задать signed char
ch. Аналогичным образом, если для char установлено умолчание
signed, то для объявления ch как unsigned char следует явно
указать unsigned char ch.
С int можно использовать либо long, либо short. Если
ключевые словаlong или short использованы сами по себе, то
они означают long int или short int, соответственно.
ANSI C не устанавливаетразмеры внутреннего представле-
ния этих типов, за исключением того, что размеры данных
short, int и long образуют неубывающую последователь-
ность"short <= int <= long". Все три типа могут быть одина-
ковыми. Это существенно для написания мобильных кодов, пред-
назначенных для переноса на другую аппаратную базу.
В Turbo C++ типы int и short эквивалентны, и имеют оба
длину 16 бит. long представляет 32-битовые объекты. Их раз-
новидность с ключевым словом signed хранятся вформате допол-
нения до двух, причем в качестве знакового бита используется
MSB (наиболее значащий бит): 0 означает положительное число,
- 42 -
1 - отрицательное (что объясняет диапазоне, приведенные в
таблице 1.9). В версиях unsigned дляхранения числа использу-
ются все биты, что дает диапазон 0-(2^n-1), где n = 8,16 или
32.
Типы с плавающей точкой
Представления и множества принимаемых значений для ти-
пов с плавающей точкой зависят от конкретной реализации; то
есть каждая новая реализация компилятора С свободна опреде-
лять их по-своему. TurboC++ использует форматы с плавающей
точкой IEEE. (Приложение А, "Стандарты ANSI, зависимые от
реализации" содержит более подробную информацию по этому
вопросу.)
float иdoubleпредставляют собой 32- и 64-разрядные типы
данных с плавающей точкой, соответственно. long можно ис-
пользовать с double для получения 80-разрядной точности
представления идентификатора с плавающей точкой: long double
test_case, например.
Распределяемая для типов с плавающей точкой память по-
казана в таблице 1.9.
Стандартные преобразования
При использовании арифметических выражений, таких как a
+b, где a и b - это данные различных арифметических типов,
Turbo C++ выполняет передвычислениемопределенные внутренние
преобразования. Эти стандартные преобразования включают в
себя перевод "низших" типов в "высшие" в интересах точности
представления и непротиворечивости данных.
Ниже приводятся шаги, выполняемые Turbo C++для преобра-
зования операндов в арифметических выражениях:
1. Все малые интегральные типы преобразовываются сог-
ласно таблице 1.15. После этого любые два значения, участву-
ющие в операции, становятся либо Int (включая модификаторы
long и unsigned), либо double, float или long double.
2. Если один из операндов имеет тип long double, то
второй операнд также будет преобразован к типу long double.
3. Иначе, если один из операндов имеет тип double, то
второй операнд также будет преобразован к типу double.
4. Иначе, если один из операндов имеет тип float, то
второй операнд также будет преобразован к типу float.
5. Иначе, если один из операндов имеет тип unsigned
long, то второй операнд также будет преобразован к типу
unsigned long.
6. Иначе, если один из операндов имеет тип long, то
второй операнд также будет преобразован к типу long.
7. Иначе, если один из операндов имеет тип unsigned, то
второй операнд также будет преобразован к типу unsigned.
8. В противном случае оба операнда имеют тип Int.
Результат вычисления выражения будет того же типа, что
и оба участвующих в нем операнда.
|
adfun.ru
|
|
|
|