C++中操作符重载自增\自减

转载 2015年07月07日 22:49:21

C++中操作符重载自增\自减_imaging_新浪博客
http://blog.sina.com.cn/s/blog_9ce5a1b501013618.html


你想过C++中操作符重载自增\自减时是怎样区分它的前缀和后缀形式的吗?

在句法上,重载函数是通过它们的参数类型的差异区分的,但是不管是前缀形式还是后缀形式的自增和自减都没有参数,我们到底该怎么区分它们呢?在开始时,C++在语法上面确实是存在这个问题的,程序员对此颇有微词。后来C++中加了一些特性来解决这个问题。

C++规定后缀形式有一个int类型的参数,当函数被调用时,编译器传递一个0作为int参数的值给该函数。

且看下面的小程序:

#include <iostream>

 

class MyInt{

    public:

    MyInt(int a):i(a) {   }

 

    MyInt& operator++();            // prefix ++

    const MyInt operator++(int);    // postfix ++

 

    MyInt& operator--();            // prefix --

    const MyInt operator--(int);    // postfix --

 

    friend std::ostream& operator<<(std::ostream&,const MyInt&);

 

    private:

    int i;

};

 

MyInt& MyInt::operator++()

{

    this->i++;

    return *this;

}

 

const MyInt MyInt::operator++(int)

{

    const MyInt temp = *this;

    ++(*this);

    return temp;

}

 

std::ostream& operator<<(std::ostream& out,const MyInt& t)

{

    out << t.i ;

    return out;

}

 

int main()

{

     MyInt a(0);

    

     a++;

     std::cout << a << std::endl; // i = 1,print 1

     ++a;

     std::cout << a << std::endl; // i = 2,print 2

 

     std::cout << a++ << std::endl; // i = 3,print 2

 

     std:: cout << ++a << std::endl; // i = 4,print 4

     return 0;

}

 

看上面的程序可以发现以下几点:

1.       后缀形式

C++_运算符重载_前缀自增与后缀自增

由于前缀自增与后缀自增在如果通过运算符重载在形式上相同,都为 以Date类为例 Date& operator++(Date &)(全局函数)/ Date& operator++( )(成员函数)无法区...
  • u010003835
  • u010003835
  • 2015年08月06日 18:16
  • 2643

关于C++成员函数和运算符的重载

1.为啥要重载操作符: 通过重载操作符,程序员可以针对“类”类型的操作数定义不同的操作符版本。良好的操作符定义可以使class类型的使用想内置类型一样直观简洁,使用重定义的操作符而不是命名函数使得...
  • lurendetiankong
  • lurendetiankong
  • 2016年11月10日 19:36
  • 1461

c语言:自增自减运算符的操作详解

本文主要针对编程小白哈!!!
  • yanmiao0715
  • yanmiao0715
  • 2017年03月10日 13:30
  • 1233

c++实现日期类(class Date) 构造函数 拷贝构造 操作符重载(输入输出 比较操作 算数运算 自增自减)

c++实现日期类(class Date) 构造函数 拷贝构造 操作符重载(输入输出 比较操作 算数运算 自增自减)...
  • a1414345
  • a1414345
  • 2016年10月30日 00:22
  • 631

C++读书笔记之 单目运算符重载 自增++自减——操作符重载

程序运行结果如下: ***************************************** now the time is : Hour: 22 Minute:57 test pr...
  • shihui512
  • shihui512
  • 2013年05月15日 23:28
  • 890

C++ 操作符重载(2) 复数加减乘除

复数由实部和虚部组成 复数间的运算通过实部和虚部,我们构建一个复数类来模拟复数间的操作 类定义如下: //复数的运算 class Complex { private: int real; /...
  • alex1997222
  • alex1997222
  • 2017年11月18日 22:19
  • 35

C++ 操作符重载

  • 2013年05月30日 01:47
  • 1KB
  • 下载

C++操作符重载

  • 2012年11月18日 21:03
  • 1.98MB
  • 下载

c++课件之操作符重载

  • 2014年10月17日 17:51
  • 612KB
  • 下载

C++操作符重载专题

  • 2011年04月13日 21:21
  • 181KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中操作符重载自增\自减
举报原因:
原因补充:

(最多只允许输入30个字)