面向对象程序设计C期末试卷及标准答案B样本
- 格式:doc
- 大小:67.50 KB
- 文档页数:13
c面向对象程序设计期末考试题及答案一、选择题(每题2分,共20分)1. 下列哪个是面向对象程序设计的特点?A. 封装B. 继承C. 多态D. 所有选项都是2. 在Java中,以下哪个关键字用于定义类?A. classB. structC. typeD. classdef3. 以下哪个是Java中不允许的类成员访问修饰符?A. publicB. protectedC. privateD. global4. 以下哪个是Java中实现多态的方式?A. 函数重载B. 函数重写C. 接口D. 抽象类5. 在Java中,哪个关键字用于声明一个方法,该方法没有返回值?A. voidB. returnC. noneD. null6. 以下哪个是Java中创建对象的语法?A. new ClassName();B. create ClassName;C. make ClassName;D. ClassName();7. 在Java中,以下哪个是正确的构造方法声明?A. public ClassName();B. public ClassName new();C. public new ClassName();D. public ClassName create();8. 以下哪个是Java中实现继承的方式?A. 使用extends关键字B. 使用implements关键字C. 使用interface关键字D. 使用new关键字9. 在Java中,以下哪个关键字用于实现接口?A. implementsB. extendsC. interfaceD. class10. 以下哪个是Java中实现封装的方式?A. 使用public关键字B. 使用private关键字C. 使用protected关键字D. 使用default关键字答案:1. D2. A3. D4. B5. A6. A7. A8. A9. A10. B二、简答题(每题10分,共20分)1. 简述面向对象程序设计中的“封装”概念及其重要性。
《面向对象程序设计C++》期末考试试卷(B)一、单项选择题(每小题2分,共40分)1、关于C++与C语言关系的描述中,( )就是错误的。
A.C语言就是C++语言的一个子集B.C语言与C++语言就是兼容的C.C++语言对C语言进行了一些改进D.C++语言与C语言都就是面向对象的2、已知:int m=10; 下列表示引用的方法中,( )就是正确的。
A.int &x=m;B.int &y=10;C.int &z;D.float &t=&m;3、考虑下面的函数原型声明:void testDefaulParam(int a,int b=7,char z='*');下面函数调用中,不合法的就是( )。
A.testDefaulParam(5);B.testDefaulParam(5,8);C.testDefaulParam(5,'#');D.testDefaulParam(0,0,'*');4、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的就是( )。
A.函数的返回值类型B.参数的类型C.函数名称D.参数个数5、下列有关C++类的说法中,不正确的就是( )。
A.类就是一种用户自定义的数据类型B.只有类中的成员函数或类的友元函数才能存取类中的私有成员C.在类中,如果不做特别说明,所有成员的访问权限均为私有的D.在类中,如果不做特别说明,所有成员的访问权限均为公用的6、已知X类,则当程序执行到语句X array[3];时,调用了( )次构造函数。
A.0B.1C.2D.37、有关析构函数的说法,不正确的就是( )。
A.析构函数有且仅有一个B.析构函数与构造函数一样可以有形参C.析构函数的功能就是在系统释放对象之前作一些内存清理工作D.析构函数无任何函数类型8、类定义的内容允许被其对象无限制地存取的就是( )。
《面向对象程序设计C++》期末考试试卷(B)班级:姓名:学号:分数:试卷说明:本套试题共四个大题,全部题目都答在答题纸上,写在其他地方均无效。
(答题纸在本套试卷的第8页上)一、单项选择题(每小题2分,共40分)1、关于C++与C语言关系的描述中,( D )是错误的。
A.C语言是C++语言的一个子集B.C语言与C++语言是兼容的C.C++语言对C语言进行了一些改进D.C++语言和C语言都是面向对象的2、已知:int m=10; 下列表示引用的方法中,( A )是正确的。
A.int &x=m; B.int &y=10; C.int &z; D.float &t=&m;3、考虑下面的函数原型声明:void testDefaulParam(int a,int b=7,char z='*');下面函数调用中,不合法的是( C )。
A.testDefaulParam(5); B.testDefaulParam(5,8); C.testDefaulParam(5,'#'); D.testDefaulParam(0,0,'*');4、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的是(A )。
A.函数的返回值类型B.参数的类型C.函数名称D.参数个数5、下列有关C++类的说法中,不正确的是( D )。
A.类是一种用户自定义的数据类型B.只有类中的成员函数或类的友元函数才能存取类中的私有成员C.在类中,如果不做特别说明,所有成员的访问权限均为私有的D.在类中,如果不做特别说明,所有成员的访问权限均为公用的6、已知X类,则当程序执行到语句X array[3];时,调用了( D )次构造函数。
A.0 B.1 C.2 D.37、有关析构函数的说法,不正确的是(B )。
A.析构函数有且仅有一个B.析构函数和构造函数一样可以有形参C.析构函数的功能是在系统释放对象之前作一些内存清理工作D.析构函数无任何函数类型8、类定义的内容允许被其对象无限制地存取的是( C )。
选择题1.在C++中,函数原型不能标识( D )A.函数的返回类型B.函数参数的个数C.函数参数类型D.函数的功能2.在C++程序中,对象之间的相互通信通过( B )A.继承实现B.调用成员函数实现C.封装实现D.函数重载实现3.对于任意一个类,析构函数的个数最多为( B )A.0B.1C.2D.34.友元关系不能( A )A.继承B.是类与类的关系C.是一个类的成员函数与另一个类的关系D.提高程序的运行效率5.语句ofstream f(″SALARY.DAT″,ios::app|ios::binary);的功能是建立流对象f,试图打开文件SALARY.DAT 并与之连接,并且( A )A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件B.若文件存在,将其置为空文件;若文件不存在,打开失败C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件D.若文件存在,打开失败;若文件不存在,建立一个新文件6.下面说法正确的是( B )A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C.类的内联函数必须在类体内定义D.类的内联函数必须在类体外通过加关键字inline 定义7.可以用p.a 的形式访问派生类对象p 的基类成员a,其中a 是( D )A.私有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.公有继承的公有成员8.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是( C )A.派生类的对象可以赋给基类的对象B.派生类的对象可以初始化基类的引用C.派生类的对象可以直接访问基类中的成员D.派生类的对象的地址可以赋给指向基类的指针9. 派生类对象可访问基类中的什么成员( A )A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员10. 定义析构函数时,应该注意(C)A.其名与类名完全相同B.返回类型是void类型C.无形参,也不可重载D.函数体中必须有delete语句11. 如果类A被说明成类B的友元,则( D )。
《面向对象程序设计 C++》期末考试一试卷一、选择题 ( 每题 3 分,共 48 分。
) 01、以下对于 C++函数的表达中,正确的选项是 ( ) 。
A)每个函数起码要拥有一个参数 B) 每个函数都一定返回一个值 C)函数在被调用以前一定先申明 D) 函数不可以自制调用自己 02、以下对于类和对象的表达中,错误的选项是 ( ) 。
A)一个类只好有一个对象 B) 对象是类的详细实例 C)类是对某一类对象的抽象 D)类和对象的关系是一种数据种类与变量的关系 03、在 C++中,用于实现运转时多态性的是 ( ) 。
A)内联函数 B) 重载函数 C) 模板函数 D) 虚函数 04、以下对于运算符重载的表达中,正确的选项是 ( ) 。
A)经过运算符重载,能够定义新的运算符 B)有的运算符只好作为成员函数重载 C)若重载运算符 +,则相应的运算符函数名是 + D) 重载二元运算符时,一定申明两个形参 05、对于语句 cout<<x<<endl 。
错误的选项是描绘是 ( ) 。
A)“cout ”是一个输出流对象 B)“endl ”的作用是输出回车换行 C)“x ”是一个变量 D)“<<”称作提取运算符 06、有以下类申明,则类 MyDERIVED 中保护的数据成员和成员函数的个数是 ( ) 。
class MyBASE { private: int k 。
public: void set(int n){ k=n 。
} int get( )const{ return k 。
}} 。
class MyDERIVED: protected MyBASE { protected: int j 。
public: void set(int m, int n){ MyBASE::set(m) int get( )const{ return MyBASE::get( )+j 。
《面向对象程序设计C++》期末考试试卷(B)标准答案班级:姓名:学号:分数:一、单项选择题(每小题2分,共40分)1-5.D A C A D6-10.D B C D C11-15.D C B D B16-20.A D C C C二、填空题(前16个空,每空1分,后2个空,每空2分,共20分)1.抽象、实例2.public 、private _ ___、protected 、private _ ___ 3.virtual ___ 4.friend void fun(A &a) _ 5.静态数据成员、静态成员函数6.结合性、优先级_ ___ 7.Template 、 class(或typename) 8.类、结构体___ 9.在创建对象时初始化对象的数据成员___ 10. A operator++(int)___三、阅读程序(共13分)1、a=89,b=56,c=122、12/31/200912/31/20091/1/20101/1/20103、constructing Aconstructing Bconstructing Cdestructing Cdestructing Bdestructing A四、编程题(共27分)1、(10分)Complex::Complex(){real=0;imag=0;}Complex::Complex(double r){real=r;}Complex::Complex(double r,double i){real=r;imag=i;} Complex operator+(Complex &c1,Complex &c2){ Complex c;c.real=c1.real+c2.real; c.imag=c1.imag+c2.imag;return c;}ostream& operator << (ostream& output,Complex& c){ output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;return output;}istream& operator >> (istream& input,Complex& c){ cout<<"input real and imaginary part of complex number:";input>>c.real>>c.imag;return input;}2、(17分)class Circle:public Shape{public:Circle(double r){radius=r;}void set(){ cout<<"Please input the value of the circle:"<<endl;cin>>radius;}void show(){ cout<<"the radius of the circle="<<radius<<endl; }double area() {return 3.14159*radius*radius;} private:double radius;};class Square:public Shape{public:Square(double a){this->a=a;}void set(){ cout<<"Please input the value of a:"<<endl;cin>>a;}void show(){ cout<<"a="<<a<<endl; }double area(){return a*a;}private:double a;};int main(){Circle C(5.5);C.show();Square S(9.9);S.show();Shape *s[]={&C,&S};cout<<"total="<<total(s,2)<<endl;return 0;}。
《面向对象程序设计C++》期末考试试卷(B)班级:姓名:学号:分数:试卷说明:本套试题共四个大题,全部题目都答在答题纸上,写在其他地方均无效。
(答题纸在本套试卷的第8页上)】一、单项选择题(每小题2分,共40分)1、关于C++与C语言关系的描述中,( D )是错误的。
A.C语言是C++语言的一个子集B.C语言与C++语言是兼容的C.C++语言对C语言进行了一些改进D.C++语言和C语言都是面向对象的2、已知:int m=10; 下列表示引用的方法中,(A )是正确的。
A.int &x=m; B.int &y=10; C.int &z; D.float &t=&m;3、考虑下面的函数原型声明:void testDefaulParam(int a,int b=7,char z='*');下面函数调用中,不合法的是( C )。
>A.testDefaulParam(5); B.testDefaulParam(5,8); C.testDefaulParam(5,'#'); D.testDefaulParam(0,0,'*');4、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的是( A )。
A.函数的返回值类型B.参数的类型C.函数名称D.参数个数5、下列有关C++类的说法中,不正确的是( D )。
A.类是一种用户自定义的数据类型B.只有类中的成员函数或类的友元函数才能存取类中的私有成员C.在类中,如果不做特别说明,所有成员的访问权限均为私有的^D.在类中,如果不做特别说明,所有成员的访问权限均为公用的6、已知X类,则当程序执行到语句X array[3];时,调用了(D )次构造函数。
A.0 B.1 C.2 D.37、有关析构函数的说法,不正确的是( B )。
A.析构函数有且仅有一个B.析构函数和构造函数一样可以有形参C.析构函数的功能是在系统释放对象之前作一些内存清理工作D.析构函数无任何函数类型。
《面向对象程序设计C++》期末考试试卷(A)班级::学号:分数:试卷说明:本套试题共四个大题,全部题目都答在答题纸上,写在其他地方均无效。
(答题纸在本套试卷的第10页上)一、选择题(每小题2分,共40分)1、C++是()。
A. 面向对象的程序设计语言B. 面向过程的程序设计语言C. 既支持面向对象的程序设计又支持面向过程的程序设计的混合型语言D. 非结构化的程序设计语言2、面向对象程序设计思想的主要特征中不包括()。
A. 封装性B. 多态性C. 继承性D. 功能分解,逐步求精3、若定义:string str; 当语句cin>>str; 执行时,从键盘输入:Microsoft Visual Studio 6.0!所得的结果是str=()。
A. Microsoft Visual Studio 6.0!B. MicrosoftC. Microsoft VisualD. Microsoft Visual Studio 6.04、考虑下面的函数原型声明:void testDefaulParam(int a,int b=7,char z='*');下面函数调用中,不合法的是()。
A. testDefaulParam(5);B. testDefaulParam(5,8);C. testDefaulParam(5,'#');D. testDefaulParam(0,0,'*');5、下列语句中,将函数int sum(int x, int y)正确重载的是()。
A. float sum(int x, int y);B. int sum(int a, int b);C. float sum(float x, float y);D. double sum(int y, int x);6、下列表示引用的方法中,()是正确的。
已知:int a=1000;A. int &x=a;B. char &y;C. int &z=1000;D. float &t=&a;7、在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用()。
一、选择填空题(共20小题,每小题2分,共40分)。
1. 关于C++与C语言关系的描述中,(d)是错误的。
a.C语言是C++语言的一个子集b.C语言与C++语言是兼容的c.C++语言对C语言进行了一些改进d.C++语言和C语言都是面向对象的2.按照标识符的要求,(a )符号不能组成标识符。
a.连接符b.下划线c.大小写字母d.数字字符3. 为了避免嵌套的if-else语句的二义性,C语言规定else总是与(c)组成配对关系。
a.缩排位置相同的ifb.在其之前未配对的ifc.在其之前未配对的最近的ifd.同一行上的if4. 在"int a[ ][3]={{1},{3,2},{4,5,6},{0}};"中,a[2][2]的值是(c)。
a.1b.0c.6d.25. 设"char **s;",以下正确的表达式是(b)。
a.s="computer";b.*s="computer";c.**s="computer";d.*s='c';6. 对于"int *pa[5];"的描述中,(d )是正确的。
a.pa是一个指向数组的指针,所指向的数组是5个int型元素b.pa是一个指向某数组中第5个元素的指针,该元素是int型变量c.pa [5]表示某个元素的第5个元素的值d.pa是一个具有5个元素的指针数组,每个元素是一个int型指针7. 在下列表示引用的方法中,(a )是正确的。
已知:int m=10;a.int &x=m;b.int &y=10;c.int &z;d.float &t=&m;8. 下列for循环的次数为(b)。
for(i=0, x=0; !x&&i<=5; i++)a.5b.6c.1d.无限9. 对于C/C++语言的函数,下列叙述中正确的是(a)。
《面向对象程序设计C++》期末考试试卷一、选择题(每小题3分,共48分。
)01、下列关于C++函数的叙述中,正确的是( C )。
A)每个函数至少要具有一个参数 B)每个函数都必须返回一个值C)函数在被调用之前必须先声明 D)函数不能自己调用自己02、下列关于类和对象的叙述中,错误的是( A )。
A)一个类只能有一个对象 B)对象是类的具体实例C)类是对某一类对象的抽象 D)类和对象的关系是一种数据类型与变量的关系03、在C++中,用于实现运行时多态性的是( D )。
A)内联函数 B)重载函数 C)模板函数 D)虚函数!04、下列关于运算符重载的叙述中,正确的是( B )。
A)通过运算符重载,可以定义新的运算符 B)有的运算符只能作为成员函数重载C)若重载运算符+,则相应的运算符函数名是+ D)重载二元运算符时,必须声明两个形参05、对于语句 cout<<x<<endl;错误的是描述是( D )。
A)“cout”是一个输出流对象B)“endl”的作用是输出回车换行C)“x”是一个变量D)“<<”称作提取运算符(插入运算符)06、有如下类声明,则类MyDERIVED中保护的数据成员和成员函数的个数是( 保护数据成员个数1,保护陈谷原函个数2 )。
( B )class MyBASE{ private: int k;public: void set(int n){ k=n;}int get( )const{ return k;} };class MyDERIVED: protected MyBASE{ protected: int j;public: void set(int m, int n){ MyBASE::set(m); j=n;}int get( ) const { return MyBASE::get( )+j; } };A)4 B)3 C)2 D)107、已知在一个类体中包含如下函数原型: Volume operator-(Volume)const;,下列关于这个函数的叙述中,错误的是( B )。
《面向对象程序设计C++》期末考试试卷( B)
班级: 姓名: 学号: 分数:
试卷说明: 本套试题共四个大题, 全部题目都答在答题纸上, 写在其它地方均无效。
( 答题纸在本套试卷的第8页上)
一、单项选择题( 每小题2分, 共40分)
1、关于C++与C语言关系的描述中, ( D ) 是错误的。
A.C语言是C++语言的一个子集 B.C语言与C++语言是兼容的
C.C++语言对C语言进行了一些改进 D.C++语言和C语言都是面向对象的
2、已知: int m=10; 下列表示引用的方法中, ( A ) 是正确的。
A.int &x=m; B.int &y=10; C.int &z; D.float &t=&m;
3、考虑下面的函数原型声明: void testDefaulParam(int a,int b=7,char z='*');下面函数调用中, 不合法的是( C ) 。
A.testDefaulParam(5); B.testDefaulParam(5,8);
C.testDefaulParam(5,'#'); D.testDefaulParam(0,0,'*');
4、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用, 在下列选项中, 不能作为依据的是( A ) 。
A.函数的返回值类型 B.参数的类型 C.函数名称 D.参数个数
5、下列有关C++类的说法中, 不正确的是( D ) 。
A.类是一种用户自定义的数据类型
B.只有类中的成员函数或类的友元函数才能存取类中的私有成员
C.在类中, 如果不做特别说明, 所有成员的访问权限均为私有的
D.在类中, 如果不做特别说明, 所有成员的访问权限均为公用的
6、已知X类, 则当程序执行到语句X array[3];时, 调用了( D ) 次构造函数。
A.0 B.1 C.2 D.3
7、有关析构函数的说法, 不正确的是( B ) 。
A.析构函数有且仅有一个
B.析构函数和构造函数一样能够有形参
C.析构函数的功能是在系统释放对象之前作一些内存清理工作
D.析构函数无任何函数类型
8、类定义的内容允许被其对象无限制地存取的是( C ) 。
A.private 部分 B. protected 部分 C.public 部分 D.以上都不对9、关于常数据成员的说法, 不正确的是( D ) 。
A.常数据成员的定义形式与一般常变量的定义形式相同, 只不过常数据成员的定义必须出现在类体中
B.常数据成员必须进行初始化, 而且不能被更新
C.常数据成员经过构造函数的成员初始化列表进行初始化
D.常数据成员能够在定义时直接初始化
10、运用运算符delete删除一个动态对象时( C ) 。
A.系统首先为该动态对象调用构造函数, 再释放其占用的内存
B.系统首先释放该动态对象占用的内存, 再为其调用构造函数
C.系统首先为该动态对象调用析构函数, 再释放其占用的内存
D.系统首先释放动态对象占用的内存, 再为其调用析构函数
11、能够在类外用p.a的形式访问派生类对象p的基类成员a, 其中a是( D ) 。
A.私有继承的公用成员 B.公用继承的私有成员
C.公用继承的保护成员 D.公用继承的公用成员
12、在公用继承方式下, 有关派生类对象和基类对象的关系, 不正确的叙述是( C ) 。
A.派生类的对象能够赋给基类的对象
B.派生类的对象能够初始化基类的引用
C.派生类的对象能够直接访问基类中的成员
D.派生类的对象的地址能够赋给指向基类的指针
13、设置虚基类的目的是( B ) 。
A.简化程序 B.消除二义性 C.提高运行效率 D.减少目标代码14、在C++中, 用于实现动态多态性的是( D ) 。
A.内联函数 B.重载函数 C.模板函数 D.虚函数
15、不能说明为虚函数的是( B ) 。
A.析构函数 B.构造函数 C.类的成员函数 D.以上都不对
16、如果一个类至少有一个纯虚函数, 那么就称该类为( A ) 。
A.抽象类 B.派生类 C.纯基类 D.以上都不对
17、下面关于友元的描述中, 错误的是( D ) 。
A.友元函数能够访问该类的私有数据成员
B.一个类的友元类中的成员函数都是这个类的友元函数
C.友元能够提高程序的运行效率
D.类与类之间的友元关系能够继承
18、下列运算符中, ( C ) 运算符在C++中不能被重载。
A.&& B.[] C.:: D.new
19、模板的使用实际上是将类模板实例化成一个( C ) 。
A.函数 B.对象 C.类 D.抽象类
20、假定MyClass为一个类, 则该类的拷贝构造函数的声明语句为( C ) 。
A.MyClass(MyClass x) B.MyClass&(MyClass x)
C.MyClass(MyClass &x) D.MyClass(MyClass *x)
二、填空题( 前16个空, 每空1分, 后2个空, 每空2分, 共20分)
1、类和对象的关系可表述为: 类是对象的 , 而对象则是类的。
2、在C++中, 三种继承方式的说明符号为、和 ,
如果不加说明, 则默认的继承方式为。
3、如果只想保留公共基类的一个复制, 就必须使用关键字把这个公共
基类声明为虚基类。
4、若要把void fun()定义为类A的友元函数, 则应在类A的定义中加入语句
friend void fun(A &a) 。
5、类的静态成员分为静态数据成员和静态成员函
数。
6、运算符重载要求保持其原来的操作数个数、结合性优先级_ _、
和语法结构。
7、经过关键字能够声明模板, 经过关键字指定函数模板的
类型参数, 有几个类型参数就有几个类型关键字。
8、列出C++中两种用户自定义的数据类型: 、。
9、构造函数的作用是。
10、后置自增运算符”++”重载为类的成员函数( 设类名为A) 的形式
为。
1.抽象、实例
2. public 、 private _ ___、 protected 、 private
_ ___
3. virtual ___ 4. friend void fun(A &a)
_
5.静态数据成员、静态成员函数 6.结合性、优先级_ ___ 7. Template 、 class(或typename) 8.类、结构体 ___ 9.在创立对象时初始化对象的数据成员 ___ 10. A operator++(int)
三、阅读下面3个程序, 写出程序运行时输出的结果: ( 共13分)
1、 #include<iostream >
using namespace std;
void fun(int &a,int &b)
{ int p;
p=a; a=b; b=p;
}
void exchange(int &a,int &b,int &c)
{ if(a<b)fun(a,b);
if(a<c)fun(a,c);
if(b<c)fun(b,c);
}
int main()
{ int a=12,b=89,c=56;
exchange(a,b,c);
cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl;
return 0;
}1、 a=89,b=56,c=12
2、 #include <iostream>
using namespace std;
class Date
{public:
Date(int,int,int);
Date(int,int);
Date(int);
Date();
void display();
private:
int month, day, year;
};
Date::Date(int m,int d,int y):month(m),day(d),year(y) { }
Date::Date(int m,int d):month(m),day(d) {year= ;}
Date::Date(int m):month(m){day=1; year= ; }
Date::Date() {month=1; day=1; year= ; }
void Date::display(){cout<<month<<"/"<<day<<"/"<<year<<endl;} int main()
{ Date d1(12,31, );
Date d2(12,31);
Date d3(1);
Date d4;
d1.display();
d2.display();
d3.display();。