📅  最后修改于: 2020-09-25 06:42:54             🧑  作者: Mango
在本教程中,以最佳方式重载++和递减- 运算符 ,即,如果++ 运算符对一个对象进行运算 ,则将数据成员的值增加1,而如果- 运算符对数据成员的值减小1。用来。
#include
using namespace std;
class Check
{
private:
int i;
public:
Check(): i(0) { }
void operator ++()
{ ++i; }
void Display()
{ cout << "i=" << i << endl; }
};
int main()
{
Check obj;
// Displays the value of data member i for object obj
obj.Display();
// Invokes operator function void operator ++( )
++obj;
// Displays the value of data member i for object obj
obj.Display();
return 0;
}
输出
i=0
i=1
最初,当对象obj
被声明,数据成员的值i
为对象obj
是0(构造函数初始化i
为0)。
当对obj
++ 运算符操作时,将调用运算符 函数 void operator++( )
,从而将数据成员 i
的值增加为1。
就您不能使用代码的意义而言,该程序是不完整的:
obj1 = ++obj;
这是因为上述程序中的运算符 函数的返回类型为空。
这是上面程序的小修改,因此您可以使用代码obj1 = ++obj
。
#include
using namespace std;
class Check
{
private:
int i;
public:
Check(): i(0) { }
// Return type is Check
Check operator ++()
{
Check temp;
++i;
temp.i = i;
return temp;
}
void Display()
{ cout << "i = " << i << endl; }
};
int main()
{
Check obj, obj1;
obj.Display();
obj1.Display();
obj1 = ++obj;
obj.Display();
obj1.Display();
return 0;
}
输出
i = 0
i = 0
i = 1
i = 1
这个程序类似于上面的程序。
唯一的区别是, 运算符 函数的返回类型是Check
在这种情况下,其允许使用这两个码++obj;
obj1 = ++obj;
。这是因为,从运算符 函数返回的temp
存储在对象obj
。
因为, 运算符 函数的返回类型Check
,你也可以的值赋给obj
到另一个对象。
注意,=(赋值运算符)不需要重载,因为该运算符已在C++库中重载。
到目前为止,增量运算符的重载只有在以前缀形式使用时才是正确的。
这是对上面程序的修改,以使此功能适用于前缀形式和后缀形式。
#include
using namespace std;
class Check
{
private:
int i;
public:
Check(): i(0) { }
Check operator ++ ()
{
Check temp;
temp.i = ++i;
return temp;
}
// Notice int inside barcket which indicates postfix increment.
Check operator ++ (int)
{
Check temp;
temp.i = i++;
return temp;
}
void Display()
{ cout << "i = "<< i <
输出
i = 0
i = 0
i = 1
i = 1
i = 2
i = 1
当增量运算符以前缀形式重载时; Check operator ++ ()
被调用,但是当增量运算符以后缀形式重载时; Check operator ++ (int)
被调用。
注意, int
放在括号内。此int
向编译器提供信息,它是运算符的后缀版本。
不要混淆此int
并不表示整数。
递减运算符可以像增量运算符一样重载。
#include
using namespace std;
class Check
{
private:
int i;
public:
Check(): i(3) { }
Check operator -- ()
{
Check temp;
temp.i = --i;
return temp;
}
// Notice int inside barcket which indicates postfix decrement.
Check operator -- (int)
{
Check temp;
temp.i = i--;
return temp;
}
void Display()
{ cout << "i = "<< i <
输出
i = 3
i = 3
i = 2
i = 2
i = 1
i = 2
同样,一元运算运算符,如:!,〜等也可以类似的方式重载。