Дополнение С++. Преобразование типов. Дружественные функции и перегрузка операций. Преобразование данных
Автор: Alex_Monaco13 • Ноябрь 6, 2023 • Реферат • 4,430 Слов (18 Страниц) • 122 Просмотры
Дополнение С++. Преобразование типов. Дружественные функции и перегрузка операций. Преобразование данных.
1. Дополнение С++ 1
1.1. Область видимости 1
1.2. Объявление в операторах 1
1.3. Перегрузка функций 2
1.4. Значения формальных параметров по умолчанию 2
1.5. Ссылки и параметры на ссылки 3
2. Преобразование, определяемые классом 5
3. Перегрузка и выбор функции 7
4. Дружественные функции 8
5. Перегружаемые операции 9
5.1. Перегрузка унарного оператора 10
5.2. Перегрузка бинарного оператора 10
5.3. Операция вызова функции 11
5.4. Перегруженные операции - функции-члены против дружественных функций 11
5.5. Перегружаемые оператор присваивания и индексированные операторы 12
5.6. Оператор присваивания 13
5.7. Присваивание против инициализации 13
5.8. Перегруженные операции new delete, -> 14
1. Дополнение С++
1.1. Область видимости
Операции расширения области видимости (::) в С++ используются в различных контекстах. Она используется при определении функций-членов за пределами объявления класса, а также для доступа к переменным которые в данной области видимости замаскированы (невидимы). Пример. Автоматическая переменная r в функция increment и main маскирует глобальную переменную r. При помощи операции :: обе эти функции получают доступ к глобальным переменным.
Листинг 1. Операция расширения области видимости
#include <stdio.h>
float r=2.6;
int increment(int k) {
int r=k+15;
printf(“ В функции increment: значение r внутри increment = %d\n ”,r);
printf(“ В функции increment: значение r вне increment = %0.2f\n ”,::r);
return r;
}
void main(void){
int r=increment(20);
printf(“ В функции main: значение r внутри increment = %d\n ”,r);
printf(“ В функции main: значение r вне increment = %0.2f\n ”,::r);
}
Результат работы
В функции increment: значение r внутри increment = 35
В функции increment: значение r вне increment = 2.60;
В функции main: значение r внутри increment = 35
В функции main: значение r вне increment = 2.6
1.2. Объявление в операторах
В С++ объявления переменных могут быть размещены произвольно, даже внутри операторов.
for(int index=0; index<10; index++) { }
Трудно поместить объявления int index=0 ближе к точке первого использования переменной индекс, чем прямо внутри цикла. Область действия переменной index не ограничивается телом цикла, а простирается до конца блока, в котором этот цикл находится.
1.3. Перегрузка функций
Имена функций и операций могут быть перегружены в пределах одной и той же области видимости. Компилятор отличает одну функцию от другой (один оператор от другого) по ее сигнатуре. Сигнатура функции задается порядком следования и типами параметров.
Листинг 2. Перегруженные функции
#include <stdio.h>
#include <string.h>
int noName(int first) { return first*first; }
int niName(unsigned first) { return -first*first; }
char noName(char first) { return first+3;}
int noName(int first, char *second) { return first*strlen(second); }
int noName(int first,char second) { return first*second; }
float noName(float r) { return r*r; }
double noName(double r) { return r*r; }
void main(void) {
ptintf(“%d\n”,noName(4));
printf(“%d \n”,noName((unsigned)4));
printf(“%c\n”,noName(‘a’));
printf(“%d\n”,noName(4,”abc”));
printf(“%d\n”,noName(4,’a’));
printf(“%0.2f\n”,noName((float)1.2));
printf(“%0.2f\n”,noName((double)1.2));
}
Результат работы
….
...