zoukankan      html  css  js  c++  java
  • C++前置++与后置++的区别与重载

    ++属于单目运算符,前置与后置的实现代码不一样,下面以整数自增为例:

    // 前置++,返回自增后的值,且返回的是一个左值
    int& operator++(){
    	*this += 1;
    	return *this;
    } 
    
    // 后置++,返回自增前的值,且返回的是一个右值
    const int operator++(int){
    	int temp(*this);
    	*this += 1;
    	return temp;
    }
    

    1、返回值以及返回类型的区别示例如下:

    int a = 0, b = 0;
    cout << a++ << " " << ++b << endl; // 输出 0 1
    a++ = 9;         // 错误,不能对右值类型赋值
    ++b = 2;         // 正确,b = 2
    int c = ++b = 9; // 正确,b = 9,c = 9
    

    2、自定义类重载前置++与后置++,如下例重载链表节点:

    class Node{
    public:
    	Node():val(0), next(NULL){}
    	
    	// 重载前置++,若next为空,则不自增且返回自己
    	Node& operator++(){
    		if(next == NULL){
    			return *this;
    		}
    		val = next->val;
    		next = next->next;
    		return *this;
    	} 
    	
    	// 后置++,若next为空,则不自增
    	const Node operator++(int){
    		if(next == NULL){
    			return *this;
    		}
    		Node temp = *this;
    		val = next->val;
    		next = next->next;
    		return temp;
    	}
    public:
    	int val;
    	Node *next;
    };
    
  • 相关阅读:
    Designing With Web Standard(一)
    再听姜育恒
    终于找到Effective C Sharp电子版了
    继续下一个题目
    想做就做,要做得漂亮
    空悲还是空杯
    整理,中庸
    分布式系统设计随想
    日志log4
    log4net更换目录
  • 原文地址:https://www.cnblogs.com/avota/p/5248744.html
Copyright © 2011-2022 走看看