第六章作业

本文详细介绍了C++中的运算符重载概念,包括填空题、选择题和判断题等多种题型,帮助读者理解如何重载运算符,如赋值运算符、递增运算符等,并通过实例对比了成员函数与友元函数重载的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、填空题

1、运算符的重载实际上是 函数 的重载。

2、运算符函数必须被重载为 非静态成员函数 ,或被重载为 友元函数 。

3、成员函数重载运算符需要的参数的个数总比它的操作数 少 一个。

4、重载赋值运算符时,通常返回调用该运算符的 对象的引用 ,这样赋值就能进行连续赋值操作。

5、重载“[ ]”函数必须且只能带 整型 个形参,且规定其参数的类型。

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++中规定的赋值语义相一致,虽然赋值运算符是个二元操作符,但不能重载为友元函数。同样,也应将“+=”、“-=”等赋值运算符重载为成员函数。第二,友元函数不能重载“()”、“[ ]”和“->”运算符。第三,在重载增量或减量运算符时,若使用友元函数,则需要应用引用参数。
  • 1
  • 2

2、赋值运算符重载与拷贝构造函数有什么区别?

答:拷贝构造函数和赋值运算符重载函数都是用来拷贝一个类的对象给另一个同类型的对象。要注意拷贝构造函数与赋值运算符重载函数的使用区别。
 ①拷贝构造函数是用已存在对象的各成员的当前值来创建一个相同的新对象。在下述3种情况下,系统将自动调用所属类的拷贝构造函数:
  当说明新的类的对象的同时,要给它赋值另一个已存在对象的各成员当前值。
  当对象作为函数的赋值参数而对函数进行调用要进行实参和形参的结合时。
  当函数的返回值是类的对象,在函数调用结束后返回到主调函数处。
②赋值运算符重载函数要把一个已存在对象的各成员当前值赋值给另一个已存在的同类对象。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3、重载前缀“++”运算符与重载后缀“++”运算符在形式上有什么不同?

答:重载后缀运算符带有形参int而重载前缀运算符没有。

  以成员函数方式重载前缀“++”运算符的函数原型的一般格式如下:

       <返回类型>::operator++();

  以类成员方式重载后缀“++”运算符的函数原型的一般格式如下:

      <返回类型>::operator++(int);

 以友元函数方式重载前缀“++”运算符的函数原型格式如下:

        <返回类型>::operator++(<类名>&);

  以友元方式重载后缀“++”运算符的函数原型格式如下:

       <返回类型>::operator++(<类名>&,int);
五、程序设计题
(1)使用虚函数编写程序求球体和圆柱体的体积及表面积。由于球体和圆柱体都可以看作由圆继承而来,所以可以定义圆类Circle作为基类。在Circle类中定义一个数据成员radius和两个虚函数area()和volume()。由Circle 类派生Sphere类和Column类。在派生类中对虚函数area()和volume()重新定义,分别求球体和圆柱体的体积及表面积。

  1. #include <iostream>  
  2. using namespace std;  
  3. const double PI=3.14159265;  
  4. class circle  
  5. public:  
  6. circle(double r) { radius = r; }  
  7. virtual double area() { return 0.0; }  
  8. virtual double volume() { return 0.0; }  
  9. protected:  
  10. double radius;  
  11. };  
  12. class sphere:public circle  
  13. public:  
  14. sphere( double r ):circle( r ){ }  
  15. double area()  
  16. return 4.0 * PI * radius * radius; }  
  17. double volume()  
  18. return 4.0 * PI * radius * radius * radius / 3.0; }  
  19. };  
  20. class column:public circle  
  21. public:  
  22. column( double r,double h ):circle( r ) { height = h; }  
  23. double area()  
  24. return 2.0 * PI * radius * ( height + radius ); }  
  25. double volume()  
  26. return PI * radius * radius * height; }  
  27. private:  
  28. double height;  
  29. };  
  30. int main()  
  31. { circle *p;  
  32. sphere sobj(2);  
  33. p = &sobj;  
  34. cout << "球体 :" << endl;  
  35. cout << "体积 = " << p->volume() << endl;  
  36. cout << "表面积 = " << p->area() << endl;  
  37. column cobj( 3,5 );  
  38. p = &cobj;  
  39. cout << "圆柱体 :" << endl;  
  40. cout << "体积 = " << p->volume() << endl;  
  41. cout << "表面积 = " << p->area() << endl;  
  42. }  
运行结果:


(2)编写一个程序,用于计算正方形、三角形和圆的面积及计算各类形状的总面积。
  1. #include<iostream>  
  2. #include<iomanip>  
  3. using std::fixed;  
  4. using std::setprecision;  
  5. const double PI=3.1415;  
  6. using namespace std;  
  7. class square  
  8. {  
  9. public:  
  10.     square(float l){length=l;}  
  11.     virtual float area(){return length*length;}  
  12. private:  
  13.     float length;  
  14. };  
  15. class triangle  
  16. {  
  17. public:  
  18.     triangle(float b,float h){base=b;height=h;}  
  19.     virtual float area(){return base*height/2.0;}  
  20. private:  
  21.     float base,height;  
  22. };  
  23. class Circle  
  24. {  
  25. public:  
  26.     Circle(double r){radius=r;}  
  27.     virtual double area(){return PI*radius*radius;}  
  28. private:  
  29.     double radius;  
  30. };  
  31. int main()  
  32. {  
  33.     square s(9.0);  
  34.     triangle t(5.0,4.0);  
  35.     Circle c(7.0);  
  36.     cout<<fixed<<setprecision(2)<<"正方形的面积="<<s.area()<<endl;  
  37.     cout<<fixed<<setprecision(2)<<"三角形的面积="<<t.area()<<endl;  
  38.     cout<<fixed<<setprecision(2)<<"圆的表面积="<<c.area()<<endl;  
  39.     cout<<fixed<<setprecision(2)<<"各类形状的总面积="<<s.area()+c.area()+t.area()<<endl;  
  40.     return 0;  
  41. }  

运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值