接重载1
将单目“++”运算符重载为成员函数。
前置单目运算符,重载函数没有形参,对于后置的单目运算符,重载函数需要一个int 形参
#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&&<=second&&second<60){
this->hour=hour;
this->minute=minute;
this->second=second;
}
else
cout<<"Time error!"<<end1;
}
void Clock::showTime() const{ //显示时间函数
cout<<hour<<":"<<minute<<":"second<<end1;
}
Clock&Clock:;operator++(){ //前置运算符重载函数
second++;
if(second>=60){
second-=60;
minute++;
if(minute>=60){
minute-=60;
hour=(hour+1)%24;
}
}
retrun *this;
}
Clock Clock::operator++(int){ //后置运算符重载
Clock old=*this;
++(*this);
return old;
}
int main (){
Clock myClock(23,59,59);
cout<<"First time output:";
myClock.showTime();
cout<<"show myClock ++ :";
(myClock++).showTime();
cout<<"show ++myClock :";
(++myClock).showTime;
return 0;
}
7.运算符重载为非成员函数
(1)运算需要的所有操作数都需要通过函数形参来传递。如果需要访问运算符参数对象的私有成员,可以将该函数声明为类的友元函数。仅在函数依赖于类的私有成员或者保护成员时再这样做。如果不声明友元函数,函数的操作依赖于类的接口,接口不变函数不变。声明了友元函数,接口不变,私有成员变化时,函数也需要改变。
(2)双目运算oprd1 B oprd2,oprd1/oprd2只要有一个具有自定义类型,就可以将B重载为非成员函数。形参为oprd1/oprd2.
单目运算 U oprd,其中oprd 具有自定义类型,就可以将U重载为非成员函数。
后置运算符--++。oprd++,其中oprd为自定义类型,就可以重载为非成员函数。函数的形参有两个,一个是oprd,一个是int形参。
8.成员函数和非成员函数两种重载形式对比
成员函数重载比较方便
重载操作符的第一个操作数不是可以更改的类型是。需要用非成员函数重载。
非成员函数重载,支持灵活的类型转换。