1. 下面是一个计算器类的定义,请完成该类成员函数的实现 class counter { Public:
counter(int number);
void increment();//给原值加1 void decrement();//给原值减1 int getvalue();//取得计数器值 int print();//显示计数 private: int value; };
2. 根据注释语句的提示,实现类Date的成员函数。
#include
void printDate();//显示日期 void setDay(int d);//设置日的值 void setMonth(int m);//设置月的值 void setYear(int y);//设置年的值 private: int day,month,year; }; void main()
{ Date testDay; testDay.setDay(5); testDay.setMonth(10); testDay.setYear(2003); testDay.printDate(); }
3. 建立类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径和高度。用类cylinder计算圆柱体的体积,并存储在一个double变量中。在类cylinder中包含一个成员函数vol(),用来显示每个cylinder对象的体积。
4. 构建一个类book,其中含有两个私有数据成员qu和price,建立一个有5个元素的数组对象,将qu初始化为1-5,将price初始化为qu的10倍。显示每个对象的qu*price的值。
5. 修改上题,通过对象指针访问对象数组,使程序以相反的顺序显示对象数组的qu*price的值。
6. 构建一个类Stock,含字符数组stockcode[]及整型数据成员quan,浮点型数据成员price。构造函数含3个参数:字符数组na[]及q,p。当定义Stock
的类对象时,将对象的第1个字符串参数赋给数据成员stockcode,第2个和第3个参数分别赋给quan和price。未设置第2个和第3个参数时,quan的值为1000,price的值为8.98。成员函数print()使用this指针,显示对象内容。
实验三 静态成员与友元
一、目的要求
1·掌握类中静态成员的定义方法;
2·掌握静态数据成员的初始化方法、静态数据成员和静态成员函数的访问和使用方法;
3·掌握友元函数和友元类的说明方法;
4·理解友元函数和友元类的使用特点。 二、实验内容
选作以下题目,编程序,然后上机调试运行,分析运行结果。
1.编写程序,统计某旅馆住宿客人的总数。要求输入客人的姓名,输出客人编号(按先后顺序自动生成)、姓名以及总人数。
2.编写程序,统计歌手大奖赛的参赛人数,每名选手的平均得分。要求依次输入选手的编号、姓名、各评委的打分;输入参赛总人数,并按平均得分由高到低的顺序输出每位选手的名次、姓名、平均得分。
3.利用友元函数求两个数的平方差
4.编写程序,设计一个友元函数比较学生成绩的高低,并输出所有学生中最高分和最低分学生的姓名。
5.日期类Date包含日期的年、月、日三个数据成员,编写一个友元函数,求两个日期之间相差的天数。
6.点类Point,包含点的坐标x、y两个数据成员,设计两个友元函数,分别计算两点间的水平距离和垂直距离。
7. 采用友元类方式重新编写以上各题的程序。
实验四 派生类与继承
一、目的要求
1. 掌握单继承和多重继承的方式定义派生类的方法;
2·深刻理解在各种继承方式下构造函数和析构函数的执行顺序; 3·理解和掌握公有继承、私有继承和保护继承对基类成员的访问机制; 4·理解虚基类的概念以及引入虚基类的目的和作用。
二、实验内容
选作以下题目,编程序,然后上机调试运行,分析运行结果。
1.下面的程序可以输出ASCII字符与所对应的数字的对照表,修改下列程序,使其可以输出字母a到字母z。
#include
table(int p){ i=p;}
void ascii(void); protected: int I; };
void table::ascii(void) { int k=1;
for(;i<127;i++){ cout< if ((k)==0) cout<<”\\n” ; k++; } cout<<”\\n”; } class der_table:public table{ public: der_table(int p,char*m):table(p){c=m;} void print(void); protected: char*c; } ; void der_table::print(void){ cout< { der_table ob1(32,”ASCII value-char”); ob1.print(); der_table ob2(‘a’,”ASCII value-char”);b2.print(); } 提示:修改后的主程序为 void main() { der_table ob(‘a’,’z’,”ASCII value-char”); ob.print(); } 2.下面的程序包含了Time类和Date类的声明,要求设计一个Birthtime类,它继承了Time类和Date类,并且还有一项出生孩子的名字Childname,同时设计主程序显示一个小孩的出生时间和名字。 #include Time(int h,int m,int s){ hours=h; minutes=m; seconds=s;} virtual void display() { cout< protected: int hours,minutes,seconds; }; class Date{ public: Date(int m,int d,int y){ month=m; day=d; year=y;} virtual void display(){ cout< 3.建立普通的基类building,用来存储一座楼房的层数,房间数以及它的总平方数。建立派生类house,继承building,并存储卧室与浴室的数量,另外,建立派生类office,继承building,并存储灭火器与电话的数目。 4.按照图4所示的类层次图要求编写程序。定义属于类score的对象c1及类teacher的对象t1,分别输入各数据成员的值后再显示出这些数据。 5.递归调用被继承的基类成员函数,实现求素数的功能。 6.递归调用被继承的基类成员函数,求最大公约数。 teacher Degree Dep student old sno person name id stud addr tel score math eng 图4 类层次图 实验五 多态性 一、目的要求 1·理解运算符重载的概念和实质; 2·掌握运算符重载函数的定义方法; 3·掌握虚函数的定义方法及其在实现多态性中的作用; 4·理解和掌握实现动态多态性的前提条件; 5·理解静态多态性和动态多态性的区别。 二、实验内容 选作以下题目,编程序,然后上机调试运行。 1. 编一个程序,用成员函数重载运算符“+”和“-”,将两个二维数组相加和相减,要求第一个二维数组的值由构造函数设置,另一个二维数组的值由键盘输入。 2. 修改上题,用友员函数重载运算符“+”和“-”将两个二维数组相加和相减。 3. 编写程序,计算汽车运行的时间,首先建立基类car,其中含有数据成员distance存储两点间的距离。假定距离以英里计算,速度为每小时80英里,使用虚函数travel_time()计算并显示通过这段距离的时间。在派生类kilometre中,假定距离以千米计算,速度为每小时120千米,使用函数travel_time()计算并显示通过这段距离的时间。 实验六 模 板 一、目的要求 1·理解类模板和函数模板的意义及作用; 2·掌握类模板和函数模板的定义方法及在程序中的使用方法。 二、实验内容 选作以下题目,编程序,然后上机调试运行,分析运行结果。 1. 写一个函数模板,求数组中的最大元素,并且使得函数调用时,数组的类型和返回类型可以是整数也可以是双精度类型。 2. 写一个函数模板,使用冒泡排序将数组内容由小到大排列,并且使得函数调用时,数组的类型可以是整数也可以是双精度型。 3. 建立类模板input,在调用构造函数时,完成以下工作: (1) 提示用户输入; (2) 让用户输入数据; (3) 如果数据不在预定范围内,重新提示输入。 input型的对象应当按以下形式定义: input ob(\”,min_value,max_value) 其中,promput message是提示输入信息。可接受的最小值和最大值分别由min_value与max_value指定。 实验七 大学师生类C++程序设计 一、目的要求 1·掌握用计算机处理问题的思维方法和C++程序设计方法; 2·培养问题分析、算法设计、程序设计、程序调试的能力。 二、实验内容 编程序完成下列设计内容,然后上机调试运行,分析运行结果,分析运行结果。 设计一个大学的类系统,包括Student(学生),Professor(教师),Staff(职员)。另有一类既作为学生又兼作助教的可作为派生类StudentStaff,它是由Student类和Staff类派生而来,另外定义一个父类DataRec作为上述类(子类)的基类。设计主程序,输入各类人员信息,并将数据存放在磁盘文件中。 该类系统共有五个类,层次结构见图5。 图5 大学类系统层次结构 DataRec Student Staff StudentStaff Professor