Типы данных С++

Автор работы: Пользователь скрыл имя, 19 Февраля 2012 в 20:06, курсовая работа

Описание работы

Разрабатывая Си с классами, позднее Си++, Страуструп также написал программу Cfront, транслятор, который перерабатывал исходный код Си с классами в исходный код простого Си. Новый язык, неожиданно для самого автора, приобрел большую популярность среди коллег и вскоре Страуструп уже не мог лично поддерживать его, отвечая на тысячи вопросов.

Содержание работы

Введение………………………………………………………………………………..3
Основная часть…………………………………………………………………………5
Типы данных С++…………………………………………………………………..5
1.1 Литералы…………………………………………………………………………...5
1.2 Переменные………………………………………………………………………...9
1.3 Указатели………………………………………………………………………….12
Строковые типы…………………………………………………………………..14
Классы……………………………………………………………………………..15
2.1 Определение класса………………………………………………………………15
2.2 Друзья……………………………………………………………………………..16
Объекты классов………………………………………………………………….18
Библиотека iostream……………………………………………………………….20
Заключение……………………………………………………………………………23
Глоссарий……………………………………………………………………………..25
Список использованных источников…………………

Файлы: 1 файл

программирование (классы).doc

— 350.00 Кб (Скачать файл)

     Содержание

    Введение………………………………………………………………………………..3

    Основная часть…………………………………………………………………………5

  1. Типы данных С++…………………………………………………………………..5

    1.1 Литералы…………………………………………………………………………...5

    1.2 Переменные………………………………………………………………………...9

    1.3 Указатели………………………………………………………………………….12

    1. Строковые типы…………………………………………………………………..14
  1. Классы……………………………………………………………………………..15

    2.1 Определение класса………………………………………………………………15

    2.2 Друзья……………………………………………………………………………..16

    1. Объекты классов………………………………………………………………….18
  1. Библиотека iostream……………………………………………………………….20

    Заключение……………………………………………………………………………23

    Глоссарий……………………………………………………………………………..25

    Список использованных источников………………………………………………..27

    Приложения…………………………………………………………………………..29

     Введение

     Бьерн Страуструп начал работать над «Си с классами» в 1979 году. Идея создания нового языка берёт начало от опыта программирования Страуструпа для диссертации. Он обнаружил, что язык моделирования Симула, имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает очень медленно.

     В то же время язык BCPL был достаточно быстр, но слишком близок к языкам низкого уровня и не подходил для разработки большого программного обеспечения. Страуструп начал работать в «Bell Labs» над задачами теории очередей, в приложении к моделированию телефонных вызовов. Попытки применения существующих в то время языков моделирования оказались неэффективными. Вспоминая опыт своей диссертации, Страуструп решил дополнить язык Си (преемник BCPL) возможностями, которые имелись в языке Симула. Язык Си, будучи базовым языком системы UNIX, на которой работали компьютеры «Bell» является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами. В результате чего, практические задачи моделирования оказались доступными для решения как с точки зрения времени разработки (благодаря использованию Симула - подобных классов) так и с точки зрения времени вычислений, благодаря быстродействию языка Си. В начале в Си были добавлены классы с инкапсуляцией, производные классы, строгая проверка типов, inline-функции и аргументы по умолчанию.

     Разрабатывая  Си с классами, позднее Си++, Страуструп также написал программу Cfront, транслятор, который перерабатывал исходный код Си с классами в исходный код простого Си. Новый язык, неожиданно для самого автора, приобрел большую популярность среди коллег и вскоре Страуструп уже не мог лично поддерживать его, отвечая на тысячи вопросов.

     В 1983 г. произошло переименование языка  из Си с классами в Си++ по соображениям маркетинга. Кроме того, в него были добавлены новые возможности: виртуальные функции, перегрузка функций и операторов, константы, ссылки, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). Его первый коммерческий выпуск состоялся в октябре 1985 г.. В 1985 г. вышло первое издание «Языка программирования Си++», обеспечивающее первое описание этого языка, что являлось чрезвычайно важным из-за отсутствия официального стандарта. В 1989 г. состоялся выход языка Си++ новой версии. Его новые возможности включали множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищённые члены. В 1990 г. вышло «Комментированное справочное руководство по C++»,которое впоследствии было положено в основу стандарта. Последние обновления включали шаблоны, пространства имён, исключения, новые способы приведения типов и булевский тип.

     Стандартная библиотека С++ также развивалась вместе с ним. Первым добавлением к стандартной библиотеке Си++ стали потоки ввода/вывода, которые обеспечивали средства для замены традиционных функций Си printf и scanf. Позднее самым значительным развитием стандартной библиотеки стало включение в неё Стандартной библиотеки шаблонов.

     После многих лет работы совместный комитет ANSI-ISO стандартизировал Си++ в 1998 г. (ISO/IEC 14882:1998). В течение нескольких лет  после официального выхода стандарта  комитет обрабатывал сообщения  об ошибках и в итоге выпустил исправленную версию стандарта Си++ в 2003 году.

     Никто не обладает правами на язык Си++, так как он является свободным. Однако сам документ стандарта языка, за исключением черновиков, не доступен бесплатно.

     Основная  часть

     1. Типы дпнных С++.

    1.1 Литералы.

     В С++ имеется набор встроенных типов данных для представления целых и вещественных чисел, символов, а также тип данных - “символьный массив”, который служит для хранения символьных строк. Тип char служит для хранения отдельных символов и небольших целых чисел. Он занимает один машинный байт. Типы short, int и long предназначены для представления целых чисел. Эти типы различаются только диапазоном значений, которые могут принимать числа, а конкретные размеры перечисленных типов зависят от реализации. Обычно short занимает половину машинного слова, int – одно слово, long – одно или два слова. В 32-битных системах int и long, как правило, одного размера.

     Типы float, double и long double предназначены для  чисел с плавающей точкой и  различаются точностью представления или иначе говоря количеством значащих разрядов и диапазоном1. Обычно float (одинарная точность) занимает одно машинное слово, double (двойная точность) – два, а long double (расширенная точность) – три. 
