Выбрать главу

 return temp;

}

// Перегрузка оператора "=".

three_d three_d::operator=(three_d op2)

{

 x = op2.x;

 у = op2.y;

 z = op2.z;

 return *this;

}

/* Перегрузка префиксной версии оператора "++" с использованием функции-"друга". Для этого необходимо использование ссылочного параметра.

*/

 three_d operator++(three_d &op1)

{

 op1.х++;

 op1.у++;

 op1.z++;

 return op1;

}

/* Перегрузка постфиксной версии оператора "++" с использованием функции-"друга". Для этого необходимо использование ссылочного параметра.

*/

 three_d operator++(three_d &op1, int notused)

{

 three_d temp = op1;

 op1.x++;

 op1.у++;

 op1.z++;

 return temp;

}

// Отображение координат X, Y, Z.

void three_d:: show()

{

 cout << x << ", ";

 cout << у << ", ";

 cout << z << "\n";

}

int main()

{

 three_d a(1, 2, 3), b(10, 10, 10), c;

 a.show();

 b.show();

 с = a + b; // сложение объектов а и b

 c.show();

 c=a+b+c; // сложение объектов a, b и с

 с.show();

 с = b = a; // демонстрация множественного присваивания

 с.show();

 b.show();

 ++c; // префиксная версия инкремента

 c.show();

 с++; // постфиксная версия инкремента

 с. show();

 а = ++с; // Объект а получает значение объекта с после инкрементирования.

 a.show(); // В этом случае объекты а и с

 с.show(); // имеют одинаковые значения координат.

 а = C++; // Объект а получает значение объекта с до инкрементирования.

 a.show(); // В этом случае объекты а и с

 с.show(); // имеют различные значения координат.

 return 0;

}

Узелок на память. Для реализации перегрузки операторов следует использовать функции-члены. Функции-"друзья" используются в C++ в основном для обработки специальных ситуаций.

Перегрузка операторов отношения и логических операторов

Операторы отношений (например, "==" или "<") и логические операторы (например, "&&" или "||") также можно перегружать, причем делать это совсем нетрудно. Как правило, перегруженная операторная функция отношения возвращает объект класса, для которого она перегружается. А перегруженный оператор отношения или логический оператор возвращает одно из двух возможных значений: true или false. Это соответствует обычному применению этих операторов и позволяет использовать их в условных выражениях.

Рассмотрим пример перегрузки оператора "==" для уже знакомого нам класса three_d.

// Перегрузка оператора "=="

bool three_d::operator==(three_d op2)

{

 if((x == op2.x) && (y == op2.y) && (z == op2.z)) return true;

 else return false;

}

Если считать, что операторная функция operator==() уже реализована, следующий фрагмент кода совершенно корректен.

three_d а, b;

 // ...

if(а == b) cout << "а равно b\n";

else cout << "а не равно b\n";

Поскольку операторная функция operator==() возвращает результат типа bool, ее можно использовать для управления инструкцией if. В качестве упражнения попробуйте реализовать и другие операторы отношений и логические операторы для класса three_d.