c面向对象程序设计考试试题.doc
考试试题纸( B 卷) 面向对象程序设计 课程 计算机 院(系)网络工程、计算机科学与技术 班级考试时量 100分钟 学生人数 命题教师 系主任 交题时间: 年 月 日 考试时间: 年 月 日1. 一、简答题(每小题5分,共20分) 1. 什么是类?什么是对象?对象与类的关系是什么? 2. 构造函数和析构函数的主要作用是什么?他们各有什么特性? 3. 派生类构造函数和析构函数的执行顺序是怎样的? 4. 什么是虚函数?虚函数与函数重载有哪些相同点和不同点? 2. 二、选择题(每小题2分,共20分)1假设已经有定义char *const pName=”Student”;下面的语句正确的是 。ApName3=t; B. pName=”score”;C. pName=new char5; D. pName=new char(p);2. 在下面有关对构造函数的描述中,正确的是 。A. 构造函数可以带有返回值B. 构造函数的名字与类名完全相同C. 构造函数必须带有参数4. 构造函数必须定义,不能缺省3在下面有关析构函数特征的描述中,错误的是 。A. 一个类中只能定义一个析构函数B. 析构函数名与类名完全相同C. 析构函数不能指定返回类型D. 析构函数不能带有参数4假定AB为一个类,则执行“AB a(4) , b3 , * p2 ;”语句时,自动调用该类构造函数的次数为 。A. 3 B. 4 C. 6 D. 95. 假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为 。A. AB operator+(AB &a,AB &b) B. AB operator+(AB &a)C. operator+(AB a) D. AB & operator+( )6. 假设定义了函数模版:template<class T>T max(T x, T y) return (x>y)?x:y; 并定义了:int i;char c;那么下列错误的调用该模版的是 。Amax(i,i); Bmax(c,c);Cmax(int(c),i); Dmax(c,i);7模版的主要用途是为了 。A提高代码的运行效率B实现多态性C提高代码的重用性D加强类的封装性8下列说法错误的是 。A申明为指向基类对象的指针可以指向它的公有派生的对象,但不允许指向它的私有派生的对象B允许将一个声明为指向基类的指针指向其公有派生类的对象,但是不能将一个声明为指向派生类对象的指针指向其基类的一个对象。C声明为指向基类对象的指针,当其指向公有派生类对象时,只能用它来直接访问派生类中从基类继承来的成员,而不能直接访问公有派生类中定义的成员D以上说法都不对9现有程序如下:#include <iostream.h>#include <iomanip.h>void main()int kk=1234;cout<<setfill(*)<<setw(6)<<kk<<endl;cout<<kk<<endl;以上程序的运行结果是 。A1234 B. *1234 C.*1234 D.以上都不对1234 1234 *123410在公有继承的情况下,基类成员在派生类中的访问权限 。A受限制 B. 保持不变 C. 受保护 D. 不受保护1. 三、填空题(每空1分,共10分) 1. 假定类AB中有一个公有属性的静态数据成员bb,在类外不通过对象名访问该成员bb的写法为 (1) 。 2. 通常情况下,当创建派生类对象时,首先执行 (2) 的构造函数,随后再执行 (3) 的构造函数,当撤销派生类对象时,则先执行 (4) 的析构函数,随后再执行 (5) 的析构函数。 3. ios类中有几个成员函数可以用来对输入输出进行格式化控制,格式控制主要是通过对 (6) 的操作来完成的。 4. 所谓赋值兼容规则是指在需要基类对象的任何地方都可以使用 (7) 来替代。 5. 纯虚函数是一个在基类中说明却没定义的虚函数,但要求在它的派生类中必须定义自己的版本,或重新说明为纯虚函数。那么,纯虚函数的定义形式为 (8) 。 6. 分别写出类AB的单目运算符”+”的前缀方式和后缀方式的友元函数重载一般形式: (9) 、 (10) 。 2. 四、写出下面程序的运行结果(每小题5分,共20分)1、#include <iostream.h>class Myclasspublic: Myclass() Myclass( int a, int b, int c); void GetNumber(); void GetSum();private: int x,y,z; static int sum;int Myclass:sum=0;Myclass:Myclass(int a, int b, int c) x=a; y=b; z=c; sum+=x+y+z;void Myclass:GetNumber() cout<<"number="<<x<<","<<y<<","<<z<<endl;void Myclass:GetSum() cout<<"sum="<<sum<<endl;void main() Myclass M(3,7,10); M.GetNumber(); M.GetSum(); Myclass N(14,9,11); N.GetNumber(); N.GetSum(); M.GetSum();2、#include <iostream.h>class TDate1public: TDate1(int y,int m, int d); TDate1(); void Print();private: int year, month,day;TDate1:TDate1(int y,int m,int d) year=y; month=m; day=d; cout<<"contructor called.n"TDate1:TDate1() cout<<"Destructor called.n"void TDate1:Print() cout<<year<<"."<<month<<"."<<day<<endl;void main() TDate1 today(2005,7,1),tomorrow(2005,7,2); cout<<"today is " today.Print(); cout<<"tomorrow is " tomorrow.Print();3、#include <iostream.h>class Datepublic: Date() cout<<"Date called."<<endl; private: unsigned int year, month, day;class Employeepublic: Employee() cout<<"Employee called."<<endl; private: Date birthday;class Manager: public Employeepublic: Manager() cout<<"Manager called."<<endl; private: unsigned int allowance;int main() Manager susan; return 0;4、#include <iostream.h>class complexpublic: complex(int r,int i):real(r),imag(i) friend complex operator+(complex ); friend complex operator-(complex & ); void print() cout<<"("<<real<<","<<imag<<")"<<endl; private: int real,imag;complex operator+(complex o) o.real+; o.imag+; return o;complex operator-(complex &o) o.real-; o.imag-; return o;void main() complex obj(10,20),obj_b(30,40); +obj; obj.print(); -obj_b; obj_b.print();1. 五、编程题(每小题10分,共30分)1、构建一个类book,其中含有两个私有数据成员qu和price,建立一个有5个元素的对象数组,将qu初始化为15,将price初始化为qu的10倍。显示每个对象的qu*price。2、编写一个程序,用成员函数重载运算符“”和“”将两个二维数组相加和相减,要求第一个二维数组由构造函数设置,另一个二维数组的值由键盘输入。3、写一个函数模板,求数组中的最大元素。使得函数调用时,数组类型和返回类型可以是整数也可以是双精度类型。注:请打印或用炭素墨水书写、字迹要求工整、并抄写在方框线内 共 页, 第 页,考试试题纸( B 卷) 面向对象程序设计 课程 计算机、网络 专业 班级考试时量 100分钟 学生人数 命题教师 系主任 交题时间: 年 月 日 考试时间: 年 月 日一、简答题(每小题5分,共20分)1. 什么是类?什么是对象?对象与类的关系是什么? 2. 构造函数和析构函数的主要作用是什么?他们各有什么特性? 3. 派生类构造函数和析构函数的执行顺序是怎样的? 4. 什么是虚函数?虚函数与函数重载有哪些相同点和不同点?二、选择题(每小题2分,共20分)1假设已经有定义char *const pName=”Student”;下面的语句正确的是 。ApName3=t; B. pName=”score”;C. pName=new char5; D. pName=new char(p);2. 在下面有关对构造函数的描述中,正确的是 。A. 构造函数可以带有返回值B. 构造函数的名字与类名完全相同C. 构造函数必须带有参数5. 构造函数必须定义,不能缺省3在下面有关析构函数特征的描述中,错误的是 。A. 一个类中只能定义一个析构函数B. 析构函数名与类名完全相同C. 析构函数不能指定返回类型D. 析构函数不能带有参数4假定AB为一个类,则执行“AB a(4) , b3 , * p2 ;”语句时,自动调用该类构造函数的次数为 。A. 3 B. 4 C. 6 D. 95. 假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为 。A. AB operator+(AB &a,AB &b) B. AB operator+(AB &a)C. operator+(AB a) D. AB & operator+( )6. 假设定义了函数模版:template<class T>T max(T x, T y) return (x>y)?x:y; 并定义了:int i;char c;那么下列错误的调用该模版的是 。Amax(i,i); Bmax(c,c);Cmax(int(c),i); Dmax(c,i);7模版的主要用途是为了 。A提高代码的运行效率B实现多态性C提高代码的重用性D加强类的封装性8下列说法错误的是 。A申明为指向基类对象的指针可以指向它的公有派生的对象,但不允许指向它的私有派生的对象B允许将一个声明为指向基类的指针指向其公有派生类的对象,但是不能将一个声明为指向派生类对象的指针指向其基类的一个对象。C声明为指向基类对象的指针,当其指向公有派生类对象时,只能用它来直接访问派生类中从基类继承来的成员,而不能直接访问公有派生类中定义的成员D以上说法都不对9现有程序如下:#include <iostream.h>#include <iomanip.h>void main()int kk=1234;cout<<setfill(*)<<setw(6)<<kk<<endl;cout<<kk<<endl;以上程序的运行结果是 。B1234 B. *1234 C.*1234 D.以上都不对1234 1234 *123410在公有继承的情况下,基类成员在派生类中的访问权限 。A受限制 B. 保持不变 C. 受保护 D. 不受保护三、填空题(每空1分,共10分)1. 定类AB中有一个公有属性的静态数据成员bb,在类外不通过对象名访问该成员bb的写法为 (1) 。 2. 通常情况下,当创建派生类对象时,首先执行 (2) 的构造函数,随后再执行 (3) 的构造函数,当撤销派生类对象时,则先执行 (4) 的析构函数,随后再执行 (5) 的析构函数。 3. ios类中有几个成员函数可以用来对输入输出进行格式化控制,格式控制主要是通过对 (6) 的操作来完成的。 4. 所谓赋值兼容规则是指在需要基类对象的任何地方都可以使用 (7) 来替代。 5. 纯虚函数是一个在基类中说明却没定义的虚函数,但要求在它的派生类中必须定义自己的版本,或重新说明为纯虚函数。那么,纯虚函数的定义形式为 (8) 。 6. 分别写出类AB的单目运算符”+”的前缀方式和后缀方式的友元函数重载一般形式: (9) 、 (10) 。四、写出下面程序的运行结果(第1小题6分,第2、3小题7分,共20分)1、#include <iostream.h>class Myclasspublic: Myclass() Myclass( int a, int b, int c); void GetNumber(); void GetSum();private: int x,y,z; static int sum;int Myclass:sum=0;Myclass:Myclass(int a, int b, int c) x=a; y=b; z=c; sum+=x+y+z;void Myclass:GetNumber() cout<<"number="<<x<<","<<y<<","<<z<<endl;void Myclass:GetSum() cout<<"sum="<<sum<<endl;void main() Myclass M(3,7,10); M.GetNumber(); M.GetSum(); Myclass N(14,9,11); N.GetNumber(); N.GetSum(); M.GetSum();2、#include <iostream.h>class TDate1public: TDate1(int y,int m, int d); TDate1(); void Print();private: int year, month,day;TDate1:TDate1(int y,int m,int d) year=y; month=m; day=d; cout<<"contructor called.n"TDate1:TDate1() cout<<"Destructor called.n"void TDate1:Print() cout<<year<<"."<<month<<"."<<day<<endl;void main() TDate1 today(2005,7,1),tomorrow(2005,7,2); cout<<"today is " today.Print(); cout<<"tomorrow is " tomorrow.Print();3、#include <iostream.h>class Datepublic: Date() cout<<"Date called."<<endl; private: unsigned int year, month, day;class Employeepublic: Employee() cout<<"Employee called."<<endl; private: Date birthday;class Manager: public Employeepublic: Manager() cout<<"Manager called."<<endl; private: unsigned int allowance;int main() Manager susan; return 0;五、编程题(每小题15分,共30分)1、构建一个类book,其中含有两个私有数据成员qu和price,建立一个有5个元素的对象数组,将qu初始化为15,将price初始化为qu的10倍。显示每个对象的qu*price。2、编写一个程序,用成员函数重载运算符“”和“”将两个二维数组相加和相减,要求第一个二维数组由构造函数设置,另一个二维数组的值由键盘输入。注:请用炭素墨水书写、字迹要求工整、并抄写在方框线内 共 页, 第 页,考试试题参考答案及评分细则面向对象程序设计 课程(B卷) 计算机 院(系) 网络工程、计算机 班级应试学生人数 实际考试学生人数 考试时量 100分钟 命题教师 审核人: 考试时间: 年 月 日1. 一、简答题(每小题5分,共20分)1答:类就是相同的数据和相同的一组对象的集合,即,类是对具有相同数据结构和相同操作的一类对象的描述;对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体,对象可以认为是:数据操作;类和对象之间的关系是抽象和具体的关系。2答:构造函数主要用于为对象分配空间,进行初始化。构造函数除了具有一般成员函数的特征外,还具有一些特殊的性质:(1)构造函数的名字必须与类名相同(2)构造函数可以有任意类型的参数,但不能指定返回类型。它有隐含的返回值,该值由系统内部使用。(3)构造函数是特殊的成员函数,函数体可写在类体内,也可写在类体外。(4)构造函数可以重载,即一个类中可以定义多个参数个数或参数类型不同的构造函数。(5)构造函数被声明为公有函数,但它不能像其他成员函数那样被显式地调用,它是在定义对象的同时被调用的。 析构函数也是一种特殊的成员函数。它执行与构造函数相反的操作,通常用于撤消对象时的一些清理任务,如释放分配给对象的内存空间等。析构函数有以下一些特点:(1)析构函数与构造函数名字相同,但它前面必须加一个波浪号();(2)析构函数没有参数,也没有返回值,而且不能重载。因此在一个类中只能有一个析构函数;(3)当撤消对象时,编译系统会自动地调用析构函数。 3答:略.详见教材P151.4答:略. 详见教材P192.1. 二、选择题(每小题2分,共20分) 110A B B B B C C D B B1. 三、填空题(每空1分,共10分)(1)AB:bb (2)基类 (3)派生类 (4)派生类 (5)基类 (6)状态标志字 (7)公有派生类对象 (8)virtual 函数类型 函数名(参数表)=0; (9)AB operator+(); (10)AB operator+(int);1. 四、写出下面程序的运行结果(每小题5分,共20分)1number=3,7,10sum=20number=14,9,11sum=54sum=542contructor called.contructor called.today is 2005.7.1tomorrow is 2005.7.2Destructor called.Destructor called.3Date called.Employee called.Manager called.4(10,20) (29,39)1. 五、编程题(每小题10分,共30分)略.注:请用炭素墨水书写、字迹要求工整、并抄写在方框线内 共 页, 第 页,考试试题参考答案及评分细则面向对象程序设计 课程(B卷) 计算机、网络 专业 班级应试学生人数 实际考试学生人数 考试时量 100 分 钟 命题教师 审核人: 考试时间: 年 月 日一、简答题(每小题5分,共20分)1答:类就是相同的数据和相同的一组对象的集合,即,类是对具有相同数据结构和相同操作的一类对象的描述;对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体,对象可以认为是:数据操作;类和对象之间的关系是抽象和具体的关系。2答:构造函数主要用于为对象分配空间,进行初始化。构造函数除了具有一般成员函数的特征外,还具有一些特殊的性质:(1)构造函数的名字必须与类名相同(2)构造函数可以有任意类型的参数,但不能指定返回类型。它有隐含的返回值,该值由系统内部使用。(3)构造函数是特殊的成员函数,函数体可写在类体内,也可写在类体外。(4)构造函数可以重载,即一个类中可以定义多个参数个数或参数类型不同的构造函数。(5)构造函数被声明为公有函数,但它不能像其他成员函数那样被显式地调用,它是在定义对象的同时被调用的。 析构函数也是一种特殊的成员函数。它执行与构造函数相反的操作,通常用于撤消对象时的一些清理任务,如释放分配给对象的内存空间等。析构函数有以下一些特点:(1)析构函数与构造函数名字相同,但它前面必须加一个波浪号();(2)析构函数没有参数,也没有返回值,而且不能重载。因此在一个类中只能有一个析构函数;(3)当撤消对象时,编译系统会自动地调用析构函数。 3答:略.详见教材P151.4答:略. 详见教材P192.二、选择题(每小题2分,共20分)110A B B B B C C D B B三、填空题(每空1分,共10分)(1)AB:bb (2)基类 (3)派生类 (4)派生类 (5)基类 (6)状态标志字 (7)公有派生类对象 (8)virtual 函数类型 函数名(参数表)=0; (9)AB operator+(); (10)AB operator+(int);四、写出下面程序的运行结果(第1小题6分,第2、3小题7分,共20分)1number=3,7,10sum=20number=14,9,11sum=54sum=542contructor called.contructor called.today is 2005.7.1tomorrow is 2005.7.2Destructor called.Destructor called.3Date called.Employee called.Manager called.五、编程题(每小题15分,共30分)略.注:请用炭素墨水书写、字迹要求工整、并抄写在方框线内 共 页, 第 页,