重载操作符

重载流操作符

c++ 允许对操作符进行重载

不能被重载的操作符只有5个
1. .(成员访问运算符)
2. *(成员指针访问运算符)
3. ::(域运算符)
4. sizeof (长度运算符)
5. ?: (条件运算符)

对流的重载最好不要声明成类的成员函数。详细内容见C++Primer 第14章

举例:对一个类重载‘输入输出流’

class Time
{
    public:
        Time(int h = 0, int m = 0, int s = 0):hour(h), min(m), sec(s){}

        Time &operator++(); //前缀 ++a a = a+1; return a;
        Time operator++(int);//后缀 a++ temp = a; a = a + 1,return temp;

        friend ostream &operator<<(ostream &out, const Time &t);
        friend istream &operator>>(istream &in, Time &t);


    private:
        int hour;
        int min;
        int sec;
};

ostream &operator<<(ostream &out, const Time &t)
{
    out << "Time: " << t.hour << "." << t.min << "." << t.sec;

    return out;
}   

istream &operator>>(istream &in, Time &t)
{
    in >> t.hour >> t.min >> t.sec;

    if(!in)
        cout << "back..." << endl;

    return in;
}

重载++ 操作符

Time &Time::operator++() //前缀 
{

    if(++sec==60)
    {
        sec = 0;
        min++;
    }
    if(min==60)
    {
        min = 0;
        hour++;
    }
    if(hour==24)
        hour = 0;

    return *this;
}

Time Time::operator++(int) //后缀
{
    Time temp;
    temp = *this;

    if(sec++==60)
    {
        sec = 0;
        min++;
    }
    if(min==60)
    {
        min = 0;
        hour++;
    }
    if(hour==24)
        hour = 0;

    return temp;
}

推荐:双目运算符一般声明成友元, 而单目运算符一般声明成类成员。
具体如下:
A.赋值=、下标[]、调用()、和成员访问->等操作符必须定义为类的成员函数;

B.和赋值操作类似,复合赋值操作运算符+= -=等,应定义为类成员函数。

C.改变类状态或与给定类型紧密联系的其他一些操作符,如自增、自减和解引用,通常定义为类成员函数;

D.对称的操作符,如算术、相等、关系运算符、位操作符,通常定义为普通函数(友元)。

++ – 这两个运算符有特殊意义
&& || 这两个有短路功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的重载操作符指的是通过定义类的特殊方法,使得该类的对象可以支持相应的操作符。以下是一些常用的重载操作符及其对应的特殊方法: - 加法操作符: `+`,特殊方法名为 `__add__(self, other)`。 - 减法操作符: `-`,特殊方法名为 `__sub__(self, other)`。 - 乘法操作符: `*`,特殊方法名为 `__mul__(self, other)`。 - 除法操作符: `/`,特殊方法名为 `__truediv__(self, other)`。 - 取模操作符: `%`,特殊方法名为 `__mod__(self, other)`。 - 按位与操作符: `&`,特殊方法名为 `__and__(self, other)`。 - 按位或操作符: `|`,特殊方法名为 `__or__(self, other)`。 - 按位异或操作符: `^`,特殊方法名为 `__xor__(self, other)`。 - 左移操作符: `<<`,特殊方法名为 `__lshift__(self, other)`。 - 右移操作符: `>>`,特殊方法名为 `__rshift__(self, other)`。 - 一元加操作符: `+`,特殊方法名为 `__pos__(self)`。 - 一元减操作符: `-`,特殊方法名为 `__neg__(self)`。 - 一元取反操作符: `~`,特殊方法名为 `__invert__(self)`。 - 小于操作符: `<`,特殊方法名为 `__lt__(self, other)`。 - 小于等于操作符: `<=`,特殊方法名为 `__le__(self, other)`。 - 等于操作符: `==`,特殊方法名为 `__eq__(self, other)`。 - 大于等于操作符: `>=`,特殊方法名为 `__ge__(self, other)`。 - 大于操作符: `>`,特殊方法名为 `__gt__(self, other)`。 通过定义这些特殊方法,我们可以自定义类的行为,使其支持与内置类型相同的操作符

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值