程序设计实习MOOC/自增和自减运算符的重载
自增和自减运算符的重载
问题
编写CDemo类,使得下面程序可以正常运行
int main(){
CDemo d(5);
cout << (d++) << ",";
cout << d << ",";
cout << (++d) << ",";
cout << d << endl;
cout << (d--) << ",";
cout << d << ",";
cout << (--d) << ",";
cout << d << endl;
return 0;
}
输出结果
5,6,7,7
7,6,5,5
分析
自增++
自减--
运算符有前置和后置之分,为了区分,后置运算符多一个参数int。
前置运算符:作为一元运算符重载,可以重载为成员函数也可以重载为全局函数(返回值到底是不是引用?)。
后置运算符:作为二元运算符重载,多写一个参数int,但是没有实际意义。可以重载为成员函数也可以重载为全局函数。返回值不是引用!不是引用!不是引用!
强调:后置运算符多一个参数int,返回值不是引用。
为了cout
可以正常输出,重载类型强制转换运算符int作为成员函数。
类型强制转换运算符重载
不能写返回值类型
实际上其返回值类型为类型强制转换运算符代表的类型
运算符重载的注意事项
- C++不允许定义新的运算符
- 重载后运算符的含义应该符合日常习惯
- 运算符重载不改变运算符的优先级
- 以下运算符不能够被重载:
.
.*
::
?:
sizeof
- 以下运算符重载是必须声明为类的成员函数:
()
[]
->
- 流提取
>>
和流插入<<
运算符只能重载为全局函数,第一个参数ostream
对象必须为引用。
完整代码
#include<iostream>
using namespace std;
class CDemo{
public:
CDemo(int num = 0):n(num){}
CDemo operator++(); //前置++,成员函数
CDemo operator++(int); //后置++,成员函数
friend CDemo operator--(CDemo&); //前置--,友元函数
friend CDemo operator--(CDemo&, int); //后置--,友元函数
operator int(){ //强制类型转换运算符重载
return n;
}
// friend ostream& operator<<(ostream& co, const CDemo& d);
// friend istream& operator>>(istream& ci, CDemo& d);
private:
int n;
};
//前置++
CDemo CDemo::operator++(){
n++;
return *this;
}
//后置++
CDemo CDemo::operator++(int){
CDemo temp(*this);
n++;
return temp;
}
//前置--
CDemo operator--(CDemo& d){
d.n--;
return d;
}
//后置--
CDemo operator--(CDemo& d, int){
CDemo temp(d);
d.n--;
return temp;
}
//ostream& operator<<(ostream& co, const CDemo& d){
// co << d.n;
// return co;
//}
//istream& operator>>(istream& ci, CDemo& d){
// ci >> d.n;
// return ci;
//}
int main(){
CDemo d(5);
cout << (d++) << ",";
cout << d << ",";
cout << (++d) << ",";
cout << d << endl;
cout << (d--) << ",";
cout << d << ",";
cout << (--d) << ",";
cout << d << endl;
return 0;
}
afra算法练习
记录编程,慢慢成长
推荐阅读
【LeetCode】字符串初级算法-验证回文字符串
题目描述 验证回文字符串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。 示例 1: {代码...} 示例 2: {代码...} 思路 用...
afra阅读 2.5k
程序员适合创业吗?
大家好,我是良许。从去年 12 月开始,我已经在视频号、抖音等主流视频平台上连续更新视频到现在,并得到了不错的评价。每个视频都花了很多时间精力用心制作,欢迎大家关注哦~考虑到有些小伙伴没有看过我的视频,...
良许赞 3阅读 1.3k
比cat更好用的命令!
但 cat 命令两个很重大的缺陷:1. 不能语法高亮输出;2. 文本太长的话无法翻页输出。正是这两个不足,使得 cat 只能用来查看行数不多的小文件。
良许赞 2阅读 679
DBoS 系统说明
程序员TianSong以单片机开发入门,后续又做了 Qt 相关工作,有时间后开始进行 linux 相关的学习,恰巧在二一年十一月份,百问网的韦东山老师进行了三个月的 linux 驱动直播,于是有了开发 DBoS 的念头。
TianSong赞 1阅读 1.2k
【Qt】简单桌面
[链接]简介简单桌面是一款小巧便捷的桌面背景管理软件。由编程爱好者个人开发,不收集使用者个人信息、不连接网络、不弹窗。下载功能支持单静态图片及多静态图片轮播(轮播时间可设置)支持GIF动画背景支持视频背...
TianSong赞 3阅读 2.2k
良许翻天覆地的2022年
大家好,我是良许,新年快乐呀~在我女室友坚持不懈的努力之下,2022年的最后一天我终于被她传染了,阳了~此时的我,正顶着37多度的低烧写下这篇年终总结。2022年,对于大多数人而言,封控是主旋律——不停地核酸,...
良许赞 2阅读 773评论 1
一个Bug让人类科技倒退几十年?
大家好,我是良许。前几天在直播的时候,问了直播间的小伙伴有没人知道「千年虫」这种神奇的「生物」的,居然没有一人能够答得上来的。所以,今天就跟大家科普一下这个人类历史上最大的 Bug 。1. 全世界的恐慌一...
良许阅读 1.4k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。