【C++例8-2】 将单目运算符“++”重载为成员函数

课本里的例题,记录一下知识点

1.前置运算符返回值是Clock类引用,后置返回的是Clock类

前置是直接自增,然后参与运算,后置是先参与运算,再自增

①所以前置可以直接改变,并返回引用,返回引用也有利于继续对对象进行操作

返回引用:可以允许对同一个对象进行连续的递增操作,如++(++myClock),而且还可以与其他操作符链式使用。返回引用还可以使得表达式可以作为左值使用,允许对返回的对象进行赋值等操作

②而后置需要返回一个未自增之前的副本来参与接下来的运算,这也是C++语法的规则

2.this指针指向该对象本身

3.C++中有一个规定,用传递参数有无int来区分前置还是后置

实际上,这里int并没有实际作用,也不用特地传递,但是一定要写

4.在类中声明函数成员的默认值参数,在类外不能重复声明,即使两次声明值一样

5.使用重载后的运算符没有特殊函数格式,与使用普通运算符一样,但是要注意声明重载运算符函数的格式

//例8-2 将单目运算符“++”重载为成员函数
#include<iostream>
using namespace std;
class Clock {
public:
	Clock(int hour = 0, int minute = 0, int second = 0);
	void showTIme() const;
	Clock& operator++();	//前置单目运算符
	Clock operator++(int);	//后置单目运算符
private:
	int hour, minute, second;
};

Clock::Clock(int hour/*=0*/, int minute/*=0*/, int second/*=0*/) {
	if (0 <= hour && hour < 24 && 0 <= minute && minute < 60 && 0 <= second && second < 60) {
		this->hour = hour;
		this->minute = minute;
		this->second = second;
	}
	else
		cout << "Time error!" << endl;
}

void Clock::showTIme() const {
	cout << hour << ':' << minute << ':' << second << endl;
}

Clock& Clock::operator++() {	//前置单目
	second++;
	if (second >= 60) {
		second -= 60;
		minute++;
		if (minute >= 60) {
			minute -= 60;
			hour = (hour + 1) % 24;
		}
	}
	return *this;
}

Clock Clock::operator++(int) {		//后置单目
	//注意参数表中的整型参数
	Clock old = *this;
	++(*this);
	return old;
}

int main() {
	Clock myClock(23, 59, 59);
	cout << "First time onput: ";
	myClock.showTIme();
	cout << "Show myClock++: ";
	(myClock++).showTIme();
	cout << "Show ++myClock: ";
	(++myClock).showTIme();
	return 0;
}
// 输出
First time onput: 23:59:59
Show myClock++: 23:59:59
Show ++myClock: 0:0:1
  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值