zoukankan      html  css  js  c++  java
  • 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,但是拷贝没有)。

     

  • 相关阅读:
    .NET 4 上的REST 框架
    WCF Web API 说再见,继承者ASP.NET Web API
    基于盛大的云数据库系统 MongoIC 构建图片系统
    微软以Apache许可协议开源ASP.NET MVC
    Redis 起步
    HttpClient介绍
    Quartz.NET 2.0正式发布
    CodeFirst Migrations随Entity Framework 4.3一同发布
    Redis 在Centos Linux 上的启动脚本
    Quartz.NET的管理工具
  • 原文地址:https://www.cnblogs.com/alexYuin/p/11965428.html
Copyright © 2011-2022 走看看