运算符重载基础知识
固定用法:
类内声明:
bool operator>=(const Student&) const;
初始化:
bool Student::operator>=(const Student& stu) const
{
//常成员函数,功能:比较两个对象的数据成员dScore大小
return this->dScore >= stu.dScore;
}
可以看到返回值是bool类型,即true或false,所以在后面的if语句中可以直接使用>=
if(s1 >= s2)
cout << s1.GetName() << " " << s1.GetScore() << endl;
else
cout << s2.GetName() << " " << s2.GetScore() << endl;
注意:
- 只能重载C++中已有的运算符,不能创建新的运算符
- 重载后不改变运算符优先级顺序(比如乘除和加减)
- 重载后不改变运算符的结合性
- 重载后不改变操作数的个数(比如-,可以a-b,也可以-a)
- 重载后不改变运算符原有的语义
- 重载时的操作对象至少有一个应该是类对象或其引用(否则没必要重载)
重载的两种方式
- 重载为类的成员函数
1、当运算符是双目运算符时
左操作数 运算符 右操作数;
编译时:
s1>=s2;//与下面式子等价
s1.operator>=(s2);
2、当运算符是单目运算符时
类内定义:
Time operator++(); //前置自增
Time operator++(int); //后置自增
返回的才是当前要使用的:
Time Time::operator++()//实现前置自增 ++a;
{
nSecond++;
if(nSecond == 60) {
nMinute++; nSecond = 0;}
if(nMinute == 60) {