C++|运算符重载

C++|运算符重载运算符重载可以使系统内置的运算符可以用于类类型 运算符重载就是写一个函数解释某个运算符在某个类中的含义 要使得系统能自动找到重载的这个函数 函数名必须要体现出和某个被重载的运算符的联系 如 运算符能够实现 2 个对象间的加

大家好,欢迎来到IT知识分享网。

运算符重载可以使系统内置的运算符可以用于类类型。

运算符重载就是写一个函数解释某个运算符在某个类中的含义。

要使得系统能自动找到重载的这个函数,函数名必须要体现出和某个被重载的运算符的联系。

视频加载中…

如+ 运算符能够实现2个对象间的加。同样的,类A的对象a1、a2、a3,也希望能实现:

a3 = a1 + a2;

即分别把对象a1和a2的各个数据成员值对应相加,然后赋给对象a3。

运算符重载的作用:

  • 把某些事交给系统去做,用户只要知道相加就可。
  • 扩充运算符的功能。
  • 增强了C++ 语言的可扩充性。
  • 使用户定义的类更像系统的内置类型。

运算符重载的限制:

不是所有的运算符都能重载。

重载不能改变运算符的优先级和结合性。

重载不能改变运算符的操作数个数。

不能创建新的运算符。

可以重载的运算符:

+ – * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++ — ->* , -> [] () new delete new[] delete[]

不能重载的运算符:

. .* :: ?: sizeof

运算符重载的方法:

C++中规定,重载函数名为:

operator@

其中,@为要重载的运算符。如要重载“+”运算符,该重载函数名为operator+。要重载赋值运算符,函数名为operator=。

运算符的重载不能改变运算符的运算对象数。因此,重载函数的形式参数个数(包括成员函数的隐式指针this)与运算符的运算对象数相同。

运算符重载可以重载成为成员函数也可以重载成为全局函数实现。重载成全局函数时,最好把此函数设为友员函数。

如果作为类的成员函数,它的形式参数个数比运算符的运算对象数少1。这是因为成员函数有一个隐含的参数this。在C++中,把隐含参数this作为运算符的第一个参数。

当把一个一元运算符重载成成员函数时,该函数没有形式参数。

把一个二元运算符重载成成员函数时,该函数只有一个形式参数,就是右操作数,当前对象是左操作数。

重载实例:

为rational类增加“+”和“*”的重载函数,用以替换现有的add和multi函数

class Rational {

private:

int num;

int den;

void ReductFraction();

public:

Rational(int n = 0, int d = 1) { num = n; den = d;}

Rational operator+(const Rational &r1); //+运算符重载

Rational operator*(const Rational &r1);//*运算符重载

void display() { cout << num << ‘/’ << den;}

}

Rational Rational::operator+(const Rational &r1)

{ Rational tmp;

tmp.num = num * r1.den + r1.num * den;

tmp.den = den * r1.den;

tmp.ReductFraction();

return tmp;

}

Rational Rational::operator*(const Rational &r1)

{ Rational tmp;

tmp.num = num * r1.num;

tmp.den = den * r1.den;

tmp.ReductFraction();

return tmp;

}

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/188549.html

(0)
上一篇 2025-09-21 10:33
下一篇 2025-09-21 10:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信