10 перегрузка
.pdf10–51
1) ПЕРЕГРУЗКА ОПЕРАТОРА [ ]
Пример:
//Работает в Borland С++ Builder;
//Не работает в Borland C v.3.1, т.к.
//там невозможна inline-подстановка в
//функции, содержащие оператор for
const int SIZE = 5;
10–52
class array { int a[SIZE];
public: array ()
{
for(int i=0; i<SIZE; i++) a[i]=i;
}
int operator[](int i)
{
return a[i];
}
};
10–53
int main()
{
array ob;
for(int i=0; i<SIZE; i++) cout << ob[i] << ’ ’;
return 0;
}
0 1 2 3 4
10–54
2) ПЕРЕГРУЗКА ОПЕРАТОРА [] ДЛЯ КЛАССА БЕЗОПАСНЫХ МАССИВОВ
Пример:
const int SIZE = 5;
class array { int a[SIZE];
public: array ()
{ for (int i=0; i<SIZE; i++) a[i]=i; }
int & operator[](int i); };
10–55
int & array::operator[](int i)
{
if(i<0||i>SIZE-1)
{
cout << ”Индекс ” << i
<< ” вне границ массива”;
exit(1);
}
return a[i];
}
10–56
int main()
{
array ob; int i;
for (i=0; i<SIZE; i++) cout << ob[i] << ’ ’;
cout << endl;
ob[SIZE+1] = 10; // генерируется ошибка
return 0;
}
10–57
0 1 2 3 4
Индекс 6 вне границ массива
10–58
5.10.Преобразование типов
1)Переменная стандартного типа → Переменная стандартного типа: Операция приведения типа
2)Переменная стандартного типа → Объект класса:
Конструктор преобразования
3)Объект класса →
Переменная стандартного типа: Перегруженный оператор преобразования
10–59
1)ПОПРЕОБРАЗОВАНИЯ ОБЪЕКТА КЛАССА
ВПЕРЕМЕННУЮ СТАНДАРТНОГО ТИПА
Прототип функции-операции (ФО):
A::operator char*() const;
Если компилятор встречает выражение
(char*) a;
где a – объект класса A, то он генерирует вызов ФО:
a.operator char*();
10–60
2)ПОПРЕОБРАЗОВАНИЯ ОБЪЕКТА КЛАССА
ВОБЪЕКТ ДРУГОГО КЛАССА
Прототип ФО:
A::operator B const;