课本里的例题,记录一下知识点
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