大家好,欢迎来到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