Одно из достоинств перегрузки оператора
// Пример организации безопасного массива.
#include
#include
using namespace std;
const int SIZE = 3;
class atype {
int a[SIZE];
public:
atype() {
register int i;
for(i=0; i
}
int &operator[] (int i);
};
// Обеспечение контроля попадания в допустимый интервал для класса atype.
int &atype:: operator [](int i)
{
if(i<0 || i>SIZE-1) {
cout << "\n Значение индекса ";
cout << i << " выходит за границы массива. \n";
exit(1);
}
return a[i];
}
int main()
{
atype ob;
cout << ob[2]; // Отображается число 2.
cout << " ";
ob[2] =25; // Оператор "[]" стоит в левой части.
cout << ob[2]; // Отображается число 25.
ob[3] = 44; // Генерируется ошибка времени выполнения.
// поскольку значение 3 выходит за границы массива.
return 0;
}
При выполнении эта программа выводит такие результаты.
2 25
Значение индекса 3 выходит за границы массива.
При выполнении инструкции
ob[3] = 44;
операторной функцией
Возможно, самым интригующим оператором, который можно перегружать, является оператор
int operator()(float f, char *p);
И если в программе создается объект
ob (99.57, "перегрузка");
преобразуется в следующий вызов операторной функции
operator() (99.57, "перегрузка");
В общем случае при перегрузке оператора
Рассмотрим пример перегрузки оператора
// Демонстрация перегрузки оператора "()".
#include
using namespace std;
class three_d {
int x, y, z; // 3-мерные координаты
public:
three_d() { x = у = z = 0; }
three_d(int i, int j, int k) {x = i; у = j; z = k; }
three_d operator()(int a, int b, int c);
void show();
};
// Перегрузка оператора "()".
three_d three_d::operator()(int a, int b, int c)
{
three_d temp;
temp.x = x + a;
temp.у = у + b;
temp.z = z + c;
return temp;
}
// Отображение координат x, y, z.
void three_d::show()
{
cout << x << ", ";
cout << у << ", ";
cout << z << "\n";
}
int main()
{
three_d ob1(1, 2, 3), ob2;