Язык программирования Си++
Идея создания нового языка программирования. Практические задачи моделирования. Стандартная библиотека С++. Набор встроенных типов данных для представления целых и вещественных чисел, символов. Литералы целых типов. Оператор определения переменной.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 22.04.2013 |
Размер файла | 33,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
программирование символ литерал моделирование язык
Введение
1. Типы данных С++
1.1 Литералы
1.2 Переменные
1.3 Указатели
1.4 Строковые типы
2. Классы
2.1 Определение класса
Введение
Бьерн Страуструп начал работать над «Си с классами» в 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, помещается результат вычитания. В общем случае левый операнд операции присваивания должен быть первым значением. Мы не можем написать следующие выражения:
// ошибки компиляции: значения слева не являются l-значениями
// ошибка: литерал - не l-значение
0 = 1;
// ошибка: арифметическое выражение - не l-значение
salary + salary * 0.10 = new_salary;
Оператор определения переменной выделяет для неё память. Поскольку объект имеет только одну ассоциированную с ним область памяти, такой оператор может встретиться в программе только один раз. Если же переменная, определённая в одном исходном файле, должна быть использована в другом, появляются проблемы4. К примеру:
// файл module0.C
// определяет объект fileName
string fileName;
//присвоить_fileName_значение
//_файл_module1.C
//_использует_объект_fileName
//_не_компилируется:
// fileName не определен в module1.C
ifstream input_file( fileName );
С++ требует, чтобы объект был известен до первого обращения к нему. Это вызвано необходимостью гарантировать правильность использования объекта в соответствии с его типом. В данном примере модуль module1.C вызовет ошибку компиляции, так как переменная fileName не определена в нём. Чтобы избежать этой ошибки, мы должны сообщить компилятору об уже определённой переменной fileName. Это делается с помощью инструкции объявления переменной:
// файл module1.C
// использует объект fileName
// fileName объявляется, то есть программа получает // информацию об этом объекте без вторичного его определения extern string fileName;
ifstream input_file( fileName )
Объявление переменной сообщает компилятору, что объект с данным именем, который имеет данный тип, определён где-то в программе. Память под переменную при её объявлении не отводится. Программа может содержать сколько угодно объявлений одной и той же переменной, но определить её можно только один раз. Такие объявления удобно помещать в заголовочные файлы, включая их в те модули, которые этого требуют. Так мы можем хранить информацию об объектах в одном месте и обеспечить удобство её модификации в случае надобности.
Имя переменной, или идентификатор, может состоять из латинских букв, цифр и символа подчеркивания5. Прописные и строчные буквы в именах различаются. Язык С++ не ограничивает длину идентификатора, но пользование слишком длинными именами типа gosh_this_is_an_impossibly_name_to_type может оказаться крайне неудобным.
Некоторые слова являются ключевыми в С++ и они не могут быть использованы в качестве идентификаторов.
Таблица 1. Список ключевых слов С++
asm |
else |
new |
this |
|
auto |
enum |
operator |
throw |
|
bool |
explicit |
private |
true |
|
break |
export |
protected |
try |
|
case |
extern |
public |
typedef |
|
catch |
false |
register |
typeid |
|
char |
float |
reinterpret_cast |
typename |
|
class |
for |
return |
union |
|
const |
friend |
short |
unsigned |
|
const_cast |
goto |
signed |
using |
|
continue |
if |
sizeof |
virtual |
|
default |
inline |
static |
void |
|
delete |
int |
static__cast |
volatile |
|
do |
long |
struct |
wchar_t |
|
double |
mutable |
switch |
while |
|
dynamic_cast |
namespace |
template |
1.3 Указатели
Указатель - это объект, содержащий адрес другого объекта и позволяющий косвенно манипулировать этим объектом6. Обычно, указатели используются для работы с динамически созданными объектами, для построения связанных структур данных, таких, как связанные списки и иерархические деревья. И для передачи в функции больших объектов - массивов и объектов классов в качестве параметров.
Каждый указатель ассоциируется с некоторым типом данных, причем их внутреннее представление не зависит от внутреннего типа, и размер памяти, занимаемый объектом типа указатель, и диапазон значений у них одинаков. Разница состоит в том, как компилятор воспринимает адресуемый объект. Указатели на разные типы могут иметь одно и то же значение, но область памяти, в которой размещаются соответствующие типы, может быть различной:
указатель на int, содержащий значение адреса 1000, направлен на область памяти 1000-1003 (в 32-битной системе);
указатель на double, содержащий значение адреса 1000, направлен на область памяти 1000-1007 (в 32-битной системе).
К примеру:
int *ip1, *ip2;
complex<double> *cp;
string *pstring;
vector<int> *pvec;
double *dp;
Указатель обозначается звёздочкой перед именем. В определении переменных списком, звёздочка должна стоять перед каждым указателем7.
long *lp, lp2;
В этом примере lp - указатель на объект типа long, а lp2 - объект типа long.
Оператор разыменования (*) может отделяться пробелами от имени и даже непосредственно примыкать к ключевому слову типа. Поэтому приведенные определения синтаксически правильны и абсолютно эквивалентны:
string *ls;
string* ls;
Указателю не может быть присвоена величина, которая не является адресом.
Точно так же нельзя присвоить указателю одного типа значение, которое является адресом объекта другого типа.
Указатели могут быть использованы в арифметических выражениях:
int i, j, k;
int *mi = &i;
// i = i + 2
*mi = *mi + 2;
// увеличение адреса, содержащегося в mi, на 2
mi =mpi + 2;
К указателю можно прибавлять целое значение, или можно также вычитать из него. Прибавление к указателю 1 увеличивает содержащееся в нем значение на размер области памяти, которая отводится объекту соответствующего типа. К примеру если тип char занимает 1 байт, int - 4 и double - 8, то прибавление 2 к указателям на char, int и double увеличит их значение соответственно на 2, 8 и 168.
1.4 Строковые типы
В С++ поддерживаются два типа строк - встроенный тип, который достался от С, и класс string из стандартной библиотеки С++. Класс string предоставляет гораздо больше возможностей и поэтому он более удобен в применении, однако на практике нередки ситуации, когда необходимо пользоваться встроенным типом или хорошо понимать, как он устроен.
Класс string стандартной библиотеки С++ реализует операции:
инициализация массивом символов или другим объектом типа string.
копирование одной строки в другую.
доступ к отдельным символам строки для чтения и записи.
сравнение двух строк на равенство.
конкатенация двух строк, получая результат либо как третью строку, либо вместо одной из исходных.
вычисление длины строки.
возможность узнать, пуста ли строка.
Для того чтобы использовать объекты класса string, необходимо включить соответствующий заголовочный файл:
#include <string>
Длину строки возвращает функция-член size() (длина не включает завершающий нулевой символ).
cout << "Длина "
<< sm
<< ": " << sm.size()
<< " всего символов, включая символ новой строки\n";
2. Классы
Механизм классов в C++ позволяет пользователям определять собственные типы данных9. По этой причине их часто называют пользовательскими типами. Класс может наделять дополнительной функциональностью уже существующий тип. С помощью классов можно создавать абсолютно новые типы, например Screen (экран) или Account (расчетный счет). Как правило, классы используются для абстракций, не отражаемых встроенными типами адекватно.
2.1 Определение класса
Определение класса состоит из двух частей: первая часть - заголовок, включающий ключевое слово class, за которым следует имя класса, и вторая часть - тело, заключённое в фигурные скобки. После такого определения должны стоять точка с запятой или список объявлений:
class Screen { /* ... */ };
class Screen { /* ... */ } myScreen, yourScreen;
Внутри тела объявляются данные-члены и функции-члены и также указываются уровни доступа к ним. Таким образом, тело класса определяет список его членов.
Каждое определение вводит новый тип данных. Даже если два класса имеют одинаковые списки членов, они все равно считаются разными типами.
Размещено на Allbest.ru
...Подобные документы
Стандартизированный процедурный язык программирования. Создание системного программного обеспечения и прикладных программ. Особенности языка Си, его основные недостатки. Передача параметров в функцию по значению. Стандартная библиотека языка Си.
презентация [396,3 K], добавлен 12.11.2012Названия целых типов, длина их внутреннего представления в байтах и диапазон возможных значений. Кодировка символов в соответствии со стандартом ANSI. Описание типа массива в Object Pascal. Выделение и освобождение динамической памяти, псевдонимы типов.
курсовая работа [184,5 K], добавлен 10.02.2016Поиск взаимно простых чисел. Алгоритм Евклида для целых чисел. Описание выбранного языка программирования. Алгоритм решения задачи. Обзор средств программирования. Текст и описание программы. Руководство оператора, программа и методика испытаний.
курсовая работа [843,5 K], добавлен 15.06.2011Этапы создания программы. Транслятор как средство для преобразования текстов из одного языка в другой. Понятие языков программирования, основные моменты их истории. Некоторые операторы языка QBasic. Понятие переменной, ее наглядное представление.
презентация [22,9 K], добавлен 16.06.2011Разработка программы, которая выявляет в прямоугольной матрице все подматрицы, состоящие только из m-значных целых чисел. Использование компилируемого языка программирования общего назначения C/C++. Обработка алгоритмов, кодирование программных средств.
курсовая работа [980,1 K], добавлен 05.03.2015Основные понятия и назначение языка программирования СИ. Скалярные типы данных. Арифметические, логические и битовые операции над переменными целочисленного, вещественного, символьного, перечислимого типов. Примеры программ, выполняющие операции над ними.
презентация [269,9 K], добавлен 26.07.2013Цели и задачи дисциплины "Технология программирования". Программные средства ПК. Состав системы программирования и элементы языка. Введение в систему программирования и операторы языка Си. Организация работы с файлами. Особенности программирования на С++.
методичка [126,3 K], добавлен 07.12.2011Понятие и специфические особенности языка программирования Си, история его создания. Интегрированная система Borland C. Процесс программирования с помощью данного языка. Графические примитивы в языках программирования. Преобразования на плоскости.
курс лекций [782,2 K], добавлен 04.10.2011Лаконичность, стандартный набор конструкций управления потоком выполнения, структур данных и обширный набор операций в основе языка программирования Си. Фортран как первый язык программирования с транслятором. Перевод программных кодов с Фортрана на Си.
отчет по практике [77,4 K], добавлен 18.10.2012Изучение символьных и строковых типов данных, алгоритма задачи на языке программирования Паскаль. Описания получения и установки отдельного символа строки, изменения регистра символов. Анализ создания и просмотра файла, поиска и сортировки информации.
курсовая работа [440,7 K], добавлен 13.06.2011Описание конструкций языка программирования Паскаль, обеспечивающих ветвление. Организация циклических процессов. Создание программы для ввода последовательности вещественных чисел до появления 0, расчет среднего арифметического данной последовательности.
лабораторная работа [189,8 K], добавлен 17.04.2012Семантика языков программирования. Процедурные и объектно-ориентированные языки программирования. Стандартная библиотека шаблонов. Независимость байт-кода от операционной системы и оборудования и возможность выполнения Java-приложения на любом устройстве.
реферат [50,5 K], добавлен 24.11.2009Язык программирования как набор лексических и синтаксических правил, задающих внешний вид программы. Двоичное представления команд в универсальных программах и применение Ассамблера для создания макросов и меток. Разработка языков Фортран, Паскаль и Си.
презентация [828,5 K], добавлен 10.05.2011Операция как элементарная конструкция, возвращающая некоторый результат. Таблица приоритетов операций. Правила преобразований типов: в выражениях, в присваиваниях. Логические операции и операции инкремента. Приведение целых и вещественных выражений.
лабораторная работа [33,6 K], добавлен 06.07.2009Порядок описание процесса разработки модели для разрешения задачи программирования с помощью средств языка программирования. Структуры данных и основные принципы их построения. Этапы компьютерного моделирования. Этапы и значение написания программы.
курсовая работа [19,5 K], добавлен 19.05.2011Ознакомление со структурой, комментариями, переменными и типами данных, константами, перечислениями, преобразованием типов языка программирования высокого уровня С++. Ключевые понятия языка, идентификаторы, ключевые слова, функции, операторы, выражения.
контрольная работа [31,2 K], добавлен 12.12.2009Нечеткая лингвистическая переменная. Конструктивное описание лингвистической переменной. Структура управляющей логики в виде вычислений с откатами. Наиболее заметные тенденции в истории развития языка программирования Prolog, основные элементы синтаксиса.
контрольная работа [38,8 K], добавлен 17.05.2011Изучение общей структуры языка программирования Delphi: главные и дополнительные составные части среды программирования. Синтаксис и семантика языка программирования Delphi: алфавит языка, элементарные конструкции, переменные, константы и операторы.
курсовая работа [738,1 K], добавлен 17.05.2010Структурное программирование, схема алгоритма. Программа на языке Си для int, float. Подпрограмма ввода и вывода целых чисел на Ассемблере IBM. Тестирование и отладка, инструкция пользователя. Язык программирования Си (для int и float), этапы трансляции.
курсовая работа [1,5 M], добавлен 21.10.2014Цель информационного программирования; алгоритмический язык как система обозначений и правил для единообразной и точной записи алгоритмов и их исполнения. Языки программирования низкого и высокого уровня; классификация и использование структуры данных.
реферат [383,1 K], добавлен 07.01.2012