2016-2017年度面向对象程序设计试卷.docx

上传人:李医生 文档编号:11738204 上传时间:2021-09-02 格式:DOCX 页数:14 大小:22.52KB
返回 下载 相关 举报
2016-2017年度面向对象程序设计试卷.docx_第1页
第1页 / 共14页
2016-2017年度面向对象程序设计试卷.docx_第2页
第2页 / 共14页
2016-2017年度面向对象程序设计试卷.docx_第3页
第3页 / 共14页
2016-2017年度面向对象程序设计试卷.docx_第4页
第4页 / 共14页
2016-2017年度面向对象程序设计试卷.docx_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《2016-2017年度面向对象程序设计试卷.docx》由会员分享,可在线阅读,更多相关《2016-2017年度面向对象程序设计试卷.docx(14页珍藏版)》请在三一文库上搜索。

1、华中科技大学研究生课程考试试卷课程名称:面向对象程序设计课程类别詈詈考核形式三小 专业牌闭卷学生类别考试日期2017年1月9日 院系学号姓名任课教师 杨卫东、左峥-一、填空(共15分,每空1分)1、编译时的多态性通过重载函数实现。2、面向对象的四个基本特性是 抽象、多态、继承 和 封装。3、假定AB为一个类,则执行“ AB a(10), *b=&a, &p=a;”语句时调用该类构造函数的次数为 2。4、C+谈成员访问属性public 、 private 、 protected三种类型。5、非成员函数应声明为类的友元函数才能访可这个类的private成员。6、。要实现动态联编必须通过对象指针或引

2、用来调用虚函数实现。7、类B是由类A以保护方式派生的,则类 A中私有访问属性的数据成员在类 B中的 访问属性为不可访问。8、+、=、口、,等四种运算符中,可采用友元函数重载的运算符是 。9、抽象类是指具有 纯虚函数 的类,它只能作为 基类 来用。14 / 8二、问答题(共30 分,每小题6 分)1简述运算符重载的实现方式有哪几种?给出对应的声明语法形式。答案:( 1)类外定义的运算符重载函数格式为:friend operator ( 参数 1, 参数 2)( 2)成员运算符重载函数 :operator ( 参数 )2什么是多继承?多继承时,构造函数和析构函数执行顺序是怎样的?答案:多继承是指派

3、生类具有多个基类,派生类与每个基类之间的关系仍可看作是一个单继承。派生类构造函数的执行顺序是先执行所有基类的构造函数(顺序按照定义派生类时指定的各基类顺序) ,再执行派生类的构造函数,析构函数执行顺序,与构造函数完全相反。3写出下面程序的运行结果#include #include using namespace std;class Personpublic:Person(char *nam,int ag) strcpy(name,nam); age = ag;coutPerson 类构造函数-nameendl;Person(char *nam) strcpy(name,nam);coutPer

4、son类构造函数(char *nam)-nameendl;Person()coutPerson 类析构函数-nameendl;void display()cout 姓名: nameendl;protected:char name100;int age;class Teacher: public Person /声明 Teacher( 教师 )类public:/公用部分Teacher(char *nam,int a,char *t):Person(nam,a) /构造函数 strcpy(title,t); coutTeacher类构造函数endl;Teacher()coutTeacher 类析构

5、函数endl;输出教师有关数据void display1()/cout 姓名 :nameendl;cout年龄 ageendl;cout职称 :titleendl;protected:/保护部分char title10;/职称;class Student: public Personpublic:Student(char *nam,char s,float sco):Person(nam) sex=s; score=sco;coutStudent 类构造函数-nameendl;Student(char *nam, char s):Person(nam) sex=s;coutStudent St

6、udent()coutStudent类构造函数- 班长: nameendl;类析构函数-nameendl;void display2()cout cout cout/输出学生有关数据姓名 :nameendl;性别 :sexendl;成绩 :scoreendl;char *get_name()return name;protected:char sex;float score;/保护部分成绩 class Graduate: public Teacher, public Studentpublic:Graduate(char *nam,int a,char s,char *t,float sco,

7、floatw):Teacher(nam,a,t),Student(nam,s,sco),wage(w),monitor(Li Ming,m) coutGraduate类构造函数endl;Graduate()coutGraduatevoid show( )类析构函数endl;/输出人员的有关数据coutname:Student:nameendl;coutage:Student:ageendl;coutsex:sexendl;coutscore:scoreendl;couttitle:titleendl;coutwages:wageendl;coutmonitor:monitor.get_name

