笔记:C++重载++前后区分

a++

++a

++有2种方式,那么在重载++的时候要怎么区分:

前置:

T& operator++(){

do something

return *this;

}

后置:

const T operator++(int){

T tmp = *this;

++(*this);

return tmp;

}

区别主要在:

1.返回值

2.函数参数

时间: 2024-10-15 13:54:17

笔记:C++重载++前后区分的相关文章

0718-----C++Primer听课笔记----------运算符重载

0.两个要点 a) 一个空类,编译器自动合成默认无参构造函数.析构函数.拷贝构造函数.赋值运算符. b) 在编写类的时候,必须严格区分对象是否可复制. 1.运算符重载之 string类 1.1 运算符重载的几个要点: a) 运算符重载可以有成员函数和友元函数的形式,后者比前者多一个参数. b) =和+=必须重载为成员函数的形式(不太理解原因). c) 输入和输出必须为友元函数的形式.而且输入操作符要考虑输入失败的情况. d) 运算符重载为成员函数的形式,那么该操作符的第一个操作数必然为该类的对象

c++笔记——运算符重载

运算符重载在c++中是经常用到的一个知识点,也是c++富有扩展性的重要支持点. 今天我准备把运算符重载在各种情况下的应用,都一一举例,待会我们就会知道运算符重载的威力和带来的便捷性. 运算符重载函数的两种形式: 1.作为类的成员函数 赋值(=).下标([]).调用( () ).成员访问箭头(->) , 这四个运算符必须是成员函数,其他运算符既可以是成员函数,也可以使非成员函数. 注意点:如果我们把运算符函数定义成成员函数时,它的左侧运算对象必须是所属类的一个对象. 2.作为非成员函数 一般情况下

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

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

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

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

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

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

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

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

c++笔记--函数重载(不合法的重载情况)

在下面几种情况下不能视为重载: 1.返回值不同的函数不能视为重载 2.返回值是否为静态不能视为重载 3.数组和指针 int fun(int *ptr); int fun(int ptr[]); // redeclaration of fun(int *ptr) 4.函数和函数指针 void h(int ()); void h(int (*)()); // redeclaration of h(int()) 5.参数是否为const不能区分(但是对于类成员函数是可以的) 注意:const修饰指针形

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

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

C++primer读书笔记8重载操作符

函数的重载操作符中也有不少细节 1 重载操作符特点 重载操作符本质上就是重载函数,它的特点: <1>除了函数调用操作符'()'外,所有的重载操作符的形参数目必须与操作符的操作数目相等. <2>重载操作符的操作数必须至少有一个类类型,否则就不是重载而是原型了. <3>优先级和结合性不会发生改变,例如对于算数操作符的重载,*的优先级肯定还是大于+ <4>不具有短路求值特性(就是根据已有的值就可以判断出最终的逻辑结果的话就会停止计算) <5>操作符可以