《计算思维与C语言概述》_第十一章.pptxVIP

  • 0
  • 0
  • 约1.85万字
  • 约 94页
  • 2026-01-30 发布于广东
  • 举报

《计算思维与C语言概述》_第十一章.pptx

11.1运算符重载的方法

11.1.1 运算符重载函数作为友元函数在10.7节创建的Fraction类定义了友元函数,实现了两个分数的相加运算:Fractionadd(constFraction&f1,constFraction&f2)本节将此函数更改为运算符重载函数,也将其设计成友元函数。该友元函数的参数个数、参数类型与运算符的运算对象数、运算对象类型完全相同。运算符“+”的运算对象数为两个,那么重载函数的参数为两个,类型都是Fraction类型,返回值也是Fraction类型。运算符分数加法的重载函数在类中可以被声明为友元函数:friendFractionoperator+(constFraction&,constFraction&); //两个分数相加下一页返回

11.1运算符重载的方法

在类外定义该运算符重载函数://运算符重载函数,两个分数相加Fractionoperator+(constFraction&f1,constFraction&f2){intnume=f1.numerator?f2.denominator+f2.numerator?f1.numerator;intdeno=f1.denominator?f2.denominator;Fractionf3(nume,deno);f3.reduce();returnf3;}上一页下一页返回

11.1运算符重载的方法

如果增加分数比较运算(如大于、小于、等于等),那么需要在Fraction类中增加比较运算符(、、==等)的重载函数。作为友元函数的比较运算符,重载函数的参数也有两个,参数类型为Fraction,返回类型为bool型。以重载比较运算符“”为例,在类中将其声明为友元函数:friendbooloperator(constFraction&,constFraction&);上一页下一页返回

11.1运算符重载的方法

在类外定义该运算符重载函数://“”运算符重载booloperator(constFraction&f1,constFraction&f2){returnf1.numerator?f2.denominatorf2.numerator?f1.denominator;}上一页下一页返回

11.1运算符重载的方法

前面的运算符是二元运算符,具有两个运算对象。一元运算符的运算对象为一个,如取负值运算符“-”。因此,在Fraction类中,取负值运算符“-”重载函数的参数为一个,类型为Fraction,返回值类型也为Fraction。在类中将其声明为友元函数:friendFractionoperator-(constFraction&);上一页下一页返回

11.1运算符重载的方法

在类外定义该运算符重载函数://取负值运算符重载Fractionoperator-(constFraction&f){returnFraction(-f.numerator,f.denominator);}上一页下一页返回

11.1运算符重载的方法

在测试代码中,可以测试上述运算符重载函数的有效性。程序的代码如下:Fractionf1(4,8),f2(6,9);cout(f1f2)endl;Fractionf3;f3=f1+f2;Fractionf4;f4=-f1;f1.disp();f2.disp();f3.disp();f4.disp();【练习】将10.7节创建的Fraction类分数的相加、相减、相乘与相除运算替换为友元运算符重载函数,并编写测试代码。上一页下一页返回

11.1运算符重载的方法

11.1.2 运算符重载函数作为成员函数友元是C++提供的一种破坏数据封装和数据隐藏的机制。要想增强数据的安全性和完整性,那么将运算符重载函数定义为类成员函数是一种更好的选择。如果将重载函数设计成类的成员函数,那么形参个数比运算符的运算对象少1个。原因是类成员函数有一个隐含的参数this。C++规定隐含参数this是运算符的第一个参数。若把一个二元运算符重载为成员函数,则该成员函数的参数只有一个。若把一个一元运算符重载为成员函数,则该成员函数没有参数。本节以在Fraction类重载运算符“?”为例来说明运算

文档评论(0)

1亿VIP精品文档

相关文档