char, short, int и long вместе составляют целые типы, которые, в свою очередь, могут быть как знаковыми (signed) так и беззнаковыми (unsigned). В знаковых типах самый левый бит служит для хранения знака (0 – плюс, 1 – минус), а оставшиеся биты содержат значение. В беззнаковых же типах, все биты используются для значения. 8-битовый тип signed char может представлять значения от -128 до 127, а unsigned char – от 0 до 255.

     Когда в программе встречается некоторое  число, например 1, то это число называется литералом, или литеральной константой. Константой, потому что мы не можем изменить его значение, и литералом, потому что его значение фигурирует в тексте программы. Литерал является неадресуемой величиной: хотя реально он, конечно, хранится в памяти машины, нет никакого способа узнать его адрес. Каждый литерал имеет определенный тип. Так, 0 имеет тип int, 3.14159 – тип double.

     Литералы  целых типов можно записать в  десятичном, восьмеричном и шестнадцатеричном  виде. Вот как например выглядит число 20, представленное десятичным, восьмеричным и шестнадцатеричным литералами:

20 // десятичный 
024 // восьмеричный 
0х14 // шестнадцатеричный

Если  литерал начинается с 0, он интерпретируется как восьмеричный, если с 0х или 0Х, то как шестнадцатеричный. Привычная запись рассматривается как десятичное число. 
По умолчанию все целые литералы имеют тип signed int. Можно явно определить целый литерал как имеющий тип long, приписав в конце числа букву L (используется как прописная L, так и строчная l).

Буква U (или u) в конце определяет литерал  как unsigned int, а две буквы – UL или LU – как тип unsigned long. Например:

128u 1024UL 1L 8Lu

Литералы, которые представляют действительные числа, могут быть записаны как с десятичной точкой, так и в экспоненциальной нотации2. По умолчанию они имеют тип double. Для явного указания типа float нужно использовать суффикс F или f, а для long double - L или l, но только в случае записи с десятичной точкой. Например:

