当前位置: 首页 > 科技观察

EasyC++,运算符重载

时间:2023-03-12 18:06:33 科技观察

大家好,我是梁唐。运算符重载C++中除了函数可以重载之外,运算符也可以被重载。我们以前接触过其中一些,您可能没有意识到。例如,乘号*,用在指针上表示取值,用在算术上表示乘法。同一个符号,用在不同的地方,会有不同的效果。这实际上是一种重载。C++根据操作数的数量和类型来决定使用哪种操作。此外,C++允许运算符重载扩展到用户定义的类型,即结构和类。例如,我们可以重载加号来添加两个对象。其实这个用法也出现过,就是string类。当我们将两个字符串加在一起时,我们得到了这两个字符串的串联。我们通过在运算符中添加运算符来定义重载运算符。需要注意的是,我们只能重载C++中已有的运算符。例如operator[]会重载[]运算符,operator+会重载加法运算符等。让我们来看一个例子:#ifndefMYTIME0__H_#defineMYTIME0__H_classTime{private:inthours;intminutes;public:Time();Time(inth,intm=0);voidAddMin(intm);voidAddHr(inth);voidReset(inth=0,intm=0);TimeSum(constTime&t)const;voidShow()const;};#endif我们创建了一个Time类来表示时间,还有一些配套的方法。让我们关注Sum函数,它接收对Time对象的引用并返回Time对象。下面看一下这个函数的具体实现:TimeTime::Sum(constTime&t)const{Timesum;sum.minutes=minutes+t.minutes;sum.hours=hours+t.hours+sum.minutes/60;sum.minutes%=60;returnsum;}这段逻辑是两次相加的意思,需要注意进位。我们将传入的参数设置为引用,以提高参数传递的效率。返回结果不能设置为引用,因为sum对象是本地对象,函数结束时会被删除,所以引用指向了一个不存在的对象。我们可以将此函数重写为重载的加法运算符:TimeTime::operator+(constTime&t)const{Timesum;sum.minutes=minutes+t.minutes;sum.hours=hours+t.hours+sum.minutes/60;sum.minutes%=60;returnsum;}除了函数签名变了,逻辑和之前一样。我们在调用的时候,除了用函数名调用外,还可以用加号来调用:Timea,b;a.operator+(b);a+b;两者都是可能的并且等同于。本文转载自微信公众号“码农”,可通过以下二维码关注。转载本文请联系编码员梁公众号。