面向对象程序设计期末复习题及答案1 下载本文

bottom,height,llength,rlength; Public: Echelon( ) { top=bottom=height=llength=rlength=0; } //构造函数 Int Area( ){ return (top+bottom)*height/2; } //求面积 Int Perimeter( ) { return top+bottom+llength_rlength ;} //求周长 } 第5题 定义一个抽象类tea代表茶叶,它有1个double类型的保护数据成员cost 代表种植成本,它还有一个纯虚函数price用来计算售价:double price(void)函数返回值为茶叶的售价。由tea派生出具体类blacktea(红茶),要求如下:(1)类中定义保护成员数据double o_cost,表示红茶的经营成本(2)定义构造函数blacktea(double btc,double bto_c),将cost 和o_cost,数据成员设定为指定值(3)重载price计算出blacktea 的售价。(假设:blacktea

售价 =(cost + o_cost)*1.

2) 答案:答案: class tea { protected: //保护数据 double cost; public: virtual double price(void) =0 ; //纯虚函数 }; class blacktea : public tea // 派生 { protected: //保护数据 double o_cost; public: blacktea(double btc,double bto_c) { cost=btc; o_cost=bto_c; } //构造函数 double price(void) { return (cost + o_cost)*1.2 ;} };

第6题 .编写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。 答案:分析: 设计一个学生类Stud,除了包括no

- 49 -

(学号)、name(姓名)和deg(成绩)数据成员外,有两个静态变量sum和num,分别存放总分和人数,另有两个普通成员函数setdata()和disp(),分别用于给数据成员赋值和输出数据成员的值,另有一个静态成员函数avg(),它用于计算平均分。在main()函数中定义了一个对象数组用于存储输入的学生数据。 本题程序如下: #include< stdio.h> #include< string.h> #define N 3 class Stud { int no; char name[10]; int deg; static int num; static int sum; public: void setdata(int n,char na[],int d) { no=n; deg=d; strcpy(name,na); sum+=d; num++; } static double avg() { return sum/num; } void disp() { printf( %-5d%-8s=\\n,no,name,deg); } }; int Stud::sum=0; int Stud::num=0; void main() { Stud st[N];

int i,n,d; char na[10]; for(i=0;i< N;i++) { printf(输入学号 姓名 成绩:); scanf(%d%s%d,& n,na,& d); st[i].setdata(n,na,d); } printf(输出数据\\n); printf( 学号 姓名 成绩\\n); for(i=0;i< N;i++) st[i].disp(); printf( 平均分=%g\\n\\n,Stud::avg()); }

第7题 设计一个类Sample,有一个私有数据成员,建立该类的四个对象s1(n=10)、s2(n=20)、s3(n=30)、和s4(n=40),建立一个成员函数实现这些对象n值的累加。

答案:解: 依题意,建立一个成员函数add(),其参数为Sample对象引用,用于累加对象n值。 程序如下: #include< iostream.h> class Sample { int n; public: Sample(){} Sample (int i){n=i;} void add(Sample & s) //

- 50 -

对象引用作为参数 { if(& s==this) // 不能自己相加,this是当前对象的指针 cout< < 自己不能相加< < endl; else n+=s.n; } void disp(){ cout< < endl< < n=< < n< < endl;} }; void main() { Sample s1(10),s2(20),s3(30),s4(40); s1.add(s2); s1.add(s3); s1.add(s4); s1.disp(); cout< < endl; }

第8题 编写程序,定义一个类test,其成员数据及函数要求如下:(1) 私有数据成员int data (2) 构造函数两个test () 及test(int d),前者将(1)中的数据成员data值设为0;后者将(1)中的数据成员data设定为指定值d (3) 成员函数int setdate()能在键盘读入一个数值,然后将该数值赋给data

答案:答案: class test { private: //私有数据成员 int data; public: test( ) { data=0; }; //构造函数两个test () test(int d) { data=d; };构造函数两个test (int d) int setdate( ){ cin> > data;return 1; } 成员函数setdate() };

第9题 设计一个类Sample,有一个私有数据成员,建立该类的四个对象s1(n=10)、s2(n=20)、s3(n=30)、和s4(n=40),建立一个成员函数实现这些对象n值的累加。

答案:解: 依题意,建立一个成员函数add(),其参数为Sample对象引用,用于累加对象n值。 程序如下: #include< iostream.h> class Sample { int n; public: Sample(){} Sample (int i){n=i;} void add(Sample & s) // 对象引用作为参数 { if

- 51 -

(& s==this) // 不能自己相加,this是当前对象的指针 cout< < 自己不能相加< < endl; else n+=s.n; } void disp(){ cout< < endl< < n=< < n< < endl;} }; void main() { Sample s1(10),s2(20),s3(30),s4(40); s1.add(s2); s1.add(s3); s1.add(s4); s1.disp(); cout< < endl; }

三、填空题

1. C++语言是在____C_____语言的基础上发展起来的。

2. C++语言的编译单位

___.cpp_____的____程序___文件。

3. 行尾使用注释的开

4. 多行注释的开始标记符和结束标记符分别为____/*___和___*/___。 5. 用于输出表达式值的标准输出流对象是__ cout ____。

6. 用于从键盘上为变量输入值的标准输入流对象是__ cin ___。 7. 一个完整程序中必须有一个名为___ main ____的函数。

8. 一个函数的函数体就是一条____复合_____语句。

9. 当执行cin语句时,从键盘上输入每个数据后必须接着输入一个___空白_____符,然后才能继续输入下一个数据。 10. 在C++程序中包含一个头文件或程序文件的预编译命令为

始标记符为

____//____。

- 52 -