Программирование на C++.ppt
- Количество слайдов: 59
Программирование на C++ Основные понятия языка
Литература v Павловская Т. А С/С++. Программирование на языке высокого уровня. Учебник для вузов СПб. : Питер, 2010 v Павловская Т. А. , Щупак Ю. А С/С++. Структурное и объектно-ориентированное программирование: Практикум СПб: Питер, 2010 г v Страуструп Б Дизайн и эволюция С++ М. : ДМК Пресс v Страуструп Б Язык программирования C++ М. : «Издательство БИНОМ» v Стандарт С++: International Standard ISO/IEC 14882: 2003(E), Programming languages — C++ v Керниган Б. , Ритчи Д Язык программирования Си.
ЯЗЫК ПРОГРАММИРОВАНИЯ C++
ЯЗЫК ПРОГРАММИРОВАНИЯ C++ v Язык С в основе своей был создан в 1972 г. как язык для операционной системы UNIX. Его автором считается Денис М. Ритчи (Dennis M. Ritchie). v Язык C++ имеет синтаксис, основанный на синтаксисе C. Язык возник в начале 1980 -х годов, когда сотрудник фирмы «Bell Laboratories» Бьёрн Страуструп придумал ряд усовершенствований к языку C под собственные нужды.
ЯЗЫК ПРОГРАММИРОВАНИЯ C++ v. В 1998 году был ратифицирован международный стандарт языка C++: ISO/IEC 14882: 1998 «Standard for the C++ Programming Language» ; v После принятия технических исправлений к стандарту в 2003 году нынешняя версия этого стандарта – ISO/IEC 14882: 2003. v Название «C++» происходит от C, в котором оператор «++» обозначает приращение.
ЯЗЫК ПРОГРАММИРОВАНИЯ C++ v Основные достоинства языка – компактный синтаксис, наличие большого количества специальных средств, упрощающих написание сложных системных программ, многоплатформенность. v Основной недостаток – «незащищенный» синтаксис, при котором в языке возможно существование близких по форме допустимых конструкций, что часто не позволяет идентифицировать ошибку на этапе компиляции программы, а потому удлиняет и усложняет ее отладку
Нововведения C++ в сравнении с C 1) поддержка объектно-ориентированного программирования; 2) поддержка обобщённого программирования через шаблоны; дополнительные типы данных; 3) исключения; пространства имён; 4) встраиваемые функции; 5) перегрузка операторов; 6) перегрузка имён функций; ссылки и операторы управления свободно распределяемой памятью; 7) дополнения к стандартной библиотеке
Дизайн C++ Бьёрн Страуструп описывает некоторые правила, которые он использовал при проектировании C++: 1. Язык C++ разработан как универсальный язык со статическими типами данных, эффективностью и переносимостью языка C; 2. Язык C++ разработан так, чтобы непосредственно и всесторонне поддерживать множество стилей программирования (процедурное программирование, абстракцию данных, объектно-ориентированное программирование и обобщённое программирование).
Дизайн C++ 3. Язык C++ разработан так, чтобы давать программисту свободу выбора, даже если это даёт ему возможность выбирать неправильно. 4. Язык C++ разработан так, чтобы максимально сохранить совместимость с языком программирования C, тем самым делая возможным лёгкий переход от программирования на C. 5. Язык C++ избегает таких особенностей, которые зависят от платформы или не являются универсальными.
Дизайн C++ 6. Язык C++ не накладывает никакой избыточной нагрузки на программу, не использующую какиелибо возможности. 7. Язык C++ разработан так, чтобы не требовать слишком усложнённой среды программирования. Февральский рейтинг языков программирования, публикуемый компанией Tiobe, показал следующее: Самыми популярными языками программирования остаются С(первое место), Java , С#, С++.
Рейтинг языков программирования
Состав языка программа операторы выражения лексемы символы a=b; for (int i=0; i
Алфавит C++ включает: v прописные и строчные латинские буквы и символ подчеркивания (_), который употребляется наряду с буквами; v арабские цифры от 0 до 9; v специальные символы, например +, *, { и &; v пробельные символы - пробел, символы табуляции, символы перевода строки и формата.
Лексемы Существуют следующие виды лексем: § § § имена (идентификаторы); ключевые слова; знаки операций; разделители; литералы (константы). Границы лексем определяются другими лексемами, такими, как разделители или знаки операций. Из лексем составляются выражения и операторы.
Имена (идентификаторы) v. Идентификатор - это имя программного объекта. v. В идентификаторе могут использоваться латинские буквы, цифры и знак подчеркивания. v. Прописные и строчные буквы различаются. v Первым символом идентификатора может быть буква или знак подчеркивания. My. Task Name _a MY_Primer_1 Prim_123 ABC abc ABc Ab. C v. Длина идентификатора ограничена. по стандарту не
Ключевые слова v Ключевые слова - это зарезервированные идентификаторы, которые имеют специальное значение для компилятора. Их можно использовать только в том смысле, в котором они определены. Например: extern int signed typedef v Задание СРС: § составить список ключевых слов С++.
Константы v Константами называют неизменяемые величины. v Есть логические, целые, вещественные, символьные и строковые константы. v Компилятор, выделив константу в качестве лексемы, относит ее к одному из типов по ее внешнему виду. v Программист может задать тип константы и явным образом.
Константы Константа Формат Обозначается ключевым словом Логическая true или false Десятичный: последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль Восьмеричный: нуль, за которым следуют восьмеричные цифры (0, 1, Целая 2, 3, 4, 5, 6, 7) Шестнадцатеричный: 0 х или 0 Х, за которым следуют шестнадцатеричные цифры (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F) Примеры true, false 8, 0, 199226 01, 020, 07155 0 x. A, 0 x 1 B 8, 0 X 00 FF, 0 X 00 ff
Константы Константа Вещественная Формат Десятичный: [цифры] Примеры 5. 7, . 001, 35 Экспоненциальный: 0. 2 E 6, . 11 e-3, 5 E 10, 1. 22 E-10 'A', 'ю', '*', 'db', 'A', 'n', ' 12', 'x 07' "Здесь был Vasia", "t. Сумма =x. F 5n" [цифры][. ][цифры]{E|e}[+|-][цифры] Символьная Один или более символов, заключенных в апострофы Строковая Последовательность символов, заключенная в кавычки
Символьные константы v Некоторые символы набора реализации являются непечатаемыми. v Они предназначены для управления процессом отображения печатаемых символов на экране или принтере. v Для представления в программе непечатаемых символов используется управляющая последовательность (escape sequence ) -последовательность символов, начинающаяся с обратной косой черты ( backslash ).
Символьные константы Такие последовательности используют для записи: v кодов символов, отсутствующих на клавиатуре – в этом случае указывают «» и коды ANSI в 8 -ричном (’ооо’) или 16 -ричном (’xhh’) виде, например ’ 12’– код символа в восьмеричном виде, ’x 07’ - два символа, заданных кодами в шестнадцатеричном виде, ’ ’- символ с кодом 0; v служебных символов, таких как «’» , «» , «? » , «″» – косая черта перед ними говорит, что необходим код символа, а не подразумеваемые им операции, например ’, ″
Символьные константы v кодов управляющих символов, например: § § ’n’ – символ перехода на следующую строку, ’t’ – символ горизонтальной табуляции, ’а’ – символ звонка (тревога), ’b’ – символ возврата на одну позицию и др v Задание СРС: СРС § составить список управляющих символов.
Строковые константы v В строковых литералах также допускается задавать любые символы из набора символов реализации, в том числе и управляющие последовательности. v Например, если внутри строки требуется записать кавычку, ее предваряют косой чертой, по которой компилятор отличает ее от кавычки, ограничивающей строку: "Издательский дом "Питер"" v Тем не менее, апостроф разрешается задавать без обратной косой черты, например: "Издательский дом 'Питер'"
Строковые константы v Строковые константы, отделенные в программе только пробельными символами, при компиляции объединяются в одну. v Длинную строковую константу можно разместить на нескольких строках программы, используя в качестве знака переноса обратную косую черту, за которой следует перевод строки. Эти символы игнорируются компилятором, при этом следующая строка программы воспринимается как продолжение предыдущей.
Строковые константы Например, строка "Никто не доволен своей внешностью, но каждый доволен своим умом" эквивалентна строке "Никто не доволен своей внешностью, но каждый доволен своим умом" Кавычки пишутся только в начале и в конце многострочного литерала. Среди символов строки также могут присутствовать Esc-последовательности, например: ″n. Это строка, nиначе -″строковый литерал″. ″
Комментарии v однострочные и многострочные. § Первый вид начинается с двух символов // ("прямая косая черта") и занимает одну строку. § Второй вид комментариев начинается с двух символов /* и завершается двумя символами */. v Внутри комментария можно использовать любые символы из набора реализации. v Внутри многострочного комментария можно размещать однострочный комментарий.
Структура программы v Программа на языке С++ состоит из функций, описаний и директив препроцессора. v Функция - это законченный фрагмент кода, к которому можно обратиться по имени (вызвать функцию). Функция может получать аргументы и возвращать в вызывающий код вычисленное в ней значение. v Одна (и только одна) функция программы должна иметь имя main. Выполнение программы начинается с первого оператора этой функции. Ее вызывает на выполнение исполняющая система.
Структура программы v Описания представляют собой определения и объявления элементов программы: переменных, функций, классов, типов и т. д. v Любой элемент программы должен быть определен только один раз. Это правило в стандарте называется правилом одного определения ( one definition rule, или odr ). v Объявление может встречаться в программе столько раз, сколько необходимо.
Структура программы v Препроцессор – это программа, которая обрабатывает исходный текст до компилятора. v Посредством команд препроцессора определяется перечень файлов, содержащих прототипы стандартных функций из библиотек, которые должны быть подключены при компиляции программы. v Любая директива должна начинаться с символа #. v На каждой строке может располагаться только одна директива.
Пример программы #include
Пример программы printf("НОД=%dn", c); экран // вывод результата на puts("Нажмите любую клавишу для завершения. . . "); _getch(); return 0; // сообщение // обработка нажатия любой //клавиши // возврат нулевого кода //завершения } int nod(int a, int b) // заголовок функции nod() { while (a!=b) // цикл-пока a не равно b if (a>b) a=a-b; // если a>b, то вычитаем из a b else b=b-a; return a; функции } // иначе вычитаем из b a // возвращаем результат
Типы данных С++ Тип данных – это множество допустимых значений, которые может принимать тот или иной объект, а также множество допустимых операций, которые применимы к нему. В современном понимании тип также зависит от внутреннего представления информации. Таким образом, данные различных типов хранятся и обрабатываются по-разному.
Типы данных С++ Тип данных определяет: v внутреннее представление данных в памяти компьютера; v объем памяти, выделяемый под данные; v множество (диапазон) значений, которые могут принимать величины этого типа; v операции и функции, которые можно применять к данным этого типа.
Типы данных С++ v Элементарные (базовые, основные) типы данных являются неделимыми и позволяют описывать целые, вещественные, символьные и логические величины. На основе этих типов программист может конструировать составные типы. v Составной тип - это тип, определенный в терминах другого типа. К составным типам относятся массивы, структуры, объединения, перечисления, ссылки, указатели и классы.
Типы данных С++
Базовые типы данных Элементарные типы данных, если исключить из них тип void, называют арифметическими, поскольку их арифметическими можно использовать в арифметических операциях. Для их описания определены следующие ключевые слова: § § bool (логический); integral char (символьный); wchar_t (широкий символьный); int (целый); § float (вещественный); § double (вещественный с двойной точностью).
Базовые типы данных Существует четыре спецификатора типа данных, уточняющих внутреннее представление и диапазон значений базовых типов: § short (короткий); § long (длинный); § signed (знаковый); § unsigned (беззнаковый).
Базовые типы данных Тип bool signed char unsigned char signed short int unsigned short int signed int unsigned int signed long int Диапазон значений true и false -128 … 127 0 … 255 -32 768 … 32 767 Размер 1 1 1 2 0 … 65 535 2 -2 147 483 648 … 2 147 483 647 0 … 4 294 967 295 -2 147 483 648 … 2 147 483 647 4 4 4
Логический тип v Величины логического типа могут принимать только значения true и false, являющиеся false ключевыми словами. v Величины логического типа могут участвовать в арифметических операциях. v При преобразовании к целому типу true имеет значение 1, false - нуль.
Символьные типы v В стандарте языка определено три различных символьных типа: char, signed char и unsigned char. sizeof(char) = sizeof(signed char) = sizeof(unsigned char) = 1 v Наличие знака у типа char тоже зависит от реализации: он может совпадать либо с signed char, либо с unsigned char v Величины символьных типов применяются также для хранения целых чисел, не превышающих границы указанных диапазонов, и могут участвовать в арифметических операциях.
Символьные типы v Для кодировки используется код ASCII. v Символы с кодами от 0 до 31 относятся к служебным и имеют самостоятельное значение только в операторах ввода-вывода (!). v При этом тип char в Си и в С++ соответствует целому числу со знаком (!). Поэтому при работе с символами, коды которых превышают 127, используют беззнаковый подтип символьного типа unsigned char.
Символьные типы v Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например в кодировке Unicode. v Размер типа wchar_t равен 2 байтам. v Если в программе необходимо использовать символьные или строковые константы типа wchar_t, то их записывают с префиксом L. wchar_t L' ' L"Слово"
Целые типы v Четыре знаковых ( signed char, short int, long int ) v Четыре беззнаковых ( unsigned char, unsigned short int, unsigned long int ). in v По умолчанию все целочисленные типы считаются знаковыми, поэтому спецификатор signed можно не указывать. v Ключевое слово unsigned позволяет представлять неотрицательные целые числа.
Целые типы v Типы short int, long int, signed int и unsigned int можно сокращать до short, long, signed и unsigned соответственно. v Целым константам, встречающимся в программе, по умолчанию приписывается тип signed int. v Можно явно указать требуемый тип с помощью суффиксов L, l ( long ) и U, u ( unsigned ). v Например, константа 32 L будет иметь тип long и занимать 4 байта. v Можно использовать суффиксы L и U одновременно, например, 0 x 22 UL или 05 Lu.
Типы с плавающей точкой v Стандарт С++ определяет три типа данных для хранения вещественных значений: float, double и long double. Все они имеют знак. double v Внутреннее представление вещественного числа состоит из мантиссы и порядка. Длина мантиссы определяет точность числа, а длина порядка его диапазон. v Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип double константы с помощью суффиксов F, f (float) и L, l (long). 2 E+6 L 1. 82 f
Диапазоны типов по стандарту v sizeof(float) ≤ sizeof(double) ≤ sizeof(long double) v sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long) v Минимальные и максимальные определены в файлах: §
Тип void Множество значений этого типа пусто. Тип void имеет три назначения: § указание о невозвращении функцией значения; § указание о неполучении параметров функцией; § создание нетипизированных указателей. Тип void в основном используется для определения функций, которые не возвращают значения, для указания пустого списка аргументов функции, как базовый тип для указателей и в операции приведения типов.
Переменные Переменная - это именованная область памяти компьютера, у переменной есть тип, имя и значение. Имя служит для обращения к области памяти, в которой хранится значение, тип определяет диапазон значений и допустимые операции. Во время выполнения программы значение переменной можно изменять. Перед использованием любая переменная должна быть определена. int a; float x;
Переменные v В общем случае описание переменной задает не только ее имя и тип, но и другие характеристики, например, начальное значение, область действия и время жизни. Кроме того, имеет значение и место размещения описания в тексте программы. v Область действия имени - это часть программы, в которой его можно использовать для доступа к связанной с ним области памяти. В зависимости от области действия переменная может быть локальной или глобальной.
Переменные v Если переменная определена внутри блока (блок ограничен фигурными скобками), она называется локальной, область ее действия - от точки описания до конца блока, включая все вложенные блоки. v Если переменная определена вне любого блока, она называется глобальной и областью ее действия считается модуль, в котором она определена, от точки описания до его конца. v Имя переменной должно быть уникальным в своей области видимости.
Переменные v Когда во вложенном блоке определена переменная с таким же именем, что и у переменной вне блока, внешняя переменная во вложенном блоке невидима, хотя он и входит в ее область действия. v К этой переменной, если она глобальная, можно обратиться, используя операцию доступа к области видимости : :
Переменные Общий вид оператора описания переменных: [класс_памяти] [const] тип имя [инициализатор]; Класс памяти задается явным образом или по контексту описания переменной. Класс памяти определяет время жизни и область видимости программного объекта. Если он не задан явно, и переменная описана внутри блока (в частности, внутри функции main), main она считается автоматической.
Класс памяти 54 v auto – автоматическая переменная. Память под нее в стеке выделяется и при необходимости инициализируется каждый раз при выполнении оператора, содержащего ее определение, и освобождается при выходе из блока, в котором она описана. Время ее жизни – локальное. v extern – переменная определяется в другом месте программы. Используется для создания переменных, доступных во всех модулях программы, где они объявлены. Если переменная в том же операторе инициализируется, спецификатор extern игнорируется. ©Павловская Т. А. (СПб. ГУ
Класс памяти v static – статическая переменная. Время жизни – постоянное. Инициализируется один раз при первом выполнении оператора, содержащего определение переменной. В зависимости от расположения оператора описания статические переменные могут быть глобальными и локальными. Глобальные статические переменные видны только в том модуле, в котором они описаны. v register – аналогично auto, но память выделяется по возможности в регистрах процессора. 55 ©Павловская Т. А. (СПб. ГУ
Именованная константа v Модификатор const показывает, что данное описание определяет не переменную, а именованную константу. v Константа должна быть обязательно инициализирована при объявлении. v Ключевое слово const можно задавать как перед типом, так и после него. v В одном операторе можно определить несколько величин одного типа, разделяя их запятыми.
Именованная константа Примеры: const char C = 'C', X = '|'; int const y = 56; const long a=6; const float pp=6. 6 e-34;
Переменные v С помощью инициализатора можно присвоить переменной начальное значение (инициализировать переменную). v Инициализатор можно записывать в двух формах - со знаком равенства: = выражение или в круглых скобках: ( выражение ) v Выражение должно быть вычисляемым на момент выполнения оператора, .
Переменные short int a = 1; short int b( a + 1 ); char s, sf = 'f'; // инициализация относится только к sf char t (54); float c = 0. 22, x(3), sum; int f, c, d; float r; I, j; // две переменные типа int (по умолчанию) unsigned int max, min; сhar c 1, c 2; unsigned char c 5; double k=89. 34; float eps=0. 1 e-4; char ch=’G’;
int a; int main() { int b; static int c; переменная c a = 1; переменной int a; a = 2; переменной : : a = 3; переменной extern int x; //переменная дальше //глобальная переменная a //локальная переменная b //локальная статическая //присваивание глобальной //локальная переменная a //присваивание локальной //присваивание глобальной х объявлена; определение