Д.з. 3.03.2009Язык С++ - занятие 31. Задача 1: 1/1 + 1/3 + 1/5 … #include using namespace std; int main() { int n; cin >> n; double sum = 0;// Сумма for.

Презентация:



Advertisements
Похожие презентации
C++ - занятие 2 1. Какие типы вы бы использовали? height // рост salary // зарплата за месяц (в рублях) grade// средний балл charshort longint unsigned.
Advertisements

C++ - занятие Язык С++ - занятие 21. Какие типы вы бы использовали? age // возраст salary // зарплата за месяц (в рублях) grade// средний.
Д.з. на 3 марта Язык С++ - занятие 41Д.з. на 3 марта Язык С++ - занятие 41.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Д.з. 1. Задача 3: список struct list { int val; list* next; list(int val_, list* next_) : val(val_), next(next_) {} }; void print(const list* p) { while.
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
Объектно-ориентированное программирование С++. Лекция 6 Карпов В.Э.
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
Основы информатики Лекция. Функции Заикин Олег Сергеевич
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Подбор материала и презентация: Сазонов Д.О. Кафедра ПМиЭММ ВГТА Динамические объекты, ссылки.
1 Переопределение операций Макаревич Л. Г.. 2 Зачем нужна перегрузка операций? class Complex { double re; double im; public: Complex(double r=0, double.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
ООП Классы Данные отдельно, методы отдельно struct Node { Node* next; void* data; }; struct List { Node* first; int size; }; void* allocate() { … } void.
Д.з. 1. Задача 1: order // Вспомогательная функция: // Упорядочиваем два числа void order(int& x, int& y) { if (x > y) { int tmp = x; x = y; y = tmp;
ООП Классы – 2.
Лекция 8 Область видимости Время жизни. Область видимости Область видимости – характеристика именованного объекта Область видимости - часть текста программы,
Д.з. на 17 марта Язык С++ - занятие 61. Задача 2: фигуры // shape - общий интерфейс для // фигур class shape { protected: int x, y; public: shape(int.
Лекция 10. Введение в ООП. Часть 3 Красс Александр СПбГУ ИТМО, 2008.
Транксрипт:

Д.з Язык С++ - занятие 31

Задача 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: последняя ненулевая цифра n! Вариант 1: p = 1; for (int i = 1; i

Задача 3: схема алгоритма Вариант 2: p = 1; for (int i = 1; i

int num2 = 0;// Количество двоек int num5 = 0;// Количество пятерок int p = 1;// Последняя цифра произведения for (int i = 2; i

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 …

Замечания Нет смысла писать *(a+i) – это точно то же, что a[i], только записывается длиннее

twice void twice(int* p) { *p *= 2; } // Пример вызова int i; cin >> i; // Например, вводим 10 twice(&i); cout

Разные дополнения 99

Что может означать, если параметр функции – указатель? void f(abc *p); // Что бы могла делать такая функция // и как она могла бы вызыват ь ся? 1. int* p = new int; f(p);// Функция работает с динамической памятью 2. int a[100]; f(a);// Функция работает с массивом 3. int i; f(&i);// Функция меняет переменную, // передача параметра по указателю. // (Устаревший способ, сейчас используют // ссылки) Язык С++ - занятие 3

Удаление нулевого указателя delete p; // Если p – ничего не делает if (p != 0) delete p; // if можно убрать Язык С++ - занятие 3

Где писать параметры по умолчанию – в объявлении или в описании? 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

Ссылки Язык С++ - занятие 313

Язык С++ - занятие 214 Ссылки int a[100]; int& k = a[5]; k++; // тоже, что a[5]++; cout

Применения ссылок 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

lvalue 3. Функции, возвращающие lvalue Что такое lvalue? 11x+1sin(x)true xa[i]*px.abc lvalue – то, у чего есть адрес (т.е. второй ряд) Или можно сказать - то, что может писаться слева от равенства, но это не совсем точно Язык С++ - занятие 216

Применения ссылок - продолжение Пусть нам часто надо обращаться к пятым элементам разных массивов. ( Не очень правдоподобно, конечно..) int get5(int* p) { return p[5]; } int arr[100]; cout

Классы Язык С++ - занятие 318

Пример class time { int hour; int min; public: time(int h = 0, int m = 0); void print(); void inc(); }; void time::print() { cout

Списки инициализации time::time(int h, int m) { hour = h; min = m; } // ### Лучше немного иначе… time::time(int h, int m) : hour(h), min(m) {} конструктор(…) : поле(нач.значение), поле(нач.значение), … { … } Язык С++ - занятие 3

Где вызывается конструктор? Если коротко: всюду, где создается новый объект В описании переменной time t(9, 30); В операторе new time* p = new time(9, 30); (Относительно редко) Временные объекты f( time(9, 30) ); time(9, 30) – создается временно, пока выполняется оператор Язык С++ - занятие 3

Деструктор ~имя класса() class abc { … ~abc() { cout

Замечания Что такое public и private Инкапсуляция (information hiding) Зачем все-таки она нужна? Язык С++ - занятие 3

Еще технические детали 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

Конструктор по умолчанию time t;// Какой тут вызывается time* p = new time;// конструктор? Конструктор по умолчанию - default constructor - конструктор, у которого нет параметров (или м.б. есть, но для всех задано значение по умолчанию) class time { time(int h = 0, int m = 0);// К-р по умолчанию … Также вызывается, если создается массив time a[100]; Если к-ра по умолчанию нет, то будет ошибка Язык С++ - занятие 3

Задачи на 10 марта Язык С++ - занятие 326

Задачи на 10 марта Ф-я order(x, y, z); - меняет значения в x, y, z так, чтобы x

Задачи на 10 марта Описать для стека метод top() - возвращает последний эл-т как lvalue. Например: s.top() = 5; // Заменить // верхний эл-т стека s.top()++; // Увеличить // верхний эл-т стека 5. * (Немного на сообразительность): Определить для стека функцию класса int product(), которая возвращает произведение всех чисел не стеке. При этом эта функция должна работать быстро даже для очень большого стека. Замечания: Можно придумать реализацию, при которой время вообще не зависит от размера, оно всегда одинаково. Для суммы всех чисел такую функцию написать очень просто. Для произведения все немного сложнее, м.б. придется хранить какие-то дополнительные данные Язык С++ - занятие 328