期中测验题目及参考答案 类-对象-运算符重载
学期过半,通过期中测验,让同学们检验一下阶段学习的效果。
共半小时的题,强度与期末考试差不多,总体感觉还不错。平时学扎实了,复习一下,将各种语法、机制搞清楚,拿个好分数不在话下。也有些同学不熟练,需要开始在意了,考试是一方面,重要的是,真正掌握知识。
期中测验可以看书及一切参考资料,实际上关键还是自己脑子里的东西。程序设计的基本功是在脑子里的。因为在机房完成,有同学用上了百度。老贺没有责备,反而大加赞赏:这才是老贺的弟子,规则没有禁止用百度,就要找适合自己的办法。
程序要好好调下去,考试也要来个好分数。
下面给出参考答案。当然,仅供参考。
全卷共20分。
1. 分析以下程序的执行结果
#include iostream using namespace std; class Sample private: int i; double d; public: void setdata(int n){i=n;} void setdata(double x){d=x;} void disp() cout "i=" i ",d=" d endl; void main() { Sample s; s.setdata(10); s.setdata(15.6); s.disp(); }(1分)输出结果为:i=10, d=15.6
(2分)简要说明理由:main()函数中执行s.setdata(10)时,执行的是形式参数为int型的成员函数,而s.setdata(15.6)时,执行形式参数为double的成员函数,分别为数据成员 i 和 d 赋 值。本题主要考察了成员函数的重载。
2. 分析以下程序的执行结果
#include iostream using namespace std; class Sample private: int x; public: Sample(){}; Sample(int a){x=a;} Sample(Sample a){x=a.x+1;} voiddisp(){cout "x=" x endl;} void main() Sample s1(2),s2(s1); s2.disp(); }(1分)输出结果为:x=3
(2分)简要说明理由:对main()函数,s1对象中的x成员的值为2,对s2初始化时,利用复制构造函数,s2的 x 成员的值为参数中对象的 x 值加1。本题考察对复制构造函数的理解。
3. 阅读程序,回答问题
#include iostream using namespace std; class Point private: int x,y; public: void Display(){cout "x=" x ",y=" y endl;} void main() Point point1; point1.x=100; point1.y=200; point1.Display(); }
(1分)指出该程序中存在的错误:在main()函数中访问对象的私有成员:对 x 和 y 赋值。
(2分)请至少说明修改程序的两种方案(下面给出四种):
(1) 将x和y的访问权限设置为public(这并不是一种好的设计)
(2) 增加两个public型的成员函数void setX(int a){x=a;}和void setY(int b){y=b;}(推荐用)
(3) 在类中定义构造函数Point(int a, int b):x(a),y(b){},然后在main()中用Point point1(100,200);
(4) 在display()中加x=100; y=200,而将main()函数中的相应赋值去掉。(不能算错,但很馊的主意)
4. 程序填空
class Point {private: int x, y; public: Point(){x=y=0;} Point(int x0,int y0){x=x0;y=y0;} int GetX() { return x; } int GetY() { return y; } void Print(); ___(1)___; //友元函数声明 ___(2)___; //友元函数声明 //实现Print()成员函数 ________(3)______________ { cout "Point(" x "," y ")"; //加号操作符重载函数 //实现Point类对象与整数加法 Point operator+(Point pt,int dd) { Point temp=pt; temp.x+=dd; temp.y+=dd; return temp; //加号操作符重载函数 //实现两个Point类对象的加法 Point operator+(Point pt1,Point pt2) Point temp=pt1; temp.x+=pt2.x; ___(4)___; return temp; }解答(4分):
(1) friend Point operator+(Point pt,int dd)
(2) friend Point operator+(Point pt1,Point pt2)
(3) void Point::Print()
(4) temp.y+=pt2.y
5.定义一个处理日期的类CDate,它有3个私有数据成员:Year,Month,Day和若干个公有成员函数,并实现如下要求:
(1)构造函数重载;
(2)成员函数设置缺省参数;
(3)定义一个成员函数PrintDate来打印日期;
(4)定义一个非静态成员函数SetDate来设置日期;
(5)重载 运算符,用于输出日期。
参考解答:(7分:类定义正确3分,各函数实现正确4分,有1个要求体现不出来扣1分)
#include iostream using namespace std; class CDate public: CDate(){year=0;month=1;day=1;} CDate(int y, int m, int d):year(y),month(m), day(d){}//(1)与前一个函数,体现构造函数重载 void PrintDate() //(3)定义一个成员函数PrintDate来打印日期; cout "year=" year ", month=" month ", day=" day endl; void setDate(int y=0, int m=1, int d=1) //(4)定义一个非静态成员函数SetDate来设置日期;还体现(2)成员函数设置缺省参数; year=y; month=m; day=d; friend ostream operator (ostream out, const CDate //连同类外的实现,体现(5)重载 运算符,用于输出日期。 private: int year; int month; int day; ostream operator (ostream out, const CDate d) cout "year=" d.year ", month=" d.month ", day=" d.day endl; }
(1)main() 函数可以不写,题目中没有提到;
(2)“成员函数设置缺省参数”的要求还可以体现到别的函数中;
(3)默认构造函数区别于成员函数的默认(缺省)参数;
(4)CDate(int y=0, int m=1, int d=1)与CDate()不能共存,不要在这儿体现缺省参数。
(5)CDate(){year=0;month=1;day=1;} 不体现缺省参数,缺省参数必须是在函数声明时,在形式参数上做出的定义。
测验成绩统计(均分15):
成绩/人数
1-5/ 4
6-9/ 7
10/3
12/4
13/4
14/6
15/6
16/10
17 /12
18/10
19 /13
20/5
(12分及以下的,将在16周再次进行一次最高分为16分的测验,取其高者记入平时成绩;其他15分及以下的同学自愿参加。)
贺利坚 烟台大学计算机学院教师,建设系列学习资源,改革教学方法,为IT菜鸟建跑道,让大一的孩子会编程,为迷茫的大学生出主意,一起追求快乐的大学。 著书《逆袭大学:传给IT学子的正能量》,帮助处于迷茫中的大学
相关文章
- python一切皆对象的理解
- Google Earth Engine(GEE)——重温对象方法的介绍和如何计算程序运行的时间?
- Java的if判断对象为null时,null放在比较运算符的左边还是右边较好?
- blob 对象 实现分片上传 及 显示进度条
- Python中list(列表)和ndarray对象的相互转换
- c++在调用类的时候不一定非得实例化对象哦,有时候你不写系统会为你默认生成一个临时实例对象哦~
- 《面向对象设计实践指南:Ruby语言描述》—第8章 8.1节组合对象
- 《Android游戏开发详解》——第2章,第2.16节区分类和对象
- 《Android游戏开发详解》——第2章,第2.20节对象的更多实践——模拟一个色子
- Json对象和Json字符串的区别
- 检测当前的语言环境是否使用了 UTF-8 编码(三篇文章:先用setlocale()设置编码,再用nl_langinfo()进行检测。locale对象可以使用langLocale.name() == "zh_CN"判断)
- 你不知道的java对象序列化的秘密
- Vue3实践记录:vuex/pinia数据为proxy对象时如何获取值、Vue3组件的全局注册
- 浅析JS对象中的排序属性和常规属性、对象内属性、快属性和慢属性
- C/C++对Lu系统内置动态对象进行运算符重载
- C++对象内存分布(3) - 菱形继承(virtual)
- 数据库级别DML操作监控审计、表触发器/对象触发器
- POJO/VO/DTO等对象模型