C++运算符重载


对于二元运算符,aa@bb可以理解为aa.operator@(bb),或者理解为operator@(aa,bb)。对于一元运算符,无论它是前缀的还是后缀的,都可以定义为无参数的非静态成员函数,或者定义为取一个参数的非成员函数。对任何前缀一元运算符@,@aa可以解释为aa.operator@()或者operator@(aa)。对任何后缀一元运算符@,aa@可以解释为aa.operator@(int)或者operator@(aa,int)

一个运算符函数必须或者是一个成员函数,或者至少有一个用户定义类型的参数(重新定义运算符new和delete的函数则没有此项要求)

class Tiny
{
    char v;
public:
    //转换到int的函数,作为转换目标的类型 是运算符名字的一部分,不能作为转换函数的返回值类型而重复写出
    operator int() const { return v; }
}

friend声明可以放在类声明中的私用部分或者公用部分,放在哪里都没有关系

通过将构造函数声明为explicit(显示)的方式可以抑制隐式转换。也就是说,explicit构造函数必须显示调用。

函数operator[]()必须是成员函数,operator()()必须作为成员函数,operator->()必须是成员函数

class Ptr
{
    X* operator->();
};

void f(Ptr p)
{
    p->m = 7; //(p.operator->())->m = 7
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值