53
Основы программирования на C++ Максименкова Ольга Вениаминовна Старший преподаватель Департамента программной инженерии Факультета компьютерных наук (с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 1

Основы программирования на C++

Embed Size (px)

Citation preview

Page 1: Основы программирования на C++

Основы программирования на C++

Максименкова Ольга Вениаминовна

Старший преподаватель Департамента программной инженерии Факультета компьютерных наук

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 1

Page 2: Основы программирования на C++

Ответы на уже заданные вопросы

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 2

• Как же программа работает со всеми этими ошибками?

(http://habrahabr.ru/company/pvs-studio/blog/261279/)

• О библиотеках C++

• A list of open source C++ libraries (http://ru.cppreference.com/w/cpp/links/libs)

• Category:C++ libraries

(https://en.wikipedia.org/wiki/Category:C%2B%2B_libraries)

• News, Status & Discussion about Standard C++

(https://isocpp.org)

Page 3: Основы программирования на C++

Цели лекции

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 3

Рассмотреть

• Основные типы данных

• Базовые конструкции языка

• Производные типы данных

• Функции и их параметры

Выявить

• Способы повышения быстродействия кода

• Особенности языка C++

Page 4: Основы программирования на C++

Соглашения о терминологии

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 4

Идентификатор – последовательность из букв латинского алфавита, десятичных

цифр и символов подчёркивания, начинающаяся не с цифры.

Ключевые (служебные) слова – это идентификаторы, зарезервированные в

языке для специального использования.

Выражение – это последовательность операндов, разделителей и знаков операций,

задающая вычисления, то есть это правила для получения значения

Знаки операций обеспечивают формирование и последующее вычисление

выражений.

Директива (команда) препроцессора

Определение [declaration]

Описание [specification]

Подбельский В.В. Язык Си++. - М.: Финансы и статистика, 2003. – 560 с.

Page 5: Основы программирования на C++

Учебные материалы

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 5

1. Ахметсафина Р.З. Построение и анализ алгоритмов (ДПИ, ФКН, НИУ ВШЭ, 2 курс

бакалавриата) (http://www.hse.ru/edu/courses/126217828.html)

2. Eunsuk Kang, and Jean Yang. 6.088 Introduction to C Memory Management and C++

Object-Oriented Programming, January IAP 2010. (Massachusetts Institute of

Technology: MIT OpenCourseWare), http://ocw.mit.edu (Accessed 21 Jun, 2015).

License: Creative Commons BY-NC-SA

3. Jesse Dunietz, Geza Kovacs, and John Marrero. 6.096 Introduction to C++, January IAP

2011. (Massachusetts Institute of Technology: MIT

OpenCourseWare),http://ocw.mit.edu (Accessed 21 Jun, 2015). License: Creative

Commons BY-NC-SA

4. Tom Lieber, Kyle Murray, and Frank Li. 6.S096 Introduction to C and C++, January IAP

2013. (Massachusetts Institute of Technology: MIT

OpenCourseWare),http://ocw.mit.edu (Accessed 21 Jun, 2015). License: Creative

Commons BY-NC-SA

5. Andre Kessler. 6.S096 Effective Programming in C and C++, January IAP 2014.

(Massachusetts Institute of Technology: MIT

OpenCourseWare), http://ocw.mit.edu(Accessed 21 Jun, 2015). License: Creative

Commons BY-NC-SA

Page 6: Основы программирования на C++

Первая программа на C++

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 6

// Task_01.cpp : Defines the entry point for the console application.//

#include "iostream"

int main(){

std::cout << "Hello, World!";return 0;

}

• Ключевые слова

• Идентификаторы

• Литералы

• Операции

• Разделители

• Пробельные символы

Page 7: Основы программирования на C++

Типы данных и переменные

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 7

Page 8: Основы программирования на C++

Основные типы данных

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 8

Тип Размер (байты)

char 1

unsigned char 1

int 4

unsigned int 4

bool 1

double 8

Page 9: Основы программирования на C++

Переменные

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 9

C++ tutorial. Variables and types (http://www.cplusplus.com/doc/tutorial/variables/)

• Декларация (описание) [declaration]

• Инициализация [initialization]

#include "iostream"using namespace std;int main(){

int x; // декларацияx = 5 * 12; // инициализацияcout << "x: " << x;return 0;

}

int x = 5 * 12; // декларация c инициализацией

Page 10: Основы программирования на C++

Ввод значения переменной

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 10

#include "iostream"using namespace std;

int main(){

int x; // декларацияcout << "Enter integer value:\n";cin >> x; // получения значения переменнойcout << "\n\nx: " << x;return 0;

}

Page 11: Основы программирования на C++

УсловияЛогические и условные операции

Условный оператор

Переключатель

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 11

Page 12: Основы программирования на C++

Условные операции

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 12

Операция Название

> Больше

>= Больше или равно

< Меньше

<= Меньше или равно

== Равно

!= Не равно

Page 13: Основы программирования на C++

Логические операции

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 13

Операция Название

&& И

|| ИЛИ

! НЕ

^ Исключающее ИЛИ (XOR)

Побитовые логические операции в рамках знакомства с C++ мы рассматривать не

будем, но они есть…

Операторы в C и C++ (https://ru.wikipedia.org/wiki/Операторы_в_C_и_C%2B%2B)

Tutorial. Operators (http://www.cplusplus.com/doc/tutorial/operators/)

Tutorial. Operators in C++ (http://www.tutorialspoint.com/cplusplus/cpp_operators.htm)

Page 14: Основы программирования на C++

Тернарный оператор

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 14

<операнд_1>?<операнд_2>:<операнд_3>

true

false

Page 15: Основы программирования на C++

Условный оператор

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 15

if (условие) ThenStat_1

if (условие) {

ThenStat_1ThenStat_2...

}

if (условие) {

ThenStat_1ThenStat_2...

}else{

ElseStat_1ElseStat_2...

}

if (условие) ThenStat_1

elseElseStat_2

Краткая форма

Tutorial. C++ decision making statements (http://www.tutorialspoint.com/cplusplus/cpp_decision_making.htm)

Tutorial Statements and flow control (http://www.cplusplus.com/doc/tutorial/control/)

Page 16: Основы программирования на C++

Пример использования условия

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 16

#include "iostream"using namespace std;

int main(){

double x;cout << "Enter x: ";cin >> x;if (x > 0)

cout << "\nAbsolute value is: " << x;else

cout << "\nAbsolute value is: " << -x;return 0;

}

Получение значения модуля вещественного числа. Используем

математическое определение

Page 17: Основы программирования на C++

Переключатель

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 17

switch (выражение){

case constant1:statement_A1statement_A2...break;

case constant2:statement_B1statement_B2...break;

...default:

statement_Z1statement_Z2...

}

Page 18: Основы программирования на C++

Пример использования переключателя

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 18

int x;cout << "Enter your mark: ";cin >> x;switch (x) {

case 1:case 2:case 3: cout << "Your mark is 2"; break;case 4:case 5: cout << "Your mark is 3"; break;case 6:case 7: cout << "Your mark is 4" ;break;case 8:case 9:case 10: cout << "Your mark is 5"; break;

}

Получение четырёх балльного эквивалента для десятибалльной оценки

На практических занятиях мы дополним код этой программы, чтобы при вводе

чисел меньше единицы и больше 10 выводилось сообщение.

Page 19: Основы программирования на C++

ЦиклыЦикл с постусловием

Цикл с предусловием

Цикл с параметром

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 19

Page 20: Основы программирования на C++

while

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 20

while (условие){

statement1statement2...

}

#include "iostream"

using namespace std;

const int N = 10;int main(){

int i = 0;while (i < N)

cout << ++i << " ";return 0;

}

Если команда в теле цикла

одна, операторные скобки

также могут быть опущены.

Вывод первых десяти чисел

натурального ряда

Tutorial. Constants (http://www.cplusplus.com/doc/tutorial/constants/)

Page 21: Основы программирования на C++

do-while

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 21

do{

statement1statement2...

} while (условие); Вывод количества чисел делящихся на 10 и не

делящихся на 10 из диапазона [1;99]

#include "iostream"#define N 100using namespace std;int main(){

int i = 1, decs=0, other=0;do (i++ % 10 == 0) ? decs++ : other++;while (i < N);cout << decs << " " << other;

}

Page 22: Основы программирования на C++

for

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 22

for(инициализации; условие; список выражений){

statement1statement2...

}

for (int i = 0; i < 5; cout << i++);

int i = 0;for (; i < 5; cout << i++);

int i = 0;for (; i < 5; i++)cout << i;

Page 23: Основы программирования на C++

ФункцииПовторное использование кода

Перегрузка функций

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 23

Page 24: Основы программирования на C++

Студенты могут не знать, что

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 24

Алгоритмическая декомпозиция [algorithmic decomposition] - процесс

разделения системы на части, каждая из которых отражает этап общего

процесса

Структурное проектирование по методу сверху вниз

основной базовой единицей является подпрограмма, и программа в

целом принимает форму дерева, в котором одни подпрограммы в

процессе работы вызывают другие подпрограммы

Процедурная инкапсуляция используется в процедурной парадигме в

виде подпрограмм, которые скрывают детали реализации части алгоритма.

SADT (Structured Analysis and Design Technique)

методология структурного анализа и проектирования, интегрирующая

процесс моделирования, управление конфигурацией проекта,

использование дополнительных языковых средств и руководство

проектом со своим графическим языком

Page 25: Основы программирования на C++

Описание функций

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 25

#include <iostream>using namespace std;int main() {

int x;cout << "Enter integer value: ";cin >> x;cout << sqrt(x);return 0;

}

Описание

функции main()

Возвращение

значенияВызов функции

Тип возвращаемого

значения

Tutorial. Functions (http://www.cplusplus.com/doc/tutorial/functions/)

Tutorial. Функции в C++ — урок 6 (https://code-live.ru/post/cpp-functions/#more)

Page 26: Основы программирования на C++

Оформление кода в виде функции

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 26

#include <iostream>using namespace std;

int getValue(); // определение функцииint main() {

int x = getValue(); // вызов функцииcout << sqrt(x);return 0;

}int getValue() { // описание функции

int x;cout << "Enter integer value: ";cin >> x;return x;

}

Прототип

В С++ при помощи ключевого слова inline можно описывать инлайн-функции.

Небольшие инлайн-функции позволяют сделать программу быстрее. Но не все

компиляторы об этом знают

Inline functions(http://www.learncpp.com/cpp-tutorial/75-inline-functions/)

Page 27: Основы программирования на C++

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 27

#include <iostream>using namespace std;

double getValue();double geom(double x, double y) {

return sqrt(x*y);}int main() {

double x = getValue(); double y = getValue();cout << geom(x,y);return 0;

}double getValue() {

int x;cout << "Enter integer value: ";cin >> x;return x;

}

параметры

Как сделать так, чтобы в getValue()

передавать имя переменной и сохранять в

неё значение?

аргументы

Page 28: Основы программирования на C++

Вариант?

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 28

#include <iostream>using namespace std;double getValue();double geom(double x, double y) {

return sqrt(x*y);}int main() {

double x; getValue(x);double y; getValue(y);cout << geom(x,y);return 0;

}void getValue(double x) {

cout << "Enter double value: ";cin >> x;

}

Функция не

возвращает

значения

К сожалению, не вариант.

Код не будет компилироваться…

Почему?

Page 29: Основы программирования на C++

Используем ссылку

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 29

#include <iostream>using namespace std;

void getValue(double&); // изменяем объявлениеdouble geom(double x, double y) {

return sqrt(x*y);}int main() {

double x; getValue(x); // параметр передаётся по ссылкеdouble y; getValue(y); // и здесьcout << geom(x,y);return 0;

}void getValue(double& x) { // параметр - ссылка

cout << "Enter double value: ";cin >> x;

}

ссылка

Tutorial. Passing arguments by reference (http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/)

Как работает быстрее? При передаче

по ссылке или при передаче по

значению?

Page 30: Основы программирования на C++

Перегрузка функций

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 30

#include <iostream>using namespace std;void getValue(double&); void getValue(int&); // объявляем одноимённуюdouble geom(double x, double y) {

return sqrt(x*y);}int main() {

double x; getValue(x); // параметр передаётся по ссылкеint y; getValue(y); // и здесь, но другого типаcout << geom(x, y); // тип приведён неявно!!!return 0;

}void getValue(double &x) { // параметр - ссылка

cout << "Enter double value: ";cin >> x;

}void getValue(int &x) { // параметр - ссылка

cout << "Enter integer value: ";cin >> x;

}

Page 31: Основы программирования на C++

Умалчиваемые значения параметров

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 31

#include <iostream>using namespace std;

void print(char* str1, char *str2 = "Default string") {cout << str1 << " " << str2 << "\n";

}int main() {

char *text = new char[256];cout << "Enter your string: ";cin >> text;// умаливаемое значение заменитсяprint(text, "My string"); // у второго параметра есть умалчиваемое // значение, его можно опускать при вызовеprint(text); return 0;

}

Умалчиваемое

значение

Выделение памяти

под 256 символов

А ничего ли мы не забыли?delete text;

Page 32: Основы программирования на C++

Функции с переменным количеством параметров

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 32

тип имя (спецификация_явных_параметров, ...)

К сожалению, в программировании волшебство мало

распространено, и поэтому каждая функция с переменным

списком параметров должна иметь механизм определения

их количества и их типов. (с) В.В. Подбельский

Дальше без указателей нам не обойтись

Page 33: Основы программирования на C++

Производные типы данныхУказатели

Массивы

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 33

Page 34: Основы программирования на C++

Указатели

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 34

тип *имя_указателя int *ptr1;double *ptr2;

Операция

разыменовывания

тип *имя_указателя = инициализирующее_выражение;тип *имя_указателя (инициализирующее_выражение);

Описание переменной с типом указателя

Формы записи инициализатора

double x = 3;int *ptr1(NULL);double *ptr2;ptr2 = &x; // указатель связан с адресом x

Page 35: Основы программирования на C++

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 35

double x = 3;int *ptr1(NULL);double *ptr2;ptr2 = &x; // указатель связан с адресом xcout << *ptr2; // получение значение по адресу

double x = 3;int *ptr1(NULL);double *ptr2;*ptr2 = 44; // Не компилируется. Почему?cout << *ptr2;

double x = 3;int *ptr1(NULL);double *ptr2;*ptr1 = 44; // Так компилируется, но тоже не работает

Page 36: Основы программирования на C++

Операции над указателями. Арифметика указателей

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 36

int x;int *ptr = &x;cout << ptr << " " << ptr++ << "\n";cout << ptr - 2 << "\n";cout << ptr + sizeof(int) * 4 << "\n";

0076FDD8 0076FDD40076FDD00076FE18

• операция разыменования (*)

• приведение типов

• присваивание

• получение адреса (&)

• аддитивные операции

• инкремент/декремент

• операции сравнения

Page 37: Основы программирования на C++

Массивы

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 37

int arr[]; // нельзя определить массив без размера

тип имя_массива[константое_выражение]

int arr[10]; // определён массив из 10 элементов

int arr[10]; // определён массив из 10 элементовfor (int i = 0;i < 10;i++)

cout << arr[i] << " ";return 0;

-858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460

for (int i = 0;i < 10;i++) {arr[i] = 0;cout << arr[i] << " ";

}

Как изменится вывод?

Page 38: Основы программирования на C++

Массивы и указатели

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 38

for (int i = 0;i < 10;i++) {arr[i] = i;cout << arr[i] << " ";

}cout << "\nExperiments!!!\n";for (int i = 0;i < 10;i++) {

*(arr + i) = 9 - i;cout << arr[i] << " ";

}

0 1 2 3 4 5 6 7 8 9

Experiments!!!

9 8 7 6 5 4 3 2 1 0

char *str = "ABCDEFGH";int i = 0;while (*(str + i)) { // <=> *(x+i)!='\0'

cout << str[i++] << "\n";}

Строки – это массивы символов

char *str = "ABCDEFGH";int i = 0;cout << ++str;

char *str = "ABCDEFGH";cout << strlen(str);

Page 39: Основы программирования на C++

Небольшой пример со строчками

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 39

#include <iostream>using namespace std;

int main() {char a[][10] = { "foo", "bar", "baz", "quux" };char *b[] = { "foo","bar", "baz","quux" };cout << strlen(a[0])<< "\n";cout << strlen(*b);

for (int i = 0; i < 10; i++) {cout << a[0][i] << " ";

}for (int i = 0; i < 10; i++) {

cout << *b[i] << " ";}return 0;

}

Ошибка при

выполнении

Page 40: Основы программирования на C++

Многомерные массивы

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 40

тип имя_массива[К1][K2]...[KN];

массив, элементами которого служат массивы

#include <iostream>using namespace std;

const int N = 3;const int M = 5;const int K = 7;int main() {

int multiArr[N][M][K]; // трёхмерный массивreturn 0;}

К всему прочему, мы можем описать массив указателей

Page 41: Основы программирования на C++

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 41

#include <iostream>using namespace std;

const int N = 3;const int M = 5;const int K = 7;int main() {

int multiArr[N][M][K] = {1, 2, 3, 4, 5, 6, 7, 8}; for (int i = 0; i < N; i++)

for (int j = 0; j < M; j++)for (int k = 0; k < K; k++)

cout << multiArr[i][j][k] << " ";return 0;

}

int multiArr[N][M][K] = { {1,2,3},{4,5},{6,7,8} };

Что изменится?

Page 42: Основы программирования на C++

Многомерные массивы и указатели

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 42

const int N = 2;const int M = 2;const int K = 2;

int multiArr[N][M][K] = { {1,2},{3,4},{5,6}};

int multiArr[N][M][K] = { {1,2},{3,4} };

#include <iostream>using namespace std;

const int N = 2;const int M = 2;

int main() {int multiArr[N][M] = { {1,2},{3,4} };cout << *multiArr << "\n";cout << **multiArr << "\n";return 0;

}

*(*(multiArr + 1)) + 1 **multiArr + 1

Page 43: Основы программирования на C++

Массивы и функции

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 43

#include <iostream>using namespace std;void changeArray(int[]);int main() {

int ar[] = { 1,2,3,4 };cout << *ar << *ar + 1 << *ar + 2 << *ar + 3;cout << "\n";changeArray(ar);cout << ar[0] << ar[1] << ar[2] << ar[3];cout << "\n";cout << *ar << *ar + 1 << *ar + 2 << *ar + 3;return 0;

}void changeArray(int ar[]) {

ar[0] = ar[3];}

Передача массива в функцию и немного подозрительного кода

Page 44: Основы программирования на C++

Модификация с указателем

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 44

#include <iostream>using namespace std;void changeArray(int*);int main() {

int ar[] = { 1,2,3,4 };cout << *ar << *(ar + 1) << *(ar + 2) << *(ar + 3);cout << "\n";changeArray(ar);cout << *ar << *(ar + 1) << *(ar + 2) << *(ar + 3);return 0;

}void changeArray(int* ar) {

ar[0] = ar[3];}

Page 45: Основы программирования на C++

Указатели на функции

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 45

тип_функции (*имя_указателя) (спецификация_параметров);

Дети, этого нельзя понять – это нужно запомнить…

Так ли это?

int(*operation)(int, int);

Page 46: Основы программирования на C++

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 46

#include <iostream>using namespace std;int op1(int a, int b) { // сложение целых

return a + b;}int op2(int a, int b) { // вычитание целых

return a - b;}int calculation(int(*op)(int, int), int op1,int op2) {

return (*op)(op1, op2); // вызов функции}int main() {

int x = 5, y = 3;int(*operation)(int, int); // указатель на функциюoperation = op1; // связь указателя с функцией// передаём в качестве аргументаcout << calculation(operation,x,y);return 0;

}

Это уже почти целочисленный калькулятор. Допишем его на практических занятиях.

Page 47: Основы программирования на C++

Ни слова о драконах

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 47

тип_функции (*имя_указателя(спец_пар1)) (спецификация_параметров);

Здесь действует тоже мнемоническое правило!

int(*whatTheOperation()) (int, int);

Page 48: Основы программирования на C++

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 48

#include <iostream>using namespace std;int op1(int a, int b) { // сложение целых

return a + b;}int op2(int a, int b) { // вычитание целых

return a - b;}int calculation(int(*op)(int, int), int op1,int op2) {

return (*op)(op1, op2); // вызов функции}int(*whatTheOperation()) (int, int) {

int(*operation)(int, int); // указатель на функциюoperation = op2;return operation;

}int main() {

int x = 5, y = 3;// передаём в качестве аргумента функциюcout << calculation(whatTheOperation(),x,y);return 0;

}

Page 49: Основы программирования на C++

Ссылки

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 49

тип &имя_ссылки int &a;double &b;

тип &имя_ссылки = инициализирующее_выражение;тип &имя_ссылки (инициализирующее_выражение);

Описание переменной с типом ссылки

Формы записи инициализатора

int myVar = 123;int &myVarLink = myVar; // сохранили адресint &myVarLink2(myVar);

Page 50: Основы программирования на C++

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 50

#include <iostream>using namespace std;

int main() {int myVar = 123;

int &myVarLink = myVar; // сохранили адресint &myVarLink2(myVar);

cout << &myVarLink << " " << myVarLink << "\n";myVarLink++;cout << myVar << " " << myVarLink << " " << myVarLink2;return 0;

}

Page 51: Основы программирования на C++

Структуры

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 51

struct имя_структурного_типа {тип1 поле_структуры1;тип2 поле_структуры2;...

} имена_объектов;

Структуры сегодня потребуются нам на практических занятиях.

Tutorial. DataStructures (http://www.cplusplus.com/doc/tutorial/structures/)

Page 52: Основы программирования на C++

Доступ к полям структуры

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 52

По имени объекта

По указателю

имя_структуры.имя_элемента_структуры

имя_указателя -> имя_элемента_структуры

(*имя_указателя).имя_элемента_структуры

Page 53: Основы программирования на C++

(с) Максименкова О.В., НИУ ВШЭ, ФКН, ДПИ 53

Спасибо за внимание!

Максименкова Ольга Вениаминовна

Старший преподаватель Департамента программной инженерии, ФКН

E-mail: [email protected]

Blog: Stop To Scale (http://stoptoscale.blogspot.ru)