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