Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Class massiv




{ float f[3];

public:

massiv(float i,float j,float k){f[0]=i; f[1]=j; f[2]=k;}

float operator[](int i)

{ return f[i];} // перегрузка оператора []

};

int main()

{ massiv ff(1,2,3);

double f;

int i;

cout << "введите номер индекса ";

cin >> i;

cout <<"f["<< i <<" ]= " << ff[i] << endl;

return 0;

}

В примере перегруженная функция operator[]() возвращает величину элемента массива, индекс которого передан в функцию в качестве параметра. Данная программа при небольшой модификации может позволить использовать оператор[] как справа, так и слева от оператора присваивания. Для этого необходимо, чтобы функция operator[]() возвращала не элемент, а ссылку на него.

#include <iostream>

using namespace std;

Class massiv

{ float f[3];

public:

massiv(float i,float j,float k){f[0]=i; f[1]=j; f[2]=k;}

float &operator[](int i) // перегрузка оператора []

{ if(i<0 || i>2) // проверка на выход за границы массива

{ cout << “Выход за пределы массива”<<endl;

exit(1);

}

return f[i];

}

};

int main()

{ massiv ff(1,2,3);

int i;

cout << "введите номер индекса ";

cin >> i;

cout <<"f["<< i <<" ]= " << ff[i] << endl;

ff[i]=5; // если функция operator не возвращает ссылку,то компиля-

// тор выдает ошибку =': left operand must be l-value

cout <<"f["<< i <<" ]= " << ff[i] << endl;

return 0;

}

Рассмотрим случай, когда функция operator возвращает не ссылку, а указатель на модифицируемое значение. Внесем некоторые изменения в рассмотренную выше программу.

Class massiv

{ float f[3];

public:

...

float *operator[](int i) // перегрузка оператора []

{ ...

return &f[i];

}

};

int main()

{ massiv ff(1,2,3);

...

*ff[i]=5; // функция operator возвращает указатель

cout <<"f["<< i <<" ]= " << *ff[i] << endl;

return 0;

}

В приведенном примере создается ложное впечатление, что ff является вектором указателей. Поэтому использование ссылки представляется более предпочтительным.

Приведем еще один пример программы, использующей перегрузку operator[].

// перегрузка функции operator[] на примере вычисления n!

#include <iostream>

using namespace std;

#include "values.h" // для определения константы MAXLONG

Class fact

{ long l;

public:

long operator[](int); // перегрузка оператора []

};

long fact::operator[](int n)

{ long l;

for (int i=0; i<=n; i++) //выбор буквы из уменьшаемой строки

if(l>MAXLONG/i)

cerr<<"ОШИБКА факториал числа "<<n<<" больше "<<MAXLONG;

else l*=i;

return l;

}

int main()

{ fact f;

int i,k;

cout << "введите число k для нахождения факториала"

cin >> k;

for (i=1; i<=k; i++)

cout << i <<"! = " << f[i] << endl;

return 0;

}





Поделиться с друзьями:


Дата добавления: 2015-09-20; Мы поможем в написании ваших работ!; просмотров: 876 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Чтобы получился студенческий борщ, его нужно варить также как и домашний, только без мяса и развести водой 1:10 © Неизвестно
==> читать все изречения...

2407 - | 2290 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.