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

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

lecture_02_refs_and_overloading.ppt

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

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

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

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

>Nortel Networks Confidential Ссылки. Возвращаемое значение. int& fr1(int i) { int local = 0; Nortel Networks Confidential Ссылки. Возвращаемое значение. int& fr1(int i) { int local = 0; local+=i; return local; } int& fr2(int i) { static int local_st = 0; local_st+=i; 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); void Nortel Networks Confidential Перегруженные имена функций void print(int); void print(const char*); void print(double); void print(long); void print(char); int h(char c, int i, short s, float f) { print(c); print(i); print(s); print(f); print(‘a’); print(49); print(0); print(“a”); } // print(char) // print(int) // print(int) // print(double) // print(char) // print(int) // print(int) // print(const char*)

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

>Nortel Networks Confidential Разрешение: явное; в случае нескольких аргументов void print(char); void print(long); void Nortel Networks Confidential Разрешение: явное; в случае нескольких аргументов void print(char); void print(long); void g(int i) { print(i); } void pow(int, int); void pow(double, double); void k(char c, float f) { 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); Nortel Networks Confidential Аргументы по умолчанию void print(int value, int base=10); { print(25, 10); print(25); print(25, 2); } void print(int value, int base); inline void print(int value) {print(value, 10);}

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