21、 void setXX(double f) XX=f; double getXX() return XX; double RealSalary() //计算实发工资Private:Bouble Wage, Subsidy, Rent, WaterFee, ElecFee;;其中,成员函数setXX()用于设置工资的各分项数据,成员函数getXX()用于获取工资的各分项数据,XX代表Wage、Subsidy等数据成员,如Wage对应的成员函数则为setWage()和getWage()。实发工资=Wage+Subsidy-Rent-WaterFee-ElecFee编程完善该类的设计,并在主函数中
22、测试该类的各成员函数。4设计一个时钟类Clock。数据成员包括hour(小时)、minute(分钟)、second(秒)。要 求用成员函数实现以下功能:(1)创建具有指定时钟(小时、分钟、秒)的Clock对象,默认时钟为00:00:00。(2)动态地设置时、分、秒。(3)在屏幕上按“时:分:秒”的格式显示时钟。(4)在主函数中测试该类。 5设计一个职工类Employee。数据成员包括字符串型的name(姓名)、street(街道地址)、city(市)、province(省)、postalcode(邮政编码)。要求用成员函数实现以下功能:(1)创建职工对象时,可以按不同方式指定职工信息。(2)动
23、态地设置职工对象信息。(3)在屏幕上打印职工信息。(4)在主函数中测试该类。6需要求3个三角形的体积,请编写一个基于对象的程序。数据成员包括三角形的三边长a、b、 c。要求用成员函数实现以下功能:(1) 定义构造函数完成长方柱的初始化;(2) 求三角形的周长;(3) 求三角形的面积;(4) 输出三角形信息。7下面是一个整型数组类intArray的声明,请给出该类所有数据成员的类外定义。 class intArraypublic:intArray(int size);//构造函数intArray(const intArray //复制构造函数intArray();//析构函数bool Set(i
24、nt i, int elem);//设置第i个数组元素的值,设置成功返回true,失败返回falsebool Get(int i, int //获取第i个数组元素的值,获取成功返回true,失败返回falseint Length( ) const;//获取数组的长度void ReSize ( int size ); //重置数组void Print();//输出数组private:int *element; //指向动态数组的指针int arraysize; //数组的当前长度 ;8下面是一个整型链表类intList的声明,请给出该类所有数据成员的类外定义。class intListprote
25、cted:struct NodeNode * next;int data;;Node * pFirst;public:intList();//构造函数intList(); //析构函数//向链表的第i个位置插入一个元素,插入成功返回true,失败返回false bool Insert(int i, int elem) ;//删除链表的第i个位置的元素,删除成功返回true,失败返回falsebool Remove(int i, int int * Find(int elem)const; //查找值为elem的元素,返回指向该元素的指针int Length( ) const;//返回链表长度
26、void Printlist();//输出链表;9下面是一个整型堆栈类intStack的声明,请给出该类所有数据成员的类外定义。class intStackpublic:intStack (int size=10);//构造函数intStack ();//析构函数bool Push(int elem);//入栈操作bool Pop(int //出栈操作int Length( ) const; //获取栈中元素的个数private:int *data; //指向动态数组的指针int top; //栈顶指针 int size; //堆栈的容量;实验四、继承与组合(6学时)一、实验目的1了解继承在面
27、向对象程序设计中的重要作用。2进一步理解继承与派生的概念。3掌握通过继承派生出一个新的类的方法。4了解虚基类的作用和用法。 5掌握类的组合二、实验内容1请先阅读下面的程序,写出程序运行的结果,然后再上机运行程序,验证自己分析的结果是否正确。(1) #include using namespace std;class Apublic:A()cout<
28、tual B() delete buf;cout<
29、t<<(<
30、y(); cout<<(<
31、public virtual Aprivate:int y; AAobj;public:B(int a,int b,int c):A(a),y(c),Aobj(c) cout<
32、<
33、lass Base2 public:Base2() cout<
34、) cout<
35、函数display()。3分别定义教师类Teacher和干部类Cadre,采用多重继承的方式由这两个类派生出新类Teacher_Cadre(教师兼干部类)。要求:(1)在两个基类中都包含姓名、年龄、性别、地址、电话数据成员。(2)在Teacher类中还包含数据成员职称title,在Cadre类中还包含数据成员职务post,在Teacher_Cadre类中还包含数据成员工资wage。(3)对两个基类中的姓名、年龄、性别、地址、电话数据成员用相同的名字,在访问这类数据成员时,指定作用域。 (4)在类体中声明成员函数,在类外定义成员函数。(5)在派生类Teacher_Cadre的成员函数show中调
36、用Teacher类中的display函数,输出姓名、年龄、性别、地址、电话,然后再用cout语句输出职务和工资。4按下列要求编写程序。(1)定义一个分数类Score。它有3个数据成员:Chinese //语文课成绩English //英语课成绩Mathematics //数学课成绩2个构造函数:无参的和带参数的3个成员函数:是否带参数根据需要自定sum() //计算三门课总成绩print() //输出三门课成绩和总成绩 modify() //修改三门课成绩(2)定义一个学生类Student。它有3个数据成员:Num //学号 Name //姓名MyScore //成绩2个构造函数:无参的和带参
37、数的3个成员函数:是否带参数根据需要自定sum() //计算某学生三门课总成绩print() //输出某学生学号、姓名和成绩modify() //修改某学生学号、姓名和成绩(3)在主函数中,先定义一个学生类对象数组,再通过for循环给对象数组赋上实际值,最后输出对象数组个元素的值。5编写一个程序实现小型公司的人员信息管理系统。该公司雇员(employee)包括经理(manager),技术人员(technician)、销售员(salesman)和销售部经理(salesmanager)。要求存储这些人员的姓名、编号、级别、当月薪水,计算月薪并显示全部信息。程序要对所有人员有提升级别的功能。为简单起
38、见,所有人员的初始级别均为1,然后 进行升级,经理升为4级,技术人员和销售部经理升为3级,销售员仍为1级。月薪计算办法是:经理拿固定月薪8000元,技术人员按每小时100元领取月薪,销售员按该当月销售额4%提成,销售经理既拿固定月工资也领取销售提成,固定月工资为5000元,销售提成为所管辖部门当月销售额的5。实验五、多态性与虚函数(4学时)一、实验目的1了解多态性的概念。2了解虚函数的作用及使用方法。 3了解静态关联和动态关联的概念和用法。4了解纯虚函数和抽象类的概念和用法。二、实验内容1阅读下面的程序,写出程序运行的结果。#include using namespace std;class
39、Baseprotected:int n;public: Base (int m) n=m++; virtual void g1()cout<
40、Base(n1) j=n2; void g1()cout<
41、含数据成员x,y(坐标点)。以它为基类,派生出圆类Circle,增加数据成员radius(半径),再以Cirlcle类为直接基类,派生出圆柱体类Cylinder,再增加数据成员height(高)。要求:(1)每个类都有构造函数、用于从键盘获取数据的成员函数set(),用于显示数据的成员函 数display()。(2)用虚函数输出各类对象信息。3先建立一个职工类Employee,包含数据成员name(职工姓名),ID(职工编号)。以它为基类,派生出经理类Manager和技术人员类Technician,在经理类中增加数据成员salary(代表经理的月工资),在技术人员类中增加数据成员wage(代表
42、每小时的工资数)和hours(月工作时数)。在定义类时,所有类中必须包含有构造函数、析构函数、修改和获取所有数据成员的函数,以及纯函数计算职工的工资,输出职工的信息。4下列shape类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数。请从shape类派生三角形类(triangle)、矩形类(rectangle),并给出具体的求面积函数。实验六、面向对象的妥协(2学时)一、实验目的 1掌握友元的概念、友元函数的定义与使用方法。2掌握静态数据成员与静态成员函数的定义与使用方法。 二、实验内容1设计并测试点类Point,其数据
43、成员是直角坐标系的点坐标,友元函数distance用来计算两点间的距离。2设计一个书类Book,能够保存书名、定价,所有书的本数和总价。实验七、运算符重载(2学时)一、实验目的1掌握运算符重载的规则。 2掌握几种常用的运算符重载的方法。3了解转换构造函数的使用方法。4了解在Visual C++6.0环境下进行运算符重载要注意的问题。二、实验内容1阅读下面的程序,写出程序运行的结果。(1)#includeclass ABCint a,b,c;public: ABC(int x,int y,int z):a(x),b(y),c(z)friend ostream ;ostream return ou
44、t;int main()ABC obj(10,20,30);cout<
45、(); N1++;N1.display();--N1;N1.display();N1-- -- --;N1.display();return 0;2设计并实现一个日期类Date,要求:(1)可以建立具有指定日期(年、月、日)的Date对象,默认日期是2009.1.1。(2)可以从输出流输出一个格式为“年-月-日”的日期,其中年是四位数据,月、日可以是一位也可以是两位数据。(3)可以动态地设置年、月、日。 (4)可以用运算符= =、!=、对两个日期进行比较。(5)可以用运算符++、--、+=、-=等完成天数的加减一天或若干天的操作(6)Date类必须能够正确表达日期,不会出现类似于13月,32日
46、一类的情况。Date类还必须处理闰年的问题,闰年包括:所有能被400整除的年份,以及能被4整除同时又不能被100整除的年份。(7)写出主函数对该类进行测试。3下面是一个数组类CArray的定义。要求:(1)在此基础上增加print()成员函数打印数组,(2)重载“=”、“+”、“-” 运算符使之能对该数组类对象进行赋值、加减运算。(3)写出主函数对该类进行测试。class CArrayprivate:int* p_arr; int size;public:CArray(); //缺省构造函数CArray(int* p_a,int s); //构造函数CArray(const CArray //
47、复制构造函数 CArray();//析构函数int operator(int pos) const; //访问数组元素值的下标运算符重载函数int //设置数组元素值的下标运算符重载函数Carray ;CArray:: CArray() p_arr=NULL; size=0;CArray:: CArray(int* p_a,int s) if(s0) size=s; p_arr=new intsize; for(int i=0;i
48、e) p_arr=new intsize;for(int i=0;i=size) return p_arrsize-1;if(pos=size) return p_arrsize-1;if(pos<0) return p_arr0; return p_arrpos;4下面是一个自定义字符串类的声明。请写出该类所有成员函数的类外定义代码。class string private:unsigned buflen;char * buffer;public:string();//构造函数string(unsigned);string(char);string(const char*);string(c
49、onst string //复制构造函数string();//析构函数//重载赋值运算符stringstring char *operator+=(const char *right);friend string operator+(const string //字符串连接string operator()(unsigned start,unsigned len); //取子串unsigned length()const; //求字符串长度char //访问单个字符int compare(const string //字符串比较operator const char *()const; //到
50、普通c字符串的转换friend ostream //字符串的输出;实验八、模板(2学时)一、实验目的 1函数模板的定义与调用。2掌握类模板的声明与使用方法。二、实验内容1设计一个函数模板,实现两数的交换,并用int、float、double、char类型的数据进行测试。2设计一个函数模板,实现从int、float、double、char类型的数组找出最大值元素。提示:可用类型参数传递数组、用非类型参数传递数组大小,为了找出char*类型数组中的最大值元素,需要对该类型进行重载或特化。3编写一个顺序表类模板。 4建立两个int类型的向量vector,利用merge算法将其合并,然后用sort算法
51、对合并后的向量进行排序,最后输出排序结果。 实验九、输入输出流(自学)一、实验目的1深入理解C++的输入输出的含义与其实现方法。2掌握标准输入输出流的应用,包括格式输入输出。3掌握对文件的输入输出操作。二、实验内容1阅读下面的程序,写出程序运行的结果。 (1)#include#includeusing namespace std;int main()fstream out,in;out.open(a.dat,ios::out);out<
52、creen...n;out.close();char buffer80;in.open(a.dat,ios::in); while(!in.eof()) in.getline(buffer,80);cout<
53、number(num),age(Age),sal(Salary)strcpy(name,Name); void display() cout<
54、326);for(int i=0;i<6;i++) out.write((char*)out.close();Worker s1; ifstream in(Employee.dat,ios::in|ios::binary);in.seekg(2*(sizeof(s1)),ios::beg);in.read((char*)s1.display();in.seekg(0,ios::beg);in.read((char*)s1.display();in.close();return 0;2已知数据文件IN.DAT中存有20个整数,每个整数间用空格分隔。有一类Array的结构如下:class Arra
55、y int A20;public:Array()for(int i=0;i<20;i++) Ai=0;int getNumberA(Array void getdata();//读数据函数void max_min(int //排序函数void putdata(int //写结果数据函数;其中:成员函数getdata()的功能为:从数据文件IN.DAT中把20个数据读出来存入数据成员A中。成员函数max_min(int int main() int a=8,5,5,0,6,0,8,5,5,0,7,8;for(int i=0;i<5;i++)try cout<
56、<
57、<
58、r2()trycout<
59、常处理功能:InvalidDay:对于日期day成员,不能接受大于31或小于1的值,当传递给类的日期大于31或小于1时,抛出这种类型的异常。InvalidMonth:对于月month,不能接受大于12或小于1的值,当传递给类的日期大于12 或小于1时,抛出这种类型的异常。 第2部分 补充习题第1章 面向对象程序设计概述一、选择题1、C++是( )。A 面向对象的程序设计语言B 结构化程序设计语言C 既是面向对象的程序设计语言又是结构化的程序设计语言D 非结构化的程序设计语言2、C++语言属于( )。 A 机器语言 B 低级语言 C 中级语言 D 高级语言3、下面关于对象概念的描述中,错误的是(
60、 )。A 对象就是C语言中的结构变量B 对象代表着正在创建的系统中的一个实体C 对象是一个属性和操作(或方法)的封装体D 对象之间的信息传递是通过消息进行的4、下面关于类概念的描述中,错误的是( )。A 类是抽象数据类型的实现B 类是具有共同行为的若干对象的统一描述体C 类是创建对象的样板D 类就是C语言中的结构体类型5、下列关于C++类的描述中错误的是( )。A 类与类之间可以通过一些手段进行通信和联络 B 类用于描述事物的属性和对事物的操作C 类与类之间必须是平等的关系,而不能组成层次关系D 类与类之间可以通过封装而具有明确的独立性6、面向对象程序设计思想的主要特征中不包括( )。A 封装
61、性 B 多态性 C 继承性 D 功能分解,逐步求精二、填空题1、构成对象的两个主要因素是 和 ,其中 用于描述对象的静态特征,用于描述对象的动态特征。2、类和对象的关系可表述为:类是对象的 ,而对象则是类的 。3、封装包含两方面含义,一是用 把 包装起来,二将对象中某些部分 。4、 是指特殊类自动地拥有或隐含地复制其一般类的全部属性与操作。5、面向对象的软件工程包括的五个阶段为: , , , , 。 第2章 C++基础知识一、选择题1、下列关于C++语言的发展说法错误的是( )。A C++语言起源于C语言 B C++语言最初被称为“带类的C”C 在1980年C++被命名 D 在1983年C++
62、被命名2、C++语言是以 语言为基础逐渐发展而演变而成的一种程序设计语言。( )A Pascal B C C Basic D Simula673、下列关于C++与C语言关系的描述中错误的是( )。A C++是C语言的超集B C++是C语言进行了扩充C C++和C语言都是面向对象的程序设计语言 D C++包含C语言的全部语法特征4、下列C++标点符号中表示行注释开始的是( )。A # B ; C // D 5、每个C++程序都必须有且仅有一个( )。A 预处理命令 B 主函数 C 函数 D 语句6、C++对C语言做了很多改进,下列描述中哪一项使得C语言发生了质变,即从面向过程变成面向对象( )。
63、A 增加了一些新的运算符 B 允许函数重载,并允许设置默认参数C 规定函数说明必须用原型 D 引进类和对象的概念7、对定义重载函数的下列要求中,错误的是( )。A 要求参数的个数不同 B 要求参数中至少有一个类型不同C 要求参数个数相同时,参数类型不同 D 要求函数的返回值不同8、在函数的返回值类型与返回值表达式的类型的描述中,错误的是( )。 A 函数返回值的类型是在定义函数时确定,在函数调用时是不能改变的B 函数返回值的类型就是返回值表达式的类型C 函数返回值表达式类型与返回值类型不同时,函数表达式类型应转换成返回值类型D 函数返回值类型确定了返回值表达式的类型9、下列不正确的选项是( )
64、。A C++语言是一种既支持面向过程程序设计,又支持面向对象程序设计的混合型语言B 标点符号是在程序中起分割内容和界定范围作用的一类单词C iostream是一个标准的头文件,定义了一些输入输出流对象D 类与类之间不可以进行通信和联络10、下列表示引用的方法中,正确的是( )。已知:int k=1000;A int B char C int D float 二、填空题 1、C++既可以用来进行面向 程序设计,又可以进行面向 程序设计。2、常量分成两种,一种是 常量,另一种是 常量。3、 就是某一变量的别名,对其操作与对变量直接操作完全一样。4、按函数在语句中的地位分类,可以有以下3种函数调用方
65、式: ,, 。 5、函数与引用联合使用主要有两种方式:一是 ;二是 。6、头文件由三部分内容组成: , , 。三、程序阅读题1、分析下面的执行结果#includeusing namespace std;int main() int a,b,sum; // 定义a,b,sum三个整型变量a=43; // 把整数常量赋给变量ab=37;sum=a+b; // a与b相加的和赋给变量sumcout<
66、n() int a;int // 变量引用b=10;cout<