C++之单目运算符重载
来源:互联网 发布:移动销售软件 编辑:程序博客网 时间:2024/05/21 21:46
单目运算符只有一个操作数,如!a,-b,&c,*p,还有最常用的++i和--i等。重载单目运算符的方法与重载双目运算符的方法是类似的。但由于单目运算符只有一个操作数,因此运算符重载函数只有一个参数,如果运算符重载函数作为成员函数,则还可省略此参数。
下面以自增运算符”++“为例,介绍单目运算符的重载。
[例10.5] 有一个Time类,包含数据成员minute(分)和sec(秒),模拟秒表,每次走一秒,满60秒进一分钟,此时秒又从0开始算。要求输出分和秒的值。运行情况如下:
34:1
34:2
┆
34:59
35:0
35:1 (共输出61行)
可以看到:在程序中对运算符“++”进行了重载,使它能用于Time类对象。“++”和“--”运算符有两种使用方式,前置自增运算符和后置自增运算符,它们的作用是不一样的,在重载时怎样区别这二者呢?
针对“++”和“--”这一特点,C++约定,在自增(自减)运算符重载函数中,增加一个int型形参,就是后置自增(自减)运算符函数。
[例10.6] 在例10.5程序的基础上增加对后置自增运算符的重载。修改后的程序如下:
请注意前置自增运算符“++”和后置自增运算符“++”二者作用的区别。前者是先自加,返回的是修改后的对象本身。后者返回的是自加前的对象,然后对象自加。请仔细分析后置自增运算符重载函数。
运行结果如下:
time1 : 34:59(time1原值)
++time1: 35:0 (执行++time1后time1的值)
time1++: 35:1 (再执行time1++后time1的值)
time2 : 35:0 (time2保存的是执行time1++前time1的值)
可以看到,重载后置自增运算符时,多了一个int型的参数,增加这个参数只是为了与前置自增运算符重载函数有所区别,此外没有任何作用。编译系统在遇到重载后置自增运算符时,会自动调用此函数。
下面以自增运算符”++“为例,介绍单目运算符的重载。
[例10.5] 有一个Time类,包含数据成员minute(分)和sec(秒),模拟秒表,每次走一秒,满60秒进一分钟,此时秒又从0开始算。要求输出分和秒的值。
- #include <iostream>
- using namespace std;
- class Time
- {
- public:
- Time( ){minute=0;sec=0;} //默认构造函数
- Time(int m,int s):minute(m),sec(s){ } //构造函数重载
- Time operator++( ); //声明运算符重载函数
- void display( ){cout<<minute<<":"<<sec<<endl;} //定义输出时间函数
- private:
- int minute;
- int sec;
- };
- Time Time::operator++( ) //定义运算符重载函数
- {
- if(++sec>=60)
- {
- sec-=60; //满60秒进1分钟
- ++minute;
- }
- return *this; //返回当前对象值
- }
- int main( )
- {
- Time time1(34,0);
- for (int i=0;i<61;i++)
- {
- ++time1;
- time1.display( );
- }
- return 0;
- }
34:1
34:2
┆
34:59
35:0
35:1 (共输出61行)
可以看到:在程序中对运算符“++”进行了重载,使它能用于Time类对象。“++”和“--”运算符有两种使用方式,前置自增运算符和后置自增运算符,它们的作用是不一样的,在重载时怎样区别这二者呢?
针对“++”和“--”这一特点,C++约定,在自增(自减)运算符重载函数中,增加一个int型形参,就是后置自增(自减)运算符函数。
[例10.6] 在例10.5程序的基础上增加对后置自增运算符的重载。修改后的程序如下:
- #include <iostream>
- using namespace std;
- class Time
- {
- public:
- Time( ){minute=0;sec=0;}
- Time(int m,int s):minute(m),sec(s){}
- Time operator++( );//声明前置自增运算符“++”重载函数
- Time operator++(int);//声明后置自增运算符“++”重载函数
- void display( ){cout<<minute<<":"<<sec<<endl;}
- private:
- int minute;
- int sec;
- };
- Time Time::operator++( )//定义前置自增运算符“++”重载函数
- {
- if(++sec>=60)
- {
- sec-=60;
- ++minute;
- }
- return *this;//返回自加后的当前对象
- }
- Time Time::operator++(int)//定义后置自增运算符“++”重载函数
- {
- Time temp(*this);
- sec++;
- if(sec>=60)
- {
- sec-=60;
- ++minute;
- }
- return temp; //返回的是自加前的对象
- }
- int main( )
- {
- Time time1(34,59),time2;
- cout<<" time1 : ";
- time1.display( );
- ++time1;
- cout<<"++time1: ";
- time1.display( );
- time2=time1++; //将自加前的对象的值赋给time2
- cout<<"time1++: ";
- time1.display( );
- cout<<" time2 :";
- time2.display( ); //输出time2对象的值
- }
请注意前置自增运算符“++”和后置自增运算符“++”二者作用的区别。前者是先自加,返回的是修改后的对象本身。后者返回的是自加前的对象,然后对象自加。请仔细分析后置自增运算符重载函数。
运行结果如下:
time1 : 34:59(time1原值)
++time1: 35:0 (执行++time1后time1的值)
time1++: 35:1 (再执行time1++后time1的值)
time2 : 35:0 (time2保存的是执行time1++前time1的值)
可以看到,重载后置自增运算符时,多了一个int型的参数,增加这个参数只是为了与前置自增运算符重载函数有所区别,此外没有任何作用。编译系统在遇到重载后置自增运算符时,会自动调用此函数。
0 0
- C++运算符重载之重载单目运算符
- C++之单目运算符重载
- C++之单目运算符重载
- 重载单目运算符
- 单目运算符重载 ++
- 单目运算符重载
- 单目运算符重载
- C++:运算符重载3(单目:日期自增)
- C++之双目/单目等运算符的重载
- 重载双目运算符和重载单目运算符
- C++读书笔记之 单目运算符重载 取负符号 - 重载
- 重载单目运算符练习题
- 单目运算符的重载
- 运算符重载加法(单目)
- 单目运算符的重载
- 重载双目/单目运算符
- 单目运算符-作为成员重载
- 【C++】C++大数之运算符重载
- .net链接各种数据库代码
- Pascal's Triangle II
- 美团推荐算法实践
- IOS应用程序自身的本地化
- android给ListView动态设置高度
- C++之单目运算符重载
- Browser and its Emerging Trends
- android stroke
- php一致性hash
- Jquery easy UI 上中下三栏布局
- MapReduce程序执行过程和命令格式
- Custom Container View Controller
- 用命令行实现“一键休眠”
- iOS的文件分类、存放路径及文件属性