C++运算符重载

运算符是通过编写非静态成员函数定义的或全局函数定义进行重载的,只是函数名现在变成了关键字opetator,后面跟随的是被重载的运算符的符号。当运算符被重载为成员函数时,它们必须是非静态的,因为它们必须在这个类的对象上被调用,并操作这个对象。

为了在类的对象上使用运算符,这个运算符必须被重载,但有三种情况例外。赋值运算符(=)、取址运算符(&)、逗号运算符(,)。可以再补充在的情况下直接用于任何类的对象,赋值运算符可用于每个类,执行类的数据成员的逐成员赋值,即每个数据成员从源对象复制给目标对象。这种默认的逐成员赋值对于带指针成员的类是危险的。对于这样的类,将显示地重载赋值运算符。取址运算符(&)返回对象在内存中的地址。逗号运算符对左边的表达式求值,然后对右边的变大时求值,也可以重载这两个运算符。

重载运算符不改变运算符的优先级,运算符的结合性也不能通过重载改变,也不能改变运算符所带的操作数的数量。

当运算符用于基础类型时:运算符作用于基础类型的对象时所表达的意思,不会因为运算符重载而改变。运算符重载只适用于用户定义类型的对象,或者用户定义类型的对象与基础类型的对象混合用的情况。

类的成员运算符和全局运算符的比较:

 当运算符被函数实现为成员函数时,它的左操作数(or 唯一操作数)必须是这个运算符所在类的对象(或对象的引用)。如果做操作数必须是其他类或基础类型的对象,则这个运算符函数必须作为全局函数实现。如果全局函数必须直接访问类的私有成员或保护成员,则可以将它声明为这个类的友元。

必须重载为成员函数的运算符:

当重载()、[ ]、->或任何赋值运算符时,必须将运算符重载函数声明成类的成员函数。对于其他运算符,运算符重载函数可以使类的成员函数或全局函数。

流插入和流提取运算符要被重载为全局函数:

重载的流插入运算符(<<)用于做操作数为ostream&(输出流)类型的表达式中,example:Cout<<classObject.如果它的右操作数是用户定义类的对象,则为了按照这种方式使用运算符,必须将它重定义为全局函数。如果想将它定义为成员函数,则<<运算符必须是ostream类的成员。对于用户定义类型是不可能的,因为不允许修改C++标准库的类。类似地,重载的流提取运算符(>>)用于做操作数为istream&类型的表达式,examplecin>>classObject,当它的右操作数是用户定义类型的对象时,这个运算符也必须被重载为全局函数。而且,这个两个重载运算符函数都可能需要访问被输出或输入的类对象的私有数据成员,因此处于性能考虑,他们可以被声明为这个类的友元函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值