C++学习笔记(5)----重载自增自减运算符

  自增运算符“++”和自减运算符“--”分别包含两个版本。即运算符前置形式(如 ++x)和运算符后置形式(如 x++),这两者进行的操作是不一样的。因此,当我们在对这两个运算符进行重载时,就必须区分前置和后置形式。C++根据参数的个数来区分前置和后置形式。如果按照通常的方法来重载 ++ 运算符(即作为成员函数重载时不带参数,或者作为非成员函数重载时带有一个参数),那么重载的是前置版本。要对后置形式进行重载,即 x++ 或 x--,就必须为重载函数再增加一个 int 类型的参数。该参数仅仅用来告诉编译器这是一个运算符后置形式,在实际调用时不需要给出实际的参数值。

示例,定义一个重载了前置 ++ 和后置 ++ 运算符的 Integer 类:

#include<iostream>
using namespace std;

class Integer {
public :
    Integer(int num) {
        value = num;
    }
    Integer() {
        Integer(0);
    }

    friend ostream& operator <<(ostream& os, Integer& integer);

    Integer& operator ++()//前置形式
    {
        this->value++;
        return *this;
    }

    const Integer operator++(int)    //后置形式
    {
        Integer tmp(this->value);
        this->value++;
        return tmp;
    }

    int getValue() const;
    int setValue(int num);
private:
    int value;
};

int Integer::getValue() const
{
    return value;
}
int Integer::setValue(int num)
{
    value = num;
    return value;
}

ostream& operator <<(ostream& os, Integer& integer)
{
    os << integer.value;
    return os;
}

int main(int argc, char* argv[])
{
    Integer num(10);
    cout << "num=" << num << endl;
    auto value = num++;
    cout << "num++=" << value << endl;
    cout << "now num=" << num << endl;
    value = ++num;
    cout << "++num=" << value << endl;

    return 0;
}

运行结果如下:

S:\Debug>string.exe
num=10
num++=10
now num=11
++num=12
value=24
时间: 2024-07-30 04:52:41

C++学习笔记(5)----重载自增自减运算符的相关文章

C++ Primer 学习笔记_58_重载操作符与转换 --重载操作符的定义

重载操作符与转换 --重载操作符的定义 引言: 明智地使用操作符重载可以使类类型的使用像内置类型一样直观! 重载操作符的定义 重载操作符是具有特殊名称的函数:保留字operator后接定义的操作符符号.如: Sales_item operator+(const Sales_item &,const Sales_item &); 除了函数调用操作符之外,重载操作符的形参数目(包括成员函数的隐式this指针)与操作符的操作数数目相同.函数调用操作符可以接受任意数目的操作数. 1.重载的操作符名

C++ Primer 学习笔记_64_重载操作符与转换 --转换与类类型【下】

重载操作符与转换 --转换与类类型[下] 四.重载确定和类的实参 在需要转换函数的实参时,编译器自动应用类的转换操作符或构造函数.因此,应该在函数确定期间考虑类转换操作符.函数重载确定由三步组成: 1)确定候选函数集合:这些是与被调用函数同名的函数. 2)选择可行的函数:这些是形参数目和类型与函数调用中的实参相匹配的候选函数.选择可行函数时,如果有转换操作,编译器还要确定需要哪个转换操作来匹配每个形参. 3)选择最佳匹配的函数.为了确定最佳匹配,对将实参转换为对应形参所需的类型转换进行分类.对于

C++ Primer 学习笔记_59_重载操作符与转换 --输入/输出、算术/关系操作符

重载操作符与转换 --输入/输出.算术/关系操作符 支持I/O操作的类所提供的I/O操作接口,一般应该与标准库iostream为内置类型定义的接口相同,因此,许多类都需要重载输入和输出操作符. 一.输出操作符<<的重载 为了与IO标准库一致,操作符应接受ostream&作为第一个形参,对类类型const对象的引用作为第二个形参,并返回ostream形参的引用! ostream &operator<<(ostream &os,const ClassType &

Mysql学习笔记(六)增删改查

原文:Mysql学习笔记(六)增删改查 PS:数据库最基本的操作就是增删改查了... 学习内容: 数据库的增删改查 1.增...其实就是向数据库中插入数据.. 插入语句 insert into table_name values("要插入的数据"); 比如说,我们先创建一个宠物表,用来记录宠物的基本信息以及所有者... create table pet ( name varchar(20), owner varchar(20), species varchar(20), sex cha

C++ Primer 学习笔记_63_重载操作符与转换 --转换与类类型【上】

重载操作符与转换 --转换与类类型[上] 引言: 在前面我们提到过:可以用一个实参调用的非explicit构造函数定义一个隐式转换.当提供了实参类型的对象需要一个类类型的对象时,编译器将使用该转换.于是:这种构造函数定义了到类类型的转换. 除了定义到类类型的转换之外,还可以定义从类类型到其他类型的转换.即:我们可以定义转换操作符,给定类类型的对象,该操作符将产生其他类型的对象.和其他转换一样,编译器将自动应用这个转换. 一.转换为什么有用? 定义一个SmallInt的类,该类实现安全小整数,这个

[转]C语言中自增自减运算符教学探究-中国论文网

摘要:C语言教学中,自增自减运算符运用得非常广泛,且具有一定的使用技巧和难度.在诸多运算符中,自增自减运算符是学生最难理解和最易出错的运算符.对自增自减运算符的功能和具体应用进行探究,以期为提高C语言教学效果提供帮助.中国论文网 http://www.xzbu.com/8/view-3865031.htm 关键词:C语言:自增自减运算符:教学效果 中图分类号:G434文献标识码:A文章编号:1672-7800(2012)012-0188-02 0引言 C语言编程设计中,若合理使用自增自减运算符,

【转】 C语言自增自减运算符深入剖析

转自:http://bbs.csdn.net/topics/330189207 C语言的自增++,自减--运算符对于初学者来说一直都是个难题,甚至很多老手也会产生困惑,最近我在网上看到一个问题:#include <stdio.h> void main()  /*主函数*/ { int a,b,c,d;  a=5; b=5;  c=(a++)+(a++)+(a++);  d=(++b)+(++b)+(++b);  printf("a=%d,b=%d,c=%d,d=%d\n",

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 逗号表达式与自增自减运算符和类型转换的规则

逗号运算符 逗号运算符优先级最低: 逗号运算符是用来分割多个表达式的: 由逗号运算符组成的逗号表达式的运算结果是:最后一个表达式的结果 注意: int i: i = 3,4,5,: 以上语句得到的i的值为3 i = (3, 4, 5); 得到的i的值为5 总结: ++i置前自增:先对i的值加1,然后用增1后的值参加所有的后续运算 i++滞后自增自减:先用变量原来的值参加所有的后续运算,直到本条语句所有的运算全部运算完毕后,才对变量值加减1 滞后自增减在条表中的特殊表现:先利用原值参与条件判断,然

自增自减运算符练习

自增自减运算符练习第一题int x = 1,y = 1; if(x++==2 & ++y==2) {x =7;}System.out.println("x="+x+",y="+y); 输出结果:x=2,y=2 第二题int x = 1,y = 1; if(x++==2 && ++y==2){x =7;}System.out.println("x="+x+",y="+y);输出结果:x=2,y=1 第三题