Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемБогдан Пожарский
1 Д.з Язык С++ - занятие 31
2 Задача 1: 1/1 + 1/3 + 1/5 … #include using namespace std; int main() { int n; cin >> n; double sum = 0;// Сумма for (int i = 1; i
3 Задача 3: последняя ненулевая цифра n! Вариант 1: p = 1; for (int i = 1; i
4 Задача 3: схема алгоритма Вариант 2: p = 1; for (int i = 1; i
5 int num2 = 0;// Количество двоек int num5 = 0;// Количество пятерок int p = 1;// Последняя цифра произведения for (int i = 2; i
6 reverse void reverse(int* a) { int* p; int* q; for (p = a, q = a+19; p < q; p++, q--) { int tmp = *p; *p = *q; *q = tmp; } } // Пример вызова int a[ 100 ]; … ввод a … reverse(a); … вывод a …
7 Замечания Нет смысла писать *(a+i) – это точно то же, что a[i], только записывается длиннее
8 twice void twice(int* p) { *p *= 2; } // Пример вызова int i; cin >> i; // Например, вводим 10 twice(&i); cout
9 Разные дополнения 99
10 Что может означать, если параметр функции – указатель? void f(abc *p); // Что бы могла делать такая функция // и как она могла бы вызыват ь ся? 1. int* p = new int; f(p);// Функция работает с динамической памятью 2. int a[100]; f(a);// Функция работает с массивом 3. int i; f(&i);// Функция меняет переменную, // передача параметра по указателю. // (Устаревший способ, сейчас используют // ссылки) Язык С++ - занятие 3
11 Удаление нулевого указателя delete p; // Если p – ничего не делает if (p != 0) delete p; // if можно убрать Язык С++ - занятие 3
12 Где писать параметры по умолчанию – в объявлении или в описании? void f(int i, int j); // Объявление f(3);// Хотим, чтобы вызвалось f(3, 55) // (Т.е. компилятор должен заменить // f(3); на f(3, 55); ) void f(int i, int j) { … } Параметр по умолчанию м.б. описан только в одном месте. Где? В объявлении void f(int i, int j = 55); Язык С++ - занятие 3
13 Ссылки Язык С++ - занятие 313
14 Язык С++ - занятие 214 Ссылки int a[100]; int& k = a[5]; k++; // тоже, что a[5]++; cout
15 Применения ссылок 1. Синоним для быстрого доступа к объекту а[7].abc.b[88]; int& k = а[7].abc.b[88]; 2. Параметры по ссылке – аналог var в Pascal void twice(int& i) { i *= 2; } int m = 10; twice(m); Язык С++ - занятие 215
16 lvalue 3. Функции, возвращающие lvalue Что такое lvalue? 11x+1sin(x)true xa[i]*px.abc lvalue – то, у чего есть адрес (т.е. второй ряд) Или можно сказать - то, что может писаться слева от равенства, но это не совсем точно Язык С++ - занятие 216
17 Применения ссылок - продолжение Пусть нам часто надо обращаться к пятым элементам разных массивов. ( Не очень правдоподобно, конечно..) int get5(int* p) { return p[5]; } int arr[100]; cout
18 Классы Язык С++ - занятие 318
19 Пример class time { int hour; int min; public: time(int h = 0, int m = 0); void print(); void inc(); }; void time::print() { cout
20 Списки инициализации time::time(int h, int m) { hour = h; min = m; } // ### Лучше немного иначе… time::time(int h, int m) : hour(h), min(m) {} конструктор(…) : поле(нач.значение), поле(нач.значение), … { … } Язык С++ - занятие 3
21 Где вызывается конструктор? Если коротко: всюду, где создается новый объект В описании переменной time t(9, 30); В операторе new time* p = new time(9, 30); (Относительно редко) Временные объекты f( time(9, 30) ); time(9, 30) – создается временно, пока выполняется оператор Язык С++ - занятие 3
22 Деструктор ~имя класса() class abc { … ~abc() { cout
23 Замечания Что такое public и private Инкапсуляция (information hiding) Зачем все-таки она нужна? Язык С++ - занятие 3
24 Еще технические детали p->abc тоже, что (*p).abc time* p = new time(19,8); p->print(); p->hour; this – указатель на текущий объект. Может использоваться только в методах hour это в методе то же, что this->hour функции, описанные прямо в классе class abc { void f() { … … какой-то код… } f – inline функция В чем разница struct и class ? class abc { … по умолчанию private … struct abc { … по умолчанию public… struct обычно для POS – "plain old structures" Язык С++ - занятие 324
25 Конструктор по умолчанию time t;// Какой тут вызывается time* p = new time;// конструктор? Конструктор по умолчанию - default constructor - конструктор, у которого нет параметров (или м.б. есть, но для всех задано значение по умолчанию) class time { time(int h = 0, int m = 0);// К-р по умолчанию … Также вызывается, если создается массив time a[100]; Если к-ра по умолчанию нет, то будет ошибка Язык С++ - занятие 3
26 Задачи на 10 марта Язык С++ - занятие 326
27 Задачи на 10 марта Ф-я order(x, y, z); - меняет значения в x, y, z так, чтобы x
28 Задачи на 10 марта Описать для стека метод top() - возвращает последний эл-т как lvalue. Например: s.top() = 5; // Заменить // верхний эл-т стека s.top()++; // Увеличить // верхний эл-т стека 5. * (Немного на сообразительность): Определить для стека функцию класса int product(), которая возвращает произведение всех чисел не стеке. При этом эта функция должна работать быстро даже для очень большого стека. Замечания: Можно придумать реализацию, при которой время вообще не зависит от размера, оно всегда одинаково. Для суммы всех чисел такую функцию написать очень просто. Для произведения все немного сложнее, м.б. придется хранить какие-то дополнительные данные Язык С++ - занятие 328
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.