8、()endl;Student monitor;private:/工资float wage;class Doctor:public Graduatepublic:Doctor(char *nam,int a,char s,char *t,float sco,float w,char *tutor): Graduate(nam,a,s,t,sco,w) strcpy(tutor_name, tutor);couttutor_nameendl; private:char tutor_name20;int main()Doctor d(Wang-li,24,f,assistant,89.5,1234.

9、5,Wang-wu);return 0;答案:Person 类构造函数-Wang-liTeacher 类构造函数Person 类构造函数(char *nam)-Wang-liStudent 类构造函数-Wang-liPerson 类构造函数(char *nam)-Li MingStudent 类构造函数- 班长:Li MingGraduate 类构造函数Wang-wuGraduate 类析构函数Student 类析构函数-Li MingPerson 类析构函数-Li MingStudent 类析构函数-Wang-liPerson 类析构函数-Wang-liTeacher 类析构函数Person

10、 类析构函数-Wang-li4写出下面程序的运行结果#include #include using namespace std;class A char string80;public :void show();A(char * st);A( );A:A(char * st) strcpy(string, st);cout string 构造 endl;A:A( ) cout string 析构 endl; void A:show()cout string endl;void fun( )cout 1 fun 内 show();cout5 main 内调用 fun 函数 endl;fun( )

11、;delete ptrA;A g_glb_Obj(6 外部对象 g_glb_Obj);static A g_sta_Obj(7 外部静态对象g_sta_Obj);答案: 6 外部对象 g_glb_Obj 构造 7 外部静态对象g_sta_Obj 构造 4 main内动态分配对象m_all_Obj 构造 4 main 内动态分配对象m_all_Obj5 main 内调用 fun 函数1 fun内2 fun内自动对象fun_Obj 构造3 fun内静态对象fun_sta_Obj构造4 fun内自动对象fun_Obj 析构5 main 内动态分配对象m_all_Obj 析构 3 fun内静态对象fu

12、n_sta_Obj析构5写出下面程序的输出结果#include using namespace std;class Apublic:virtual void Print(int a, int b=5) cout a = a , b = b endl; ;class B : public A public:virtual void Print(int a) cout a = a endl; virtual void Print(int a, double d) cout a = a , d = d Print( 2, 6.9 );p - Print( 2 );void main( )pa = n

13、ew A;pb = new B;Show(pa);Show(pb); delete pa; delete pb;答案:a= 2 ,b = 6a=2,b=5a=2,b=6a=2,b=56. 以下程序代码是否有错,如有请改正并写出运行结果#include class Testprivate:int x,y=20;public:Test(int i,int j) x=i,y=j;int getx()return x;int gety()return y;void main()Test mt(10,20);coutmt.getx()endl; coutmt.gety()endl;答案:int x,y=

14、20; 在类内部不能对数据成员直接赋值。 修改 int x,y;三、完成程序题(共20 分,每小题 5 分)1. 完成下面类中成员函数的定义。 #include using namespace std;class Counterunsigned value; public :Counter( ) value = 0; friend Counter operator +(Counter &a);/ 前置增量运算符函数。void Print( );Counter operator +(Counter &a )a.value+;/把 Counter 类对象的 value 值增 1cout 调用前置增

15、量运算符函数!n;return a; /该函数的返回值是value 值增 1 后的对象void Counter:Print( )static int i = 0;+i;cout ( i )对象的 value 值 = value endl;void main( )Counter c ;for(int i = 0; i 3; i+) +c;c.Print( );2. 完成下面类中成员函数的定义。#include #include using namespace std; class strprivate:char *st;public:set(a); str(char *a)str & opera

16、tor=()str &a delete st;set(a.st); return *this;char *sstrlen(s)+1 ;S=2 S=5 S=9void set()/ 初始化 st st=new charstrcpy(st,s); ;3. 在下面程序横线处填上适当内容,使程序执行结果为:#include int sum(int i)static int s;s=s+i+2;return s;void main (void)int S;for (i=0;)i3,i+S = sum(i); coutS=S coutendl;4.下面是根据边长计算三角形面积的C+取序,在下划线处填上正确

17、的语句。#include #include double area(double a, double b, double c);void main()double a,b,c,s;coutabc;/ 判断是否三角形,若是,则执行面积计算代码if(a+bc&a+cb&c+ba) s=area(a,b,c);coutThe area is:sendl;else coutErrorendl;double area(double a, double b, double c)double s;s = (a+b+c)/2.0;s = sqrt(s*(s-a)*(s-b)*(s-c); return s;四、写程序题(共35 分)1、建立一个字符串类用于存储和处理字符串,采用友元函数对操作符 + 进行重载,以实现两个字符串的合并功能。 ( 15 分)2、写一个具有动态多态性的学生和教师信息输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名、输入和显示设计成一个抽象类person 的成员,并将person 类作为学生数据操作类student 和教师操作类teacher 的基类。 程序应能根据待输入人员的类别完成对应人员信息的输入和显示功能。 ( 20 分)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1