Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

10 перегрузка

.pdf
Скачиваний:
14
Добавлен:
27.03.2015
Размер:
414.07 Кб
Скачать

10–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;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]