博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ Primer笔记12_运算符重载_递增递减运算符_成员訪问运算符
阅读量:6969 次
发布时间:2019-06-27

本文共 1295 字,大约阅读时间需要 4 分钟。

1.递增递减运算符

C++语言并不要求递增递减运算符必须是类的成员。可是由于他们改变的正好是所操作对象的状态。所以建议设定为成员函数

对于递增与递减运算符来说,有前置与后置两个版本号,因此。我们应该为类定义两个版本号的递增与递减运算符。

问题来了。程序是怎样区分前置和后置呢?由于都是++和-- 为了解决问题,后置版本号的递增递减运算符接受一个额外的(不被使用)int类型的形參。当我们使用后置运算符时,编译器为这个形參提供一个值为0的实參。

这个形參唯一的作用就是区分前置和后置运算符函数。

由于不会用到int形參,所以无须为其命名。

样例例如以下:

Person & Person::operator++()//前置版本号的++{	age++;//only ++ age	return *this;}Person & Person::operator--()//前置版本号的--{	age--;	return *this;}Person & Person::operator++(int)//后置版本号的++{	Person &p = *this;	age++;	return p;}Person & Person::operator--(int)//后置版本号的--{	Person &p = *this;	age--;	return p;}
int main(){	Person p1(20, "SCOTT");	Person p2(10, "Kate");	cout << p1 << endl;	p1--;	cout << p1 << endl;		return 0;}
上述代码比較简单,为了方便演示。在我们的Person中仅仅对Person类中的age成员变量进行了递增递减操作。

执行结果:

Init Person

Init Person
p.age: 20, p.name: SCOTT
p.age: 19, p.name: SCOTT
~Person name: 0x8dcc048 age: 10
~Person name: 0x8dcc020 age: 19

2.成员訪问运算符

在迭代器类以及智能指针类中经常见到解引用运算符(*) 与 箭头运算符(->) 。

我们也能够自己定义这两个运算符。

样例:

Person * Person::operator->(){	return this;}
Person & Person::operator*(){	return *this;}
int main(){	Person p1(20, "SCOTT");	Person p2(10, "Kate");	cout << p1->getName() << endl;	cout << (*p2).getName() << endl;		return 0;}
执行结果:

Init Person

Init Person
SCOTT
Kate
~Person name: 0x89d7048 age: 10
~Person name: 0x89d7020 age: 20

转载地址:http://etisl.baihongyu.com/

你可能感兴趣的文章
Flume中关于HDFS的sink配置
查看>>
Idea 社区版开发指南-1
查看>>
date命令转换unix时间戳
查看>>
/usr/lib目录属性更改引发的蝴蝶效应
查看>>
比禅道好用的项目管理 项目管理工具Redmine 各功能测试
查看>>
org.apache.commons 常用工具类
查看>>
TabHost的使用
查看>>
OpenGL超级宝典笔记——颜色
查看>>
shell 命令学习
查看>>
身份证号码怎么玩
查看>>
Android UI生成随机颜色
查看>>
RabbitMQ官方中文入门教程(PHP版) 第四部分:路由(Routing)
查看>>
DataURL与File,Blob,canvas对象之间的互相转换的Javascript
查看>>
Android Tips 8(To run dex in process, the Gradle daemon needs a larger heap)
查看>>
Windows下.svn文件夹的最简易删除方法
查看>>
Servlet映射规则和Servlet的映射URL冲突时匹配原则
查看>>
把本地git项目上传到coding
查看>>
布置阿里云
查看>>
【草稿】.net 中已经引用了dll,但是编译报错找不到类型或者命名空间
查看>>
Sublime Text 3注册码
查看>>