Как видно по последней строке результатов программы, операторная функция
Как вы знаете, операторы
++0;
и в форме
0++;.
Как отмечено в комментариях к предыдущей программе, функция
three_d three_d::operator++(int notused);
Параметр
// Перегрузка постфиксной версии оператора "++".
three_d three_d::operator++(int notused)
{
three_d temp = *this; // сохранение исходного значения
x++; // инкремент координат х, у и z
у++;
z++;
return temp; // возврат исходного значения
}
Обратите внимание на то, что эта функция сохраняет текущее значение операнда путем выполнения такой инструкции.
three_d temp = *this;
Сохраненное значение операнда (в объекте
В следующей версии исходной программы реализованы обе формы оператора
// Демонстрация перегрузки оператора "++" с
// использованием его префиксной и постфиксной форм.
#include
using namespace std;
class three_d {
int x, у, z; // 3-мерные координаты
public:
three_d() { x = у = z = 0; }
three_d(int i, int j, int k) {x = i; у = j; z = k; }
three_d operator+(three_d op2); // Операнд op1 передается неявно.
three_d operator=(three_d op2); // Операнд op1 передается неявно.
three_d operator++(); // префиксная версия
three_d operator++(int notused); // постфиксная версия
void show();
};
// Перегрузка оператора " + ".
three_d three_d::operator+(three_d op2)
{
three_d temp;
temp.x = x + op2.x; // Операции сложения целочисленных
temp.у = у + ор2.у; // значений сохраняют оригинальный
temp.z = z + op2.z; // смысл.
return temp;
}
// Перегрузка оператора присваивания.
three_d three_d::operator=(three_d op2)
{
x = op2.x; // Операции присваивания целочисленных
у = ор2.у; // значений сохраняют оригинальный
z = ор2.z; // смысл.
return *this;
}
// Перегрузка префиксной версии оператора "++".
three_d three_d::operator++()
{
х++; // инкремент координат х, у и z
У++;
z++;
return *this;
}
// Перегрузка постфиксной версии оператора "++".
three_d three_d::operator++ (int notused)
{
three_d temp = *this; // сохранение исходного значения
х++; // инкремент координат х, у и z
у++;