第11章运算符重载ppt课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序设计 - 11
函数实现
《程序设计》 cs.sjtu 2011.9
Rational Rational::operator+(const Rational &r1) const { Rational tmp;
tmp.num = num * r1.den + r1.num * den; tmp.den = den * r1.den; tmp.ReductFraction(); return tmp; }
程序设计 - 7
《程序设计》 cs.sjtu 2011.9
运算符重载的方法
❖ 运算符重载就是写一个函数解释某个运算符 在某个类中的含义
❖ 要使得系统能自动找到重载的这个函数,函 数名必须要体现出和某个被重载的运算符的 联系。
❖ C++中规定,重载函数名为
operator@ 其中,@为要重载的运算符。如要重载“+”运 算符,该重载函数名为operator+。要重载赋 值运算符,函数名为operator=。
程序设计 - 8
函数原型
《程序设计》 cs.sjtu 2011.9
❖ 运算符的重载不能改变运算符的运算对象数。因此,重载 函数的形式参数个数(包括成员函数的隐式指针this)与运 算符的运算对象数相同
❖ 运算符重载可以重载成成员函数也可以重载成全局函数实 现。重载成全局函数时,最好把此函数设为友员函数
Rational Rational::operator*(const Rational &r1) const
{ Rational tmp;
tmp.num = num * r1.num;
tmp.den = den * r1.den;
tmp.ReductFraction();
return tmp;
}
Hale Waihona Puke Baidu
程序设计 - 12
《程序设计》 cs.sjtu 2011.9
bool Rational::operator<(const Rational &r1) const { return num * r1.den < den * r1.num; }
bool Rational::operator==(const Rational &r1) const { return num == r1.num && den == r1.den;}
加。例如:类A的对象a1、a2、a3,希 望: a3 = a1 + a2; 即:分别把对象a1和a2的各个数据成员 值对应相加,然后赋给对象a3。
程序设计 - 2
问题的提出
《程序设计》 cs.sjtu 2011.9
❖把某些事交给系统去做,用户只要知道 相加就可
❖扩充运算符的功能 ❖增强了C++ 语言的可扩充性 ❖使用户定义的类更像系统的内置类型
程序设计 - 5
《程序设计》 cs.sjtu 2011.9
不能重载的运算符
. .* :: ?: sizeof
程序设计 - 6
《程序设计》 cs.sjtu 2011.9
第11章 运算符重载
❖ 什么是运算符重载 ❖ 运算符重载的方法 ❖ 几个特殊的运算符的重载 ❖ 自定义类型转换运算符 ❖ 运算符重载实例
bool Rational::operator>(const Rational &r1) const { return num * r1.den > den * r1.num; }
程序设计 - 9
重载实例
《程序设计》 cs.sjtu 2011.9
❖ 为rational类增加“+”和“*”以及比较 的重载函数,用以替换现有的add和 multi函数
程序设计 - 10
方案一:重载成成员函数 《程序设计》 cs.sjtu 2011.9
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) const; Rational operator*(const Rational &r1) const; bool operator<(const Rational &r1) const; bool operator==(const Rational &r1) const; bool operator>(const Rational &r1) const; bool operator<=(const Rational &r1) const; bool operator>=(const Rational &r1) const; bool operator!=(const Rational &r1) const; void display() { cout << num << '/' << den; } }
❖ 如果作为类的成员函数,它的形式参数个数比运算符的运 算对象数少1。这是因为成员函数有一个隐含的参数this。 在C++中,把隐含参数this作为运算符的第一个参数。
❖ 当把一个一元运算符重载成成员函数时,该函数没有形式 参数。
❖ 把一个二元运算符重载成成员函数时,该函数只有一个形 式参数,就是右操作数,当前对象是左操作数。
程序设计 - 3
《程序设计》 cs.sjtu 2011.9
运算符重载的限制
❖ 不是所有的运算符都能重载 ❖ 重载不能改变运算符的优先级和结合性 ❖ 重载不能改变运算符的操作数个数 ❖ 不能创建新的运算符
程序设计 - 4
《程序设计》 cs.sjtu 2011.9
可以重载的运算符
+ - * / % ^ &| ~ ! = < > += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++ -- ->* , -> [] () new delete new[] delete[]
《程序设计》 cs.sjtu 2011.9
第11章 运算符重载
❖ 什么是运算符重载 ❖ 运算符重载的方法 ❖ 几个特殊的运算符的重载 ❖ 自定义类型转换运算符 ❖ 运算符重载实例
程序设计 - 1
《程序设计》 cs.sjtu 2011.9
什么是运算符重载
❖ 使系统内置的运算符可以用于类类型 ❖ 例如:+ 运算符能够实现2个对象间的
相关文档
最新文档