最新11级C++综合习题(含答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、单项选择题
1. 函数重载是指( A )。
A. 两个或两个以上的函数取相同的函数名,但形参的个数或类型不同
B. 两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同
C. 两个以上的函数名字不同,但形参的个数或类型相同
D. 两个以上的函数取相同的函数名,并且函数的返回类型相同
2. 下列对引用的陈述中不正确的是( C )。
A. 每一个引用都是其所引用对象的别名,因此必须初始化
B. 形式上针对引用的操作实际上作用于它所引用的对象
C. 一旦定义了引用,一切针对其所引用对象的操作只能通过该引用间接进行
D. 不需要单独为引用分配存储空间
3. 关于封装,下列说法中不正确的是( A )。
A. 通过封装,对象的全部属性和操作结合在一起,形成一个整体
B. 通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)
C. 通过封装,每个对象都成为相对独立的实体
D. 通过封装,对象的属性都是不可见的
4. 假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为( C )。
A. px(a)
B. px[a]
C. px->a
D. px.a
5. 假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为( A )。
A. int AA::a()
B. int AA:a()
C. AA::a()
D. AA::int a()
6. 类的构造函数是在定义该类的一个( C )时被自动调用执行的。
A. 成员函数
B. 数据成员
C. 对象
D. 友元函数
7.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是( C )
A.派生类的对象可以赋给基类的对象
B.派生类的对象可以初始化基类的引用
C.派生类的对象可以直接访问基类中的成员
D.派生类的对象的地址可以赋给指向基类的指针
8.对于类定义
class A{
public:
virtual void func1( ){ }
void func2( ){ }
};
class B:public A{
public:
void func1( ){cout<<〃class B func 1〃<<end1;}
virtual void func2( ){cout<<〃class B func 2〃<<end1;}
};
下面正确的叙述是( C ) A、 A::func2( )和B::func1( )都是虚函数
B、A::func2( )和B::func1( )都不是虚函数
C、 B::func1( )是虚函数,而A::func2( )不是虚函数
D、B::func1( )不是虚函数,而A::func2( )是虚函数
9. 对于int *pa[5];的描述,(D )是正确的。
A、pa是一个指向数组的指针,所指向的数组是5个int型元素;
B、pa是一个指向某个数组中第5个元素的指针,该元素是int型变量;
C、pa[5]表示某个数组的第5个元素的值;
D、pa是一个具有5个元素的指针数组,每个元素是一个int型指针;
10. 下述静态数据成员的特征中,( D )是错误的。
A、说明静态数据成员时前边要加修饰符static;
B、静态数据成员要在类体外进行初始化;
C、引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;
D、静态数据成员不是所有对象所共用的。
11. 以下关于函数模板叙述正确的是( C )。
A. 函数模板也是一个具体类型的函数
B. 函数模板的类型参数与函数的参数是同一个概念
C. 通过使用不同的类型参数,函数模板可以生成不同类型的函数
D. 用函数模板定义的函数没有类型
12. 下列( B )的调用方式是引用调用。
A. 形参和实参都是变量
B.形参是指针,实参是地址值
C. 形参是引用,实参是变量
D.形参是变量,实参是地址值
13. 为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择( A )。
A. 内联函数
B.重载函数
C.递归函数
D.函数模板
14. 面向对象方法的多态性是指( C )。
A. 一个类可以派生出多个特殊类
B. 一个对象在不同的运行环境中可以有不同的变体
C. 针对一消息,不同的对象可以以适合自身的方式加以响应
D. 一个对象可以是由多个其他对象组合而成的
15. 在类作用域中能够直接使用该类的( D )成员名进行访问。
A. 私有
B. 公用
C. 保护
D. 任何
16. 假定一个类AB只含有一个整型数据成员a,用户为该类定义的带参构造函数可以为( D )。
A. AB() {}
B. AB(): a(0){}
C. AB(int aa=0) {a=aa;}
D. AB(int aa) {}
17. 对于任一个类,用户所能定义的构造函数的个数至多为( D )。
A. 0
B. 1
C. 2
D. 任意个
18. 对类对象成员的初始化是通过构造函数中给出的( D )实现的。
A. 函数体
B. 初始化表
C. 参数表
D. 初始化表或函数体
19. 被非静态成员函数访问的类的数据成员( A )。
A. 可以是非静态数据成员或静态数据成员
B. 不可能是类的静态数据成员
C. 只能是类的非静态数据成员
D. 只能是类的静态数据成员
20. 引入友元的主要目的是为了( C )。
A. 增强数据安全性
B. 提高程序的可靠性
C. 提高程序的效率和灵活性
D. 保证类的封装性
21.下面有关重载函数的描述中,正确的是( C )。
A)重载函数必须具有不同的返回值类型B)重载函数形参个数必须不同
C)重载函数必须具有不同的形参表D)重载函数名可以不同22.假定MyCIass为一个类,那么下列的函数说明中,( D )为该类的析构函数。
A)void~MyClass(); B)~MyClass(int n);C)MyClass( ); D)~MyClass( );
23.( A )是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。
A)模板B)类C)对象D)函数
24.下面关于静态成员函数的途术中错语的是( B )。
A) 静态成员函数可以有返回值 B) this指针可以指向静态成员函数
C) 静态成员函数可以具有指针参数D) 静态成员函数可有具有返回值类型
25.定义类模板时要使用关键字( D )。
A)private B) public C)delete D)template
26.下列是重载乘法运算符的函数原型声明,其中错误的是( A )。
A)MyClass operator*(double,double);
B)MyClass operator*(double,MyClass);
C)MyClass operator*(MyClass,double);
D)MyClass operator*(MyClass,MyClass);
27.以下( C )成员函数表示纯虚函数。
A)virtual int fun(int) B)void fun(int)=0
C)virtual void fun()=0 D)virtual void fun(int){ } 28.关于纯虚函数,下列表述中正确的是( A )。
A)纯虚函数的声明总是以"=0"结束B)含有纯虚函数的类可以定义对象
C)含有纯虚函数的类是抽象类D)上面都是错误的
29.( C )解决二义性问题。
A)能使用作用域分辨操作符B) 只能使用虚基类
C) 使用作用域分辨操作符或虚基类D) 上面都不能
30.实现编译时的多态性要使用( A )。
A)重载函数B)析构函数C)构造函数D)虚函数
31、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法
上进行的最大改进是(B)
、面向过程B、面向对象C、安全性D、复用性
32、考虑函数原型void test(int a,int b=7,char="*"),下面的函数调用中,属于不合法调用的是(C)
、test(5); B、test(5,8); C、test(6,"#") D、test(0,0."*");;
33、下面有关重载函数的说法中正确的是(C)
、重载函数必须具有不同的返回值类型;B、重载函数形参个数必须不同;
C、重载函数必须有不同的形参列表
D、重载函数名可以不同;
34、下列关于构造函数的描述中,错误的是(D)
、构造函数可以设置默认参数;B、构造函数在定义类对象时自动执行
C、构造函数可以是内联函数;
D、构造函数不可以重载
35. 关于对象概念的描述中,(A )是错误的。
A、对象就是C语言中的结构变量;
B、对象代表着正在创建的系统中的一个实体;
C、对象是一个状态和操作(或方法)的封装体;
D、对象之间的信息传递是通过消息进行的;
36. 对于int *pa[5];的描述,(D)是正确的。
A、pa是一个指向数组的指针,所指向的数组是5个int型元素;
B、pa是一个指向某个数组中第5个元素的指针,该元素是int型变量;
C、pa[5]表示某个数组的第5个元素的值;
D、pa是一个具有5个元素的指针数组,每个元素是一个int型指针;
37. 下述静态数据成员的特征中,( D )是错误的。
A、说明静态数据成员时前边要加修饰符static;
B、静态数据成员要在类体外进行初始化;
C、引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;
D、静态数据成员不是所有对象所共用的。
38. ( A )是析构函数的特征。
A、一个类中只能定义一个析构函数;
B、析构函数与类名不同;
C、析构函数的定义只能在类体内;
D、析构函数可以有一个或多个参数。
39. 已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。
如果要给m赋
值为5,( C )是正确的。
A、A1.p=5;
B、A1->p=5;
C、A1.*p=5;
D、*A1.p=5;
40. 派生类的对象对它的基类成员中( C )是可以访问的。
A、公有继承的公有成员;
B、公有继承的私有成员;
C、公有继承的保护成员;
D、私有继承的公有成员。
41.下列表示引用的方法中,正确的是(A)。
(A)int m=10; int &x=m; (B) int m=10; int &y=10;
(C) int m=10; int &z; (D)int m=10; ifloat &t=&m;
42.下列标识符中,( C )是文件作用域。
(A)函数形参(B)语句标号
(C)外部静态标识符(D)自动类标识符
43.在程序中,函数声明语句正确位置是(D)
(A)随便任何位置
(B)不包含在另一函数中的任何位置。
(C)该函数使用前的任何位置
(D)该函数使用前的任何位置,但不包含在另一函数中
44.下面有关函数重载的程序段正确的是(A) 。
(A)int fun(int x, int y); int fun(float x, float y);
(B) int fun(int x, int y); int fun(int a, int b);
(C) float fun(int x, int y); int fun(int x, int y);
( D) int main(); void main();
45.返回类型就是函数返回结果值的数据类型。
返回类型可以是(C)
(A) 除数组和类以外的任意数据类型
(B)除数组和结构类型以外的任意数据类型
(C) 除数组类型以外的任意数据类型
(D)除指针和引用类型以外的任意数据类型
46.下面关于带默认形式参数值的函数声明正确的是(C )。
(A) int fun(int a=1, int b, int c); (B) int fun(int a=1, int b=2, int c);
(C) int fun(int a, int b=2, int c=3); (D) int fun(int a=1, int b, int c=3);
47.引入内联函数的主要目的是(B)
(A)缩短程序代码,少占用内存空间
(B)既可以保证程序的可读性,又能提高程序的运行效率
(C)占用内存空间少,执行速度快
(D)使程序的结构比较清晰
48.有关构造函数的说法不正确的是(D)
(A) 构造函数名字和类的名字一样
(B)构造函数说明类变量时自动执行
(C) 构造函数无任何函数类型
(D)构造函数有且仅有一个
49.通常拷贝初始化构造函数的参数是(C)。
(A) 某个对象名(B) 某个对象的成员名
(C) 某个对象的引用名(D) 某个对象的指针名
50.当保护继承时,基类的(B)在派生类中成为保护成员,不能通过派生类的对象来直接访问该成员。
(A) 任何成员(B)公有成员和保护成员
(C) 保护成员和私有成员(D)私有成员
51. 当将一个类S定义为另一个类A的友元类时,类S的所有成员函数(A )。
(A) 可以直接访问类A的所有成员(B)只能访问类A的公有成员
(C) 不能访问类A的私有成员(D)具有类S中非继承的成员函数相同的访问权限
52.设置虚基类的目的是(B)
(A) 简化程序
(B)消除二义性。
(C) 提高运行效率
(D)减少目标代码
53.派生类的对象对它的基类成员中(A )是可以访问的。
(A)公有继承的公有成员(B)公有继承的私有成员
(C)公有继承的保护成员(D)私有继承的公有成员
54.关于纯虚函数和抽象类的描述中,下面描述错误的是(C )。
(A)纯虚函数是一种特殊的函数,它没有具体的实现
(B)抽象类是指具有纯虚函数的类
(C)一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类
(D)抽象类只能作为基类使用,其纯虚函数的实现由派生类给出
55. (C)是一个在基类中说明的虚函数,它在该类中没有定义,但要求任何派生类都必须定义自己的版本。
(A)虚析构函数(B)虚构造函数
(C)纯虚函数(D)静态成员函数
二、填空题
1.当一个成员函数被调用时,该成员函数的( 函数指针) 指向调用它的对象。
2.在公有继承的情况下,基类数据成员在派生类中的访问权限( 不变) 。
3.静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象( 共享) 。
4.构造函数与析构函数除功能不同外,在定义形式上,它们的区别还包括构造函数名与类名相同,而析构函数名是在类名前加一个~、( 析构函数没有参数) 、析构函数可以定义为虚函数。
5.C++中没有输入输出语句,输入输出是通过输入输出库实现的,写出一条打印整型变量n的输出语句:( cout<<n);
6.面向对象的程序设计有四大特征,它们是抽象、封装、( 继承)、( 多态)。
7.动态联编要满足两个条件,它们是( 被调用的成员函数是虚函数)、( 用指针或引用调用虚函数) 。
8.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为( 抽象类) ,定义该类至少具有一个( 纯虚函数) 。
9.在C++类中,const关键字可以修饰对象和成员函数,const对象不能( 赋值) ,const 成员函数不能(修改成员数据) 。
10.举出C++中两种代码复用的方式:(继承) 、(复用) 。
11.对于派生类的构造函数,在定义对象时构造函数的执行顺序为:先执行调用(基类)的构造函数,再执行调用子对象类的构造函数,最后执行派生类的构造函数体中的内容。
12.声明类模板应使用关键字(template )。
13.重载的关系运算符和逻辑运算符的返回类型应当是(bool型)。
14.在面向对象方法中,类的实例称为(对象)。
15.在类的对象被释放时,(析构函数)函数会被自动调用。
16.当一个成员函数被调用时,该成员函数的( 函数指针) 指向调用它的对象。
17.在公有继承的情况下,基类数据成员在派生类中的访问权限( 不变) 。
18.静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象( 共享) 。
19.构造函数与析构函数除功能不同外,在定义形式上,它们的区别还包括构造函数名与类名相同,而析构函数名是在类名前加一个~、( 析构函数没有参数) 、析构函数可以定义为虚函数。
20.C++中没有输入输出语句,输入输出是通过输入输出库实现的,写出一条打印整型变量n的输出语句:( cout<<n );
三、综合题
1编程题:设计一个立方体类Box,它能计算并输出立方体的体积和表面积。
2 :
(1)下面程序的打印结果是__1251121___ .
#i ncude
int f(int);
int main()
{ int i;
for(i=0;i<5;i++)
cout<<F(I)<<"";
return0;
}
int f(int i)
{ static int k=1;
for(;i>0;i- -)
k + = i;
return k;
}
2)在用class定义一个类时,数据成员和成员函数的默认访问权限是_private__.
3)含有纯虚函数的类称为___抽象类__.
4)已知intDBL(int n){return n + n;}和longDBL(long n){return n +n;}
_ templateT DBL(T n){return n+n;}_.
5)在下面程序的横线处填上适当的语句,使该程序执行结果为10.
#include
class MyClass
{ public:
MyClass(int a){x = a;}
_MyClass(int x){this.x=x;};int GetNum(){return x;};_ //取x值
private
int x;
};
int main()
{ MyClass my(10);
cout<<MY.GETNUM()<<ENDL;
return 0;
}
3编程实现抽象类Employee,派生类Manger和HourlyWorker,Employee有数据成员姓名name和工号ID,Manger有数据成员sal,代表经理的月工资,HourlyWorker有wage 和hours,分别代表钟点工的每小时的工资数和月工作时数,定义的所有类中必须包含构造函数、析构函数、修改和获取所有数据成员的成员函数,以及虚函数来计算职员的工资、输出职员的姓名name和工号ID。
(18分)
4设计一个程序。
定义一个圆类,有数据成员半径radis(半径),计算圆的面积和周长,写出主函数测试你编写的类。
(12分)
5定义一个处理日期的类TDate,它有3个私有数据成员:Month,Day,Year和若干个公有成员函数,并实现如下要求:①构造函数重载;②成员函数设置缺省参数;③定义一个友元函数来打印日期;④定义一个非静态成员函数设置日期;⑤可使用不同的构造函数来创建不同的对象。
6 回答下面问题。
下面列出了由三个文件main.cpp、MyClass.h和MyClass.cpp组成的一个程序。
文件main.cpp中实现了主函数;文件MyClass.h中定义了类MyClass;文件MyClass.cpp中实现了类MyClass的成员函数。
题中没有给出三个文件的完整实现。
仔细阅读所给的程序,根据题意补充文件MyClass.h和文件MyClass.cpp的内容。
要求:
a.将成员变量定义为私有的;
b.不要增加题中没有用到的类成员。
/********************************************************/
//文件main.cpp
#include <iostream.h>
#include "MyClass.h"
void main()
{
MyClass obj(3.3);
cout << obj.GetMember() << endl;
obj.SetMember(5.6);
cout << obj.GetMember() << endl;
}
/***********************************************************************/。