1、 1 / 8华中科技大学研究生课程考试试卷课程名称: 课程类别 考核形式学生类别_考试日期_ 院系_学号_姓名_任课教师_一、填空(共 15分,每空 1分)1、编译时的多态性通过_重载_函数实现。2、面向对象的四个基本特性是 抽象 、 多态 、 继承 和 封装 。3、假定 AB为一个类,则执行“AB a(10), *b=”语句时调用该类构造函数的次数为 2 。4、C+类成员访问属性 public 、 private 、 protected 三种类型。 5、非成员函数应声明为类的_友元_函数才能访问这个类的 private成员。6、 。要实现动态联编必须通过对象指针或引用来调用_虚函数_实现。7
2、、类 B是由类 A以保护方式派生的,则类 A中私有访问属性的数据成员在类 B中的访问属性为 不可访问 。8、+、=、-等四种运算符中,可采用友元函数重载的运算符是 + 。9、抽象类是指具有 纯虚函数 的类,它只能作为 基类 来使用。公共课专业课开卷闭卷面向对象程序设计 杨卫东、左峥嵘2017年 1月 9日2 / 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;cout#include using namespace std;class A
4、 char string80;public :void show();A(char * st);A( );A:A(char * st) strcpy(string, st);cout show();coutusing namespace std;class Apublic:virtual void Print(int a, int b=5) cout Print( 2, 6.9 );p - Print( 2 ); void main( )A * pa = new A;B * pb = new B;Show(pa); Show(pb); delete pa;delete pb;答案:a = 2
5、, b = 6a = 2 , b = 5a = 2 , b = 6a = 2 , b = 59 / 86. 以下程序代码是否有错,如有请改正并写出运行结果#include class Test private: 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); coutusing namespace std;class Counter unsigned value;_ public :Counter( ) val
6、ue = 0; _ friend Counter _operator +(Counter /前置增量运算符函数。void Print( ); Counter _operator +(Counter /把 Counter类对象的 value值增 1cout #include using namespace std; _ class str private: char *st; public: _ set(a); str(char *a)str set(a.st); return *this; void set(_) /初始化 st char *s _ st=new charstrlen(s)+1
7、;strcpy(st,s); ; 3. 在下面程序横线处填上适当内容,使程序执行结果为: S=2 S=5 S=9 #include _ int sum(int i) static int s; _ s=s+i+2;_ return s; void main (void) 12 / 8int S;for (i=0;_) i #include _ double area(double a, double b, double c);void main() double a,b,c,s; coutabc;_ /判断是否三角形,若是,则执行面积计算代码if(a+bccout“The area is:“s
8、endl; else cout“Error“endl; 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);13 / 8_ return s;四、写程序题(共 35分)1、建立一个字符串类用于存储和处理字符串,采用友元函数对操作符+进行重载,以实现两个字符串的合并功能。 (15 分)2、写一个具有动态多态性的学生和教师信息输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名、输入和显示设计成一个抽象类 person的成员,并将 person类作为学生数据操作类student和教师操作类 teacher的基类。程序应能根据待输入人员的类别完成对应人员信息的输入和显示功能。 (20 分)