前置和后置++运算符的重载

首先是类的声明头文件:

在类的声明中,分别用了四个函数实现重载的不同方式,已标注,程序可和类定义中的相应函数配合实现相应的重载功能。

/******************************Integer.h***********************************/
#ifndef _INTEGER_H_
#define _INTEGER_H_

class Integer{
public:
        Integer() = default;       //执行默认
        Integer(int);
        ~Integer() = default;

        void display()const;

        /************************前置++运算符**************************/
        //Integer& operator++();               //成员函数重载
        //friend Integer& operator++(Integer&);       //友元函数重载

        /************************后置++运算符**************************/
        //Integer operator++(int);	       //成员函数重载,规定:后置++重载时,为和前置++区分,参数须写上int,或int val(变量名不固定)	
        friend Integer operator++(Integer&, int);     //友元函数重载
private:
        int m_nValue;
};

#endif

其次是类的定义,同样为配合上面的定义,具有四个函数的定义。

#include "integer.h"
#include <iostream>

Integer::Integer(int nValue)
        :m_nValue(nValue)
{
    
}

void Integer::display()const
{
        std::cout << m_nValue << std::endl;
}

#if 0

//前置++的成员函数重载,不含参数,因为这种方式默认含有对象自己
Integer& Integer::operator++()
{
        m_nValue++;
        return *this;
}

//前置++的友元函数重载
Integer& operator++(Integer& obj)
{
        obj.m_nValue++;
        return obj;
}

//后置++的成员函数重载,在重载后置++时,规定:为了区分它和前置++,参数须写上int,或者int val(val变量名自由定义)。
Integer Integer::operator++(int)
{
        Integer temp;
        temp.m_nValue = m_nValue++;
        return temp;
}
#endif

//后置++的友元函数重载,参数为int
Integer operator++(Integer& obj, int)
{
        Integer temp(obj.m_nValue);
        obj.m_nValue++;
        return temp;
}

其次,前置++和后置++的主要区别在于:前置++执行该命令=时变量立即+1,而后置++在执行完该条语句后才+1。所以后置++需要一个临时变量,将初值保存起来,在表达式中发挥相应的作用。

下面是测试程序:

#include "integer.h"

int main(int argc, char *argv[])
{
        Integer n1(10);
        n1.display();

        Integer n2 = ++n1;
        n2.display();
        n1.display():

        Integer n3 = n1++;
        n3.display();
        n1.display();

        return 0;
}




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值