重载操作符

1、重载操作符是具有特殊名称的函数:保留字operator后接需定义的操作符符号。

2、重载操作符必须具有至少一个类类型或枚举类型的操作符。

3、操作符的优先级、结合性或操作数目不能改变。重载操作符并不保证操作符的求值顺序,尤其是,不会保证内置逻辑AND、逻辑OR和逗号操作符的操作数求值。

4、使用重载操作符的方式,与内置类型操作数上使用操作符的方式一样。假定item1和item2是Sales_item对象,可以打印它们的和,就像打印两个int的和一样:
cout<<item1 + item2 <<endl;
也可以像调用普通函数一样调用重载操作符函数,指定函数并传递适当类型适当数目的形参:
cout << operator+(item1 , item2) << endl;

5、重载逗号、取地址、逻辑与、逻辑或等操作符通常不是好做法。

6、输入和输出操作符:
输出操作符<<的重载:操作符应接受ostream&作为第一个形参,对类类型const对象的引用作为第二个形参,并返回对ostrean形参的引用。
ostream&   operator<<(ostream& os, const ClassType &object)
{
               //any special logic to prepare object
               //actual output of members
              os << // ...
              //return ostream object
            return os;
}

7、IO操作符必须为非成员函数。

8、输入操作符>>的重载
istream&   operator>>( istream& in ,Sales_item& s)
{
                    in >> // ...
                    return in ;
}
设计输入操作符时,如果可能,要确定错误恢复措施。

9、赋值操作符可以重载,无论形参为何种类型,赋值操作符必须定义为成员函数。赋值必须返回对*this的引用。

10、重载箭头操作符必须返回指向类类型的指针,或者返回定义了自己的箭头操作符的类类型对象。

11、定义自增/自减操作符:后缀式操作符函数接受一个额外的(即,无用的)int型形参。
如:class CheckedPtr{
           public:
                    CheckedPtr operator++(int);
                    CheckedPtr operator--(int);
};

12、调用操作符和函数对象:可以为类类型的对象重载函数调用操作符。
如:struct absInt{
                 int operator()(int val){
                        return val < 0? -val : val ;
              }
};
这个类定义了一个操作:函数调用操作符,该操作符有一个形参并返回形参的绝对值。通过类类型的对象提供一个实参表而使用调用操作符,所用的方式看起来像一个函数调用:
int i = -42;
absInt absObj;
unsigned int ui = absObj(i);    //calls absInt::operator(int)
尽管absObj是一个对象而不是函数,仍然可以“调用”该对象,效果是运行由absObj对象定义的重载调用操作符。
定义了调用操作符的类,其对象常称为函数对象,即它们的行为类似函数的对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值