第六章 习题

本文介绍如何在C++中创建一个分数类,实现防止分母为0、分数约简和避免负数分母的功能。通过重载运算符完成加、减、乘、除操作,并提供重载关系符'=='来判断两个分数是否相等。
一、填空题
1、运算符的重载实际上是 函数 的重载。
2、运算符函数必须被重载为 非静态成员函数  ,或被重载为 友元函数  。
3、成员函数重载运算符需要的参数的个数总比它的操作数    一个。
4、重载赋值运算符时,通常返回调用该运算符的 对象的引用 ,这样赋值就能进行连续赋值操作。
5、重载“[  ]”函数必须且只能带   1  个形参,且规定其参数的类型为   整型
6、重载调用运算符函数可以带有 个参数。
二、选择题
1、下列运算符中,不能被重载的是(B)。
 A. [ ]         B. ●          C. ( )        D.  /
2、下列描述重载运算符的规则中,不正确的是(C)。     
A. 重载运算符必须符合语言语法          B. 不能创建新的运算符 
C. 不能改变运算符操作的类型           D. 不能改变运算符原有的优先级
3、下列运算符中,不能有友元函数重载的是(A)。
 A. =             B.>           C. <         D. <>
4、下列描述中,不正确的是(C)。
  A. 赋值运算符有时也需要重载
  B. 在重载增量或减量运算符时,若应用友元函数,则需要使用引用参数
  C. 在任何情况下,重载运算符即可用友元函数,也可用成员函数
  D. 若在某自定义类中重载了下标运算符“[ ]”,则可将该类的类对象当作一个“数组”
三、判断题
1、下标运算符的重载提供了在C++中实现安全的数组下标的一种方法。    ( 对 )
2、对下标运算符“[ ]”,即可重载为类成员函数,又可重载为友元函数。  ( 错 )
3、重载后缀“++”运算符时多给出的一个int参数,在函数体中并不被使用。( 对 )
4、重载运算符需要的参数个数与操作数一样多。                 ( 错 )
四、简答题
1、比较两种运算符重载形式。
    答:在许多情况下,用友元函数还是成员函数重载运算符在功能上没有什么区别;有时将二元运算符重载为友元函数比重载为成员函数使用起来方便 。当然,重载为友元函数也有一些限制。第一,为保持与C++中规定的赋值语义相一致,虽然赋值运算符是个二元操作符,但不能重载为友元函数。同样,也应将“+=”、“-=”等赋值运算符重载为成员函数。第二,友元函数不能重载“()”、“[ ]”和“->”运算符。第三,在重载增量或减量运算符时,若使用友元函数,则需要应用引用参数。
2、赋值运算符重载与拷贝构造函数有什么区别?
    答:拷贝构造函数和赋值运算符重载函数都是用来拷贝一个类的对象给另一个同类型的对象。要注意拷贝构造函数与赋值运算符重载函数的使用区别。
     ①拷贝构造函数是用已存在对象的各成员的当前值来创建一个相同的新对象。在下述3种情况下,系统将自动调用所属类的拷贝构造函数:
      当说明新的类的对象的同时,要给它赋值另一个已存在对象的各成员当前值。
      当对象作为函数的赋值参数而对函数进行调用要进行实参和形参的结合时。
      当函数的返回值是类的对象,在函数调用结束后返回到主调函数处。
    ②赋值运算符重载函数要把一个已存在对象的各成员当前值赋值给另一个已存在的同类对象。
3、重载前缀“++”运算符与重载后缀“++”运算符在形式上有什么不同?
    答:重载后缀运算符带有形参int而重载前缀运算符没有。
    &n
(有理数)创建一个名为 Rational 的,用于对数进行算术运算。编写一个程序来测试你的。使用整数变量来表示的私有实例变量——子和母。 提供一个构造函数,使该的对象能够在声明时进行初始化。构造函数应以简化形式存储数。数 2/4 等价于 1/2,并将作为子中的 1母中的 2 存储在对象中。 如果没有提供初始值设定项,请提供默认值为 1 的无参数构造函数。 提供执行以下每个操作的公共方法: a) 将两个有理数相加:相加的结果应以简化形式存储。 b) 两个有理数相减:相减的结果应以简化形式存储。 c) 将两个有理数相乘:相乘的结果应以简化形式存储。 d) 将两个有理数相除:相除的结果应以简化形式存储。 e) 以 a/b 的形式返回有理数的字符串表示形式,其中 a 是子,b 是母。 f) 以浮点格式返回有理数的字符串表示形式. (考虑提供格式化功能的用户能够指定小数点右侧的精度位数。) 【Sample output 1】 Enter numerator 1: 12 Enter denominator 1: 3 Enter numerator 2: 5 Enter denominator 2: 14 Enter precision: 3 a=4/1 b=5/14 a + b = 61/14 = 4.357 a - b = 51/14 = 3.643 a * b = 10/7 = 1.429 a / b = 56/5 = 11.200 【Sample output 2】 Enter numerator 1: 1 Enter denominator 1: 4 Enter numerator 2: 75 Enter denominator 2: 35 Enter precision: 1 a=1/4 b=15/7 a + b = 67/28 = 2.4 a - b = -53/28 = -1.9 a * b = 15/28 = 0.5 a / b = 7/60 = 0.1 Note: The red texts are inputed ,others are output texts. Just use a space to seperate words
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值