C++期末考试复习题请高手帮忙做下撒谢谢!!!!
单项选择题(每题1分共15分)1、Sample 为一个类,则执行Sample sample;语句时将自动调用该类的
A) 有参构造函数 B) 无参构造函数
C) 拷贝构造函数 D) 赋值重载函数
2、在C++类体系中,不能被派生类继承的是___________。
A) 构造函数 B) 虚函数
C) 静态成员函数 D) 赋值操作函数
3、对类的定义
class A{
public:
virtual void func1(){ }
void func2(){ }
};
class B:public A{
public:
void func1(){cout<<”class B func1”<<endl;}
virtual void func2(){cout<<”class B func2”<<endl;}
};
下面正确的叙述是
A) A::func2( )和B::func1( )都是虚函数
B) A::func2( )和B::func1( )都不是虚函数
C) B::func1( )是虚函数,而A::func2( )不是虚函数
D) B::func1( )不是虚函数,而A::func2( )是虚函数
4、在int a[5]={1,3,5};中,数组元素a[1]的值是___________。
A)1 B)0
C)3 D)2
5、语句 ofstream f(“SALARY.DAT”,ios::app|ios::binary);的功能是建立流对象f,试图打开文件SALARY.DAT并与之连接,而且
A) 若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件
B) 若文件存在,将其置为空文件;若文件不存在,打开失败
C) 若文件存在,将文件写指针定位于文件首,若文件不存在,建立一个新文件
D) 若文件存在,打开失败;若文件不存在,建立一个新文件
6、___________功能是释放对象所占资源
A) 析构函数 B) 数据成员
C) 构造函数 D) 静态成员函数
7、在C++中有下列4条语句
int hot =100;
int &rad=hot;
hot+=100;
cout<< rad << endl;
执行这4句后输出为
A) 0 B) 100 C) 200 D) 300
8、在C++中,数据的封装要解决的问题是
A) 数据规范化 B) 数据自动转换
C) 避免数据丢失 D) 禁止不同模块之间的数据非法使用
9、以下说法中正确的是___________。
A) C++程序总是从第一个定义的函数开始执行的。
B) 在C++程序中,要调用的函数必须在main()函数中定义。
C) C++程序总是从main()函数开始执行的。
D) C++程序中的main()函数必须放在程序的开始部分
10、下面说易做图确的是
A) 内联函数在运行时是将该函数的代码插入每个调用该函数的地方
B) 内联函数在编译时是将该函数的代码插入每个调用该函数的地方
C) 类的内联函数必须在类体内定义
D) 类的内联函数必须在类体外通过加关键字inline定义
11、假定类的构造函数为A(int aa,int bb){a=aa;b=a*bb;},则执行A x(4,5);语句后,x.a和x.b的值分别为
A) 4和5 B) 5和4
C) 4和20 D) 20和5
12、下面对继承关系描述中,正确的是___________。
A) 在公有继承中,派生类对象可访问基类中的公有成员和私有成员。
B) 在公有继承中,派生类对象只可访问基类中的公有成员。
C) 在私有继承中,派生类对象可访问基类的公有成员。
D) 在私有继承中,派生类的对象可访问基类中的保护成员。
13、下列函数模板定义不正确的是:
A) template<class Q> B) template<class Q>
Q F(Q x) Q F(Q x)
{ return Q+x; } { return x+x; }
C) template<class T> D) template<class T>
T F(T x) T F(T x)
{ return x*x; } { return x>1; }
14、关于静态数据成员,下面说法错误的是___________。
A) 使用静态数据成员,实际上是为了消除全局变量。
B) 可以使用“对象名.静态成员”或者“类名::静态成员”来访问静态数据成员。
C) 静态数据成员可以被所有成员函数引用。
D) 所有对象的静态数据成员占用同一内存单元。
15、从键盘的输入中读入一个值,并赋值给x的语句是___________。
A) cin >> x B) cin << x
C) cout >> x D) cout << x
二、判断题(每题1分、共10分)
1、char* cont name=”ABC”是声明了一个常指针name,所以不能改变该指针地址的值,但可以改变该指针所指向的字符串的值。
2、内联函数是以时间换空间的措施,所以对于调用太频繁的而且很长的函数,最好作为内联函数来处理
3、int &i=j;cout<<&pi<<endl;这两个语句中,两个“&”符号分别表示地址运算和引用。
4、虽然friend函数可以定义在类的内部,具有和类的其它成员同样的访问权 A)1 B)0
C)3 D)2
5、语句 ofstream f(“SALARY.DAT”,ios::app|ios::binary);的功能是建立流对象f,试图打开文件SALARY.DAT并与之连接,而且
A) 若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件
B) 若文件存在,将其置为空文件;若文件不存在,打开失败
C) 若文件存在,将文件写指针定位于文件首,若文件不存在,建立一个新文件
D) 若文件存在,打开失败;若文件不存在,建立一个新文件
6、___________功能是释放对象所占资源
A) 析构函数 B) 数据成员
C) 构造函数 D) 静态成员函数
7、在C++中有下列4条语句
int hot =100;
int &rad=hot;
hot+=100;
cout<< rad << endl;
执行这4句后输出为
A) 0 B) 100 C) 200 D) 300
8、在C++中,数据的封装要解决的问题是
A) 数据规范化 B) 数据自动转换
C) 避免数据丢失 D) 禁止不同模块之间的数据非法使用
9、以下说法中正确的是___________。
A) C++程序总是从第一个定义的函数开始执行的。
B) 在C++程序中,要调用的函数必须在main()函数中定义。
C) C++程序总是从main()函数开始执行的。
D) C++程序中的main()函数必须放在程序的开始部分
10、下面说易做图确的是
A) 内联函数在运行时是将该函数的代码插入每个调用该函数的地方
B) 内联函数在编译时是将该函数的代码插入每个调用该函数的地方
C) 类的内联函数必须在类体内定义
D) 类的内联函数必须在类体外通过加关键字inline定义
11、假定类的构造函数为A(int aa,int bb){a=aa;b=a*bb;},则执行A x(4,5);语句后,x.a和x.b的值分别为
A) 4和5 B) 5和4
C) 4和20 D) 20和5
12、下面对继承关系描述中,正确的是___________。
A) 在公有继承中,派生类对象可访问基类中的公有成员和私有成员。
B) 在公有继承中,派生类对象只可访问基类中的公有成员。
C) 在私有继承中,派生类对象可访问基类的公有成员。
D) 在私有继承中,派生类的对象可访问基类中的保护成员。
13、下列函数模板定义不正确的是:
A) template<class Q> B) template<class Q>
Q F(Q x) Q F(Q x)
{ return Q+x; } { return x+x; }
C) template<class T> D) template<class T>
T F(T x) T F(T x)
{ return x*x; } { return x>1; }
14、关于静态数据成员,下面说法错误的是___________。
A) 使用静态数据成员,实际上是为了消除全局变量。
B) 可以使用“对象名.静态成员”或者“类名::静态成员”来访问静态数据成员。
C) 静态数据成员可以被所有成员函数引用。
D) 所有对象的静态数据成员占用同一内存单元。
15、从键盘的输入中读入一个值,并赋值给x的语句是___________。
A) cin >> x B) cin << x
C) cout >> x D) cout << x
二、判断题(每题1分、共10分)
1、char* cont name=”ABC”是声明了一个常指针name,所以不能改变该指针地址的值,但可以改变该指针所指向的字符串的值。
2、内联函数是以时间换空间的措施,所以对于调用太频繁的而且很长的函数,最好作为内联函数来处理
3、int &i=j;cout<<&pi<<endl;这两个语句中,两个“&”符号分别表示地址运算和引用。
4、虽然friend函数可以定义在类的内部,具有和类的其它成员同样的访问权限,但该函数不是类的成员函数。
5、类的构造函数的名称可以不与类的名称相同。
6、双目运算符作为成员函数,其形参列表可以是一个参数,也可以是两个参数。
7、一个类中如果声明了一个虚函数,那么无论该类派生多少子类,只要子类中有一函数,其函数名和形参与基类的虚函数相同,那么该函数就是虚函数。
8、类的静态数据成员属于类,而不属于某个类的对象,所以静态数据成员在类对象使用之前必须对其进行初始化,但也可以通过类对象访问或更改静态数据成员的值。
9、函数模板也是一个函数,所在用法上和普通的函数用法一样。
10、C++语言提供了函数重载功能,在类的设计过程中,任何类的成员函数都可以进行重载。
三、填空题(每题1.5分,共30分)
1、根据程序注释完成下面的类
class MyClass{
private:
int *x;
public:
MyClass(int Value)
{_____________________}//用Value初始化x
//定义类的拷贝构造函数
{*this->x=*Cpyobj->.x}
//定义该类的析构函数
{
//释放数据空间
}
}
2、完成下列类模板的程序,使得程序能够正常运行
#include<iostream.h>
__________________//声明类模板的形式参数,模板的形式参数为Type
class myClass{
private:
Type value;
public:
myClass(Type v); ~myClass();
};
class Person
{};
__________________//实现构造函数
{
value=v;
}
__________________//实现析构函实
{
cout<<"Destructor.."<<endl;
}
void main(){
Person p;
____________//声明一个存放Person对象的模板类对象obj;并用p初始化
}
3、填定下程序的空白,完成两个类
#include<iostream.h>
class AbstractClass{
private:
int value;
public:
AbstractClass(int v){value=v;}
//定义纯虚函数getValue,返回int类型的数据
};
{//由AbstractClass 派生出类ConcreteClass
public:
//实现基类的纯虚函数getValue
{
return value;
}
}
4、 给下列程序填空,使程序的运行结果为:0,56,70
#include<iostream.h>
class base{
public:
int a;
base(){a=0;}
base(int x){a=x;}
void setValue(int x){a=x;}
func(){return 0;}
};
class derived:public base{
int b,c;
public:
//构造函数
{ b=y;
c=z;
}
func()
{return(a+b)*c;}
};
void main()
{
base b;
derived d(3,5);
cout<<b.func()<<",";
cout<<d.func()<<",";
//声明对象引用pb
pb.setValue(5);
cout<<d.func()<<endl;
}
5、填写下列空白,使得能正确显示出圆和长方形的面积。
class LOCATION{ public:
void show_area() ;
private:
float x,y; };
class CIRCLE:public LOCATION{
public:
{ cout<<”圆面积为:”<<3.14*radius*radius<<endl; }
private:
float radius;
};
class RECTANGLE:public LOCATION{
public:
{ cout<<”矩形面积为:”<<width*length<<endl; }
private:
float width,length;
};
void main()
{ CIRCLE circle;
RECTANGLE rectangle;
p;
p=&circle; p->show_area();
p=&rectangle; p->show_area();
}