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,但是拷贝没有)。