Содержание
-
1. Дополнительные возможности
-
1.1. Парадигмы программирования
Структурное (процедурное) программирование Программа = алгоритм + данные Объектно-ориентированное программирование Программа = совокупность объектов, взаимодействующих друг с другом 2
-
1.2. Дополнительные средства С++
Конструкции языка Пространства имен Перегрузка функций Шаблоны функций Обработка исключений Организация ввода/вывода 3
-
1.3. Конструкции языка
Определение констант constтипимя = значение; const int SZ = 80; Цикл for for(тип имя = врж1; врж2; врж3) тело цикла for(int i = 0; i
-
1.3. Конструкции языка(продолжение)
Определения в условиях if(типимя = врж) . . . Последовательность предложений языка Встроенные функции inlineзаголовок функции тело функции 5
-
6 Исходный текст I . . . F(. . .) . . . III II . . . F(. . .) . . . . . . F(. . .) { . . . } Обычная функция Встроенная функция I Вызов F() III II Вызов F() Коды функции F(. . .) I III II Коды функции F(. . .) Коды функции F(. . .)
-
Тип данных «ссылка» тип&имя; (a) void swap(int *a, int *b) { int t = *a; *a = *b; *b = t; } (b) void swap(int &a, int &b) { int t = a; a = b; b = t; } 7
-
int x = 2, y = 3; swap(&x, &y); swap(x, y); 8 2 x 3 y (a) void swap(int *a, int *b); a b 2 x 3 y (b) void swap(int &a, int &b); a b
-
1.4. Пространства имен
Пространство имен –namespace Библиотека С++ –в std 9
-
1.5. Организация ввода/вывода
Потоковый ввод/вывод Буферизация Форматирование Преобразование 10 Прикладная программа Поток вывода Поток ввода
-
1.5. Организация ввода/вывода(продолжение)
#include Ввод данных: типvar1; . . . std::cin >> var1 >> . . .; Вывод данных: std::cout
-
1.6. Структура программы на С
Область внешних (глобальных) данных Другие функции 12 Функция main()
-
1.6. Структура программы на С(продолжение)
// файл 1 int n; static int p; int main() { n = 5; } void f1() { int n = 15; ++n; p = 12; } // файл 2 extern int n; extern int p; ??? void f2() { n = 28; } void f3() { p = 23; ошибка! static int n = 3; ++n; } 13
-
1.7. Структура программы на С++
Область глобальных данных Функция main() Другие функции Пространство имен 1 Пространство имен 2 14
-
1.8. Структура пространства имен
Область внешних (глобальных) данных Функции 15
-
1.9. Определение пространства имен
namespaceимя{ определения } Пример: namespace MyNameSpace{ int i, k; void f(int j) { std::cout
-
1.10. Доступ к объектам
Внутри пространства имен – непосредственно Вне пространства имен – с помощью оператора разрешения видимости :: имя_пространства :: имя_члена Пример: MyNameSpace::i = 10; MyNameSpace::f(12); 17
-
1.10. Доступ к объектам (продолжение)
Использование псевдонимов namespace MNS = MyNameSpace; MNS::i = 10; MNS::f(12); 18
-
1.11. Разделение пространства имен
namespace NS { inti; . . . } . . . namespace NS { int j; . . . } 19
-
1.12. Пример: стек символов
// файл stack.h : интерфейс стека namespace Stack { void push(char ); char pop(); } 20
-
1.12. Пример: стек символов(продолжение)
// файл stack.сpp : реализация стека #include “stack.h” namespace Stack { const int SZ = 200; char st [SZ]; int top = 0; void push(char c) { … } } char Stack::pop() { … } 21
-
// файл user.cpp: использование стека #include “stack.h” void f() { Stack::push(‘c’); if(Stack::pop() != ‘c’) std::cout
-
1.13. Инструкция using
using namespace имя_пространства; using namespace std; usingимя_пространства::имя_члена; using std::cin; 23
-
1.14. Пример
24
-
1.15. Результат выполнения
3. In NS1::f: q = 19210; 2. in NS1: q = 123454321; ::q = 555 25
-
1.16. Неименованное пространство
namespace { . . . } Создает идентификаторы, уникальные внутри данного файла. Вне данного файла идентификаторы недоступны (Эквивалентно классу памяти staticв С) 26
-
1.17. Перегрузка функций
Прототипы функций: тип_результата имя (список_параметров); Примеры: void f(int); void f(float); void f(char [], int); void f(const char *); 27
-
1.18. Использование функции
Вызов функции: . . . имя (список_аргументов) . . . f(12); f("Hello"); 28
-
1.19. Алгоритм выбора функции
1. Точное соответствие вызова функции прототипу 2. Преобразование аргументов – расширение (charкint, int кlong, float к double) 3. Стандартное преобразование типа (int к float , long кintи др.) 4. Преобразования, требующие временных переменных (параметр – ссылка) 5. Преобразования, определенные пользователем 29
-
1.20. Примеры
Прототипы функций void f(char); void f(double); void f(double, int); void f(const int &, const char *); Вызовы функций (на этапе компиляции) int a; float c; f('a'); // прав.1 f(c); // прав.2 f(12); // прав.3 f(c, 8); // прав.2 f(c, c); // прав.3 f(a, "*"); // прав.1 f(12, "*"); // прав.4 30 ???
-
1.21. Параметры по умолчанию
Прототип функции: char *fc(char, int = 1); // !!! Эквивалентно char *fc(char); char *fc(char, int); 31
-
1.21. Параметры по умолчанию(продолжение)
Определение функции: char *fc(char a, int b)// !!! { . . . } Вызов функции … fc('*') … эквивалентен … fc('*', 1) … 32
-
1.22. Шаблоны функций
void swap(int &a, int &b) { int t = a; a = b; b = t; } void swap(double &a, double &b) { double t = a; a = b; b = t; } 33
-
1.22. Шаблоны функций(продолжение)
template void swap(MyType &a, MyType &b) { MyType t = a; a = b; b = t; } 34
-
Вызов функции: int a, b; double c, d; swap(a, b); генерируется код функции1 swap(c, d); генерируется код функции2 swap(a, b); используется код функции1 35
-
1.23. Обработка исключений
Анализ и идентификация ошибки int f(int &res ) { int errcode; . . . if (условие) диагностирование ошибки: errcode = 1 . . . res = … ; return errcode; } 36
-
1.23. Обработка исключений(продолжение)
Обработка ошибки int rc, res; . . . rc = f(res); if(rc == 1) обработка ошибки 1 . . . 37
-
1.24. Диагностирование ошибки
int f( ) { int res; . . . if (условие) throwвыражение; . . . return res; } 38
-
1.25. Обработка ошибки
try { f( ); … } catch(тип аргумент) { обработка аргумента } 39 Ошибка; передается выражение Ошибки нет
-
1.26. Пример
40
-
1.27. Результаты тестирования
string: "asdfvdewghu"; index = 8 g string: "dfgrt"; index = 8 incorrect index 41
Нет комментариев для данной презентации
Помогите другим пользователям — будьте первым, кто поделится своим мнением об этой презентации.