Скачать презентацию Лекция 2 Ссылки Перегрузка функций Артур Садеков Скачать презентацию Лекция 2 Ссылки Перегрузка функций Артур Садеков

Lecture_02_Refs_and_overloading.ppt

  • Количество слайдов: 9

Лекция 2. Ссылки. Перегрузка функций. Артур Садеков Лекция 2. Ссылки. Перегрузка функций. Артур Садеков

Ссылки • • • Альтернативное имя объекта Должна быть инициализирована Значение ссылки нельзя изменить Ссылки • • • Альтернативное имя объекта Должна быть инициализирована Значение ссылки нельзя изменить Ни один оператор не выполняет действия над ссылкой Чаще всего используются для указания аргументов функции и возвращаемых значений int i=1; int& r 1=i; int& r 2; // ошибка int x = r 1; // x = 1; r 1 = 2; // i = 2; r 1++; // i = 3; int* pp = &r 1; /* pp указывает на i */ Nortel Networks Confidential

Ссылки. Инициализация. Аргументы функции. float f = 2. 9; double& dr 1 = 1; Ссылки. Инициализация. Аргументы функции. float f = 2. 9; double& dr 1 = 1; // ошибка double sqrt (const double&); void f 1 (double d) { float f = sqrt(1); double& dr 2 = f; // ошибка f = sqrt(f); const double& cdr = 1; f = sqrt(d); void f (int val, int& ref) { } val++; ref++; } void update (float&); void f 2 () void f 3 (double d, float f) { { update(2. 0 f); int i = 1, j = 1; update(f); f (i, j); } //ошибка update(d); // i=1, j=2 Nortel Networks Confidential } //ошибка

Ссылки. Возвращаемое значение. int& fr 1(int i) int& fr 2(int i) { { int Ссылки. Возвращаемое значение. int& fr 1(int i) int& fr 2(int i) { { int local = 0; static int local_st = 0; local+=i; local_st+=i; return local; // плохо } return local_st; // хорошо! } int* fp(int i) { int local = 1; local+=i; return &local; } Nortel Networks Confidential // плохо

Перегруженные имена функций void print(int); void print(const char*); void print(double); int h(char c, int Перегруженные имена функций void print(int); void print(const char*); void print(double); int h(char c, int i, short s, float f) { print(c); // print(char) print(i); // print(int) print(f); void print(char); // print(int) print(s); void print(long); // print(double) print(‘a’); // print(char) print(49); // print(int) print(0); // print(int) print(“a”); // print(const char*) } Nortel Networks Confidential

Перегрузка и возвращаемые типы • возвращаемые типы не участвуют в разрешении перегрузок float sqrt(float); Перегрузка и возвращаемые типы • возвращаемые типы не участвуют в разрешении перегрузок float sqrt(float); double sqrt(double); void f(double da, float fla) { float fl = sqrt(da); // вызов sqrt(double) double d = sqrt(da); // вызов sqrt(double) fl = sqrt(fla); // вызов sqrt(float) d // вызов sqrt(float) = sqrt(fla); } Nortel Networks Confidential

Разрешение: явное; в случае нескольких аргументов void print(char); void pow(int, int); void print(long); void Разрешение: явное; в случае нескольких аргументов void print(char); void pow(int, int); void print(long); void pow(double, double); void g(int i) void k(char c, float f) { { print(i); pow (2, 2); // ошибка pow (2. 0, 2. 0); } pow (2, c); pow (f, 2. 0); pow (2. 0, 2); } Nortel Networks Confidential // ошибка

Аргументы по умолчанию void print(int value, int base=10); { print(25, 10); print(25, 2); } Аргументы по умолчанию void print(int value, int base=10); { print(25, 10); print(25, 2); } void print(int value, int base); inline void print(int value) {print(value, 10); } Nortel Networks Confidential

Конец Nortel Networks Confidential Конец Nortel Networks Confidential