3.14159F 0/1f 12.345L 0.0

3el 1.0E-3E 2. 1.0L

Слова true и false являются литералами логического типа bool. 
Представимые литеральные символьные константы записываются как символы в одинарных кавычках. Например:

'a' '2' ',' ' ' (пробел)

     Специальные символы - табуляция, возврат каретки, записываются как escape-последовательности. Определены следующие такие последовательности, они начинаются с символа обратной косой черты:

новая строка \n

горизонтальная  табуляция \t

забой \b

вертикальная  табуляция \v

возврат каретки \r

прогон  листа \f

звонок \a

обратная  косая черта \\

вопрос \?

одиночная кавычка \'

двойная кавычка \"

escape-последовательность  общего вида имеет форму \ooo, где ooo – от одной до трех восьмеричных цифр. Это число является кодом символа. Используя ASCII-код, мы можем написать следующие литералы:

\7 (звонок) \14 (новая строка)

\0 (null) \062 ('2')

     Символьный  литерал может иметь префикс L (например, L'a'), что будет означать специальный тип wchar_t – двухбайтовый символьный тип, который применяется для хранения символов национальных алфавитов, если они не могут быть представлены обычным типом char, как, к примеру, китайские или японские буквы. 
Строковый литерал – строка символов, заключенная в двойные кавычки3. Такой литерал может занимать и несколько строк, в таком случае в конце строки ставится обратная косая черта. Специальные символы могут быть представлены своими escape-последовательностями. Вот примеры строковых литералов:

"" (пустая строка)

"a"

"\nCC\toptions\tfile.[cC]\n"

"a multi-line \

string literal signals its \

continuation with a backslash"

     Фактически  строковый литерал представляет собой массив символьных констант, где по соглашению языков С и С++ последним элементом всегда является специальный символ с кодом 0 (\0). 
Литерал 'A' задаёт единственный символ А, а строковый литерал "А" задаёт массив из двух элементов: 'А' и \0 (пустого символа). 
Раз существует тип wchar_t, существуют и литералы этого типа, обозначаемые, как и в случае с отдельными символами, префиксом L:

L"a wide string literal"

     Строковый литерал типа wchar_t – это массив символов того же типа, завершенный  нулем. 
Если в тесте программы идут подряд два или несколько строковых литералов (типа char или wchar_t), то компилятор соединяет их в одну строку. К примеру:

"two" "some"

создаст массив из восьми символов – twosome и завершающий нулевой символ. Результат конкатенации строк разного типа не определен. Если написать:

// this is not a good idea

"two" L"some"

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

    1.2 Переменные.

     Переменная, или объект – это именованная область памяти, к которой мы имеем доступ из программы; туда можно помещать значения и затем также извлекать их. Каждая переменная С++ имеет определенный тип, который характеризует размер и расположение этой области памяти, диапазон значений, которые она может хранить, и набор операций, применимых к этой переменной. Вот пример определения нескольких объектов разных типов:

    int student_count;

    double salary;

    bool on_loan;

    strins street_address;

    char delimiter;

Переменная, как и литерал, имеет определенный тип и хранит свое значение в некоторой  области памяти. С переменной ассоциируются две величины:

  • собственно значение, или r-значение, которое хранится в этой области памяти и присуще как переменной, так и литералу;
  • значение адреса области памяти, ассоциированной с переменной, или l-значение  – место, где хранится r-значение; присуще только объекту.

В выражении:

cb= cb - '0';

переменная  cb находится и слева и справа от символа операции присваивания. Справа расположено значение для чтения (cb и символьный литерал '0'): ассоциированные с переменной данные считываются из соответствующей области памяти. Слева расположено значение местоположения: в область памяти, соотнесенную с переменной cb, помещается результат вычитания. В общем случае левый операнд операции присваивания должен быть первым значением. Мы не можем написать следующие выражения:

Информация о работе Типы данных С++