C++ class内的 ++ 重载,左++,右++,重载示例。
#include <iostream>
// overloading "operator ++ " inside class
// ++ 是一元操作符
//////////////////////////////////////////////////////////
class Rectangle
{
public:
Rectangle(int w, int h)
: width(w), height(h)
{};
~Rectangle() {};
Rectangle& operator++ (); // ++i
Rectangle operator++ (int); // i++
public:
int width;
int height;
};
//////////////////////////////////////////////////////////
Rectangle &
Rectangle::operator++ ()
{
this->height++;
this->width++;
return *this;
}
// 返回类型不能是引用。为了使 i++ 的效果和默认类型一致
Rectangle
Rectangle::operator++ (int)
{
Rectangle b(*this);
++(*this);
return b;
}
//////////////////////////////////////////////////////////
std::ostream&
operator<< (std::ostream& os, const Rectangle& rec)
{
os << rec.width << ", " << rec.height;
return os;
}
//////////////////////////////////////////////////////////
int main()
{
Rectangle a(40, 10);
Rectangle b = (a++);
std::cout
<< "a = " << a << std::endl // 输出 41, 11
<< "b = " << b << std::endl // 输出 40, 10
;
Rectangle c = (++a);
std::cout
<< "a = " << a << std::endl // 输出 42, 12
<< "b = " << b << std::endl // 输出 40, 10
<< "c = " << c << std::endl // 输出 42, 12
;
std::cout
<< "a = " << a << std::endl // 输出 43, 13
<< "a = " << ++a << std::endl // 输出 43, 13
;
std::cout
<< "a = " << (a++) << std::endl // 输出 43, 13
;
// C++ 自带的 ++ 作用结果
{
int vint = 0;
std::cout
<< "v = " << vint << std::endl; // 输出 0
std::cout
<< "v = " << vint << std::endl // 输出 1
<< "v = " << vint++ << std::endl; // 输出 1
}
{
int vint = 0;
std::cout
<< "v = " << vint << std::endl; // 输出 0
std::cout
<< "v = " << vint << std::endl // 输出 1
<< "v = " << ++vint << std::endl; // 输出 1
}
return 0;
}

++i,应该是先自加一,返回自身(已经加1之后的自身);
i++,应该是先拷贝自身,再自加一,返回自身的拷贝(自己已经加1,但是拷贝没有)。

浙公网安备 33010602011771号