关于运算符重载函数编译时的两个问题
/*
运算符前置++和后置++重载为时钟类的成员函数。
前置单目运算符,重载函数没有形参,对于后置单目运算符,重载函数需要一个整型的形参
操作数是时钟类的对象
实现时间增加1秒钟
*/
#include <iostream.h>
class Clock
{
public:
Clock(int NewH=0,int NewM=0,int NewS=0){Hour=NewH;Minute=NewM;Second=NewS;};
void ShowTime(){cout<<Hour<<":"<<Minute<<":"<<Second<<endl;};
Clock operator ++()//前置单目运算符重载
{ Second++;
if (Second>=60)
{ Second-=60;
Minute++;
if(Minute>=60)
{ Minute-=60;
Hour++;
if (Hour>=24) Hour%=24;
}
}
cout<<"++Clock:"<<endl;
return *this;
}
Clock operator ++(int)//后置单目运算符重载
{
Second++;
if (Second>=60)
{ Second-=60;
Minute++;
if(Minute>=60)
{ Minute-=60;
Hour++;
if (Hour>=24) Hour%=24;
}
}
cout<<"Clock++:";
return *this;
}
private:
int Hour,Minute,Second;
}
/*问题1:
Clock operator::++()//前置单目运算符重载
{ Second++;
if (Second>=60)
{ Second-=60;
Minute++;
if(Minute>=60)
{ Minute-=60;
Hour++;
if (Hour>=24) Hour%=24;
}
}
cout<<"++Clock:"<<endl;
return *this;
}
Clock Clock::operator ++(int)//后置单目运算符重载
{
Second++;
if (Second>=60)
{ Second-=60;
Minute++;
if(Minute>=60)
{ Minute-=60;
Hour++;
if (Hour>=24) Hour%=24;
}
}
cout<<"Clock++:";
return *this;
}
*/
/*问题2
void*/main()
{
Clock myClock(23,59,59);
cout<<"First time output:";
myClock.ShowTime();
myClock++;
myClock.ShowTime();
++myClock;
myClock.ShowTime();
return 1;
}
我这条程序如今是对的,但针对注释那两部分,则有编译时出现了问题:
问题1:当我在类外写运算符重载函数++时,会出现下面结果:
当我在类外声明重载函数时,就会出现以下结果:
E:\homework\C++\code\下\eg8-2单目运算符函数成员的设计.cpp(20) : error C2589: '++' : illegal token on right side of '::'
E:\homework\C++\code\下\eg8-2单目运算符函数成员的设计.cpp(20) : error C2143: syntax error : missing ';' before '::'
E:\homework\C++\code\下\eg8-2单目运算符函数成员的设计.cpp(20) : fatal error C1004: unexpected end of file found
我百思不得其解,只有把它的定义写进类内。
问题2 :
当我在main前加上void ,就出现下面结果:
E:\homework\C++\code\下\eg8-2单目运算符函数成员的设计.cpp(77) : error C2628: 'Clock' followed by 'void' is illegal (did you forget a ';'?)
Error executing cl.exe.