79面向对象程序设计-固定试卷模拟1-3.doc
《79面向对象程序设计-固定试卷模拟1-3.doc》由会员分享,可在线阅读,更多相关《79面向对象程序设计-固定试卷模拟1-3.doc(12页珍藏版)》请在冰点文库上搜索。
79面向对象程序设计_固定试卷模拟1-3
一、单选题
1.下列符号中能够作为C++标识符的是 D (2分)
A.4p B.howmany C.friend D._256
2.为了解决程序中函数调用的效率问题,可以将一些函数体代码不是很大,但被频繁调用的函数定义为B(2分)
A.重载函数 B.内联函数 C.递归函数 D.友元函数
3.抽象类至少包含一个 C (2分)
A.静态函数 B.虚析构函数 C.纯虚函数 D.友元函数
9.抽象类至少包含一个 B (2分)
A.友元函数 B.纯虚函数 C.虚函数 D.虚析构函数
4.C++中重载的运算符>>是 B (2分)
A.用于输入操作的成员函数 B.用于输入操作的非成员函数
C.用于输出操作的成员函数 D.用于输出操作的非成员函数
5.下列函数中,具有隐含this指针的是 D (2分)
classMyClass{
public:
MyClass(); //①
friendvoidfun2(); //②
staticintfun3(); //③
private:
intcount; //④
};
A.① B.② C.③ D.④
7.下列函数中,具有隐含的this指针的是 A (2分)
classMyClass{
public:
intfun1(); //①
friendintfun3(); //②
staticvoidfun2(); //③
staticintcount; //④
};
A.① B.② C.③ D.④
6.已知函数f的原型是voidf(int&x,inty);,变量v1、v2的定义是:
intv1,v2;,下列调用语句中,正确的是C(2分)
A.f(v1,&v2); B.f(v1,v2); C.f(&v1,v2); D.f(&v1,&v2);
7.下列有关继承和派生的描述中,错误的是 C (2分)
A.派生类要向基类的构造函数传递参数
B.多继承时可能产生二义性
C.派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数
D.一个基类可以有多个派生类,一个派生类可以有多个基类
8.下列语句中,会产生编译错误的是 B (2分)
inti=0,j=1;
int&r=i; //①
&r=j; //②
r=r+5; //③
int*p=&i; //④
A.① B.② C.③ D.④
9.下列语句中,会产生编译错误的是 B (2分)
A.intx=5;int&ref=x; B.constintsize;
C.intx=5;int&ref=x;x++; D.constintsize=100;
10.不论派生类以何种方式继承基类,都不能使用基类的 C (2分)
A.保护成员和私有成员 B.公有成员 C.私有成员 D.保护成员
1.当派生类从基类私有继承时,基类中的公有成员和保护成员成为派生类的 C (2分)
A.保护成员和私有成员 B.公有成员 C.私有成员 D.保护成员
11.下列关于类和对象的描述中,错误的是 B (2分)
A.类是创建对象的模板 B.一个类只能有一个对象
C.一个对象一定属于某个类 D.对象是状态和操作的封装体
11.下列关于类和对象的描述中,正确的是 C (2分)
A.一个类只能有一个对象 B.类对象可以访问类的全部成员
C.类和对象的关系是一种数据类型与变量的关系 D.对象是对类的抽象
6.下列关于类和对象的描述中,错误的是 B (2分)
A.类具有封装性 B.类对象可以访问类的全部成员
C.类是所有对象的共同的行为和不同的状态的集合体 D.对象是类的具体实例
15.下列关于类定义的描述中,错误的是 A (2分)
A.类定义中包括数据成员和成员函数的声明 B.类成员的默认访问权限是私有的
C.可以在类体内对数据成员进行初始化 D.成员函数必须在类体内声明
12.如果'-'作为友元函数重载,在使用显式函数调用时,表达式x-y可以表示为A(2分)
A.x.operator-(y) B.operator-(x,y) C.y.operator-(x) D.operator-(y,x)
13.已知函数原型如下:
intFun(intx,inty=2,intz=3),则下列函数调用错误的是 D(2分)
A.Fun(4,5,6); B.Fun(1,2); C.Fun
(1); D.Fun("1");
18.已知函数原型为inttest(int,int,int);,则下列重载形式中正确的是 B (2分)
A.chartest(int,int,int); B.doubletest(int,int,double);
C.inttest(int,int,int=0); D.floattest(int,int,int) ;
14.下列关于友元的描述中,错误的是 D (2分)
A.关键字friend用于声明友元 B.一个类的成员函数可以是另一个类的友元
C.友元函数访问对象的成员不受访问特性影响 D.友元函数也是成员函数
6.下列关于友元的描述中,错误的是 B (2分)
A.如果函数fun()是类A的友元,那么在fun()中可以访问类A的私有成员
B.如果类A是类B的友元,那么类B也是类A的友元
C.如果类A是类B的友元,那么类A的所有成员函数都是类B的友元
D.友元必须在类体内声明
15.在C++中,要实现动态联编,调用虚函数时必须使用 B (2分)
A.派生类指针 B.基类指针 C.类 D.对象
4.C++中,实现封装性需借助于 B (2分)
A.枚举 B.类 C.数组 D.函数
16.在下列函数原型中,可以作为类A构造函数的是 A (2分)
A.voidA(int); B.intA(); C.A(int)const; D.A(int);
17.下列关于常类型的描述中,正确的是 C (2分)
A.可以通过成员函数修改常对象的状态 B.通过常对象可以调用一般成员函数
C.必须使用成员初始化列表初始化常数据成员 D.常对象中的成员函数都是常成员函数
13.下列关于常类型的描述中,错误的是 B (2分)
A.不能修改常对象的状态 B.通过常对象可以调用一般成员函数
C.常成员函数中不能修改对象的状态 D.必须使用成员初始化列表初始化常数据成员
18.释放一个类的对象时,系统自动调用 B (2分)
A.构造函数 B.析构函数 C.成员函数 D.友元函数
7.下列选项中,不是类成员函数的是 D (2分)
A.构造函数 B.析构函数 C.虚函数 D.友元函数
19.当一个派生类继承自一个基类时,基类中的所有公有成员都成为派生类的 A (2分)
A.可访问成员 B.公有成员 C.私有成员 D.保护成员
20.下列描述中,作为重载函数调用时选择依据的是 C (2分)
A.参数名字 B.函数体 C.函数名字 D.返回类型
1.下列运算符中,可以重载的是 D (2分)
A.?
:
B.. C.:
:
D.++
12.下列运算符中,不能被重载的是 C (2分)
A.* B.!
= C.:
:
D.++
2.已知show()函数是一个类的常成员函数,无返回值,下列表示中正确的是 C (2分)
A.constvoidshow() B.voidshow()const
C.voidconstshow() D.voidshow(const)
10.下列关于静态成员的描述中,正确的是 A (2分)
A.静态成员不属于对象,是类的共享成员 B.静态数据成员要由构造函数初始化
C.静态成员函数只能通过类激活 D.非静态成员函数不能操作静态数据成员
12.下列对常类型的定义中,错误的是 (2分)
A.MyClassconstobj; B.charconst*ptr; C.constint&ref=10;D.voidfun()const;
16.有如下类定义,obj是类D的对象,下列语句中不违反访问控制权限的是 A (2分)
classB{
public:
voidfun1();
private:
voidfun2();
protected:
voidfun3();
};
classD:
publicB{
protected:
voidfun4();
};
A.obj.fun1(); B.obj.fun2(); C.obj.fun3(); D.obj.fun4();
5.若有函数调用fun(x+y,3,min(a,b)),则fun的实参个数为 A (2分)
A.3 B.4 C.5 D.6
17.下列对析构函数的描述中,正确的是 C (2分)
A.系统不能提供默认的析构函数 B.析构函数必须由用户定义
C.析构函数没有参数 D.析构函数可以设置默认参数
20.C++中,能够被派生类继承的函数是 D (2分)
A.析构函数 B.友元函数 C.构造函数 D.成员函数
19.有如下声明:
MyClass*constptr;,下列描述中,正确的是 B (2分)
A.ptr是一个类对象 B.ptr是一个常量指针
C.ptr指向一个常量 D.ptr是一个指向常量的常指针
13.下列描述中,不是面向对象系统包含的要素的是 D (2分)
A.对象 B.类 C.继承 D.函数
14.下列选项中,istream类对象是 A (2分)
A.cin B.cout C.cerr D.clog
15.可以解决程序中代码量不大,但却被频繁调用的函数的调用效率问题的是 D (2分)
A.友元函数 B.重载函数 C.虚函数 D.内联函数
16.下列格式控制符中,可以设置输出项域宽的是 A (2分)
A.setw B.setfill C.setprecision D.endl
20.在下列函数原型中,可以作为类A构造函数的是 D (2分)
A.voidA(int); B.intA(); C.A(int)const; D.A(int);
8.下列程序段中,横线处应填入的内容是 D (2分)
classMyClass{
public:
MyClass(){count++;}
private:
staticintcount;
};
a count=10;
A.int B.staticint C.staticMyClass:
:
int D.intMyClass:
:
二、填空题
1.类成员的访问权限分为__公有继承___、_私有继承__和___保护继承__三类。
(2分)
1.类的三种继承方式是___公有继承(public)__、__保护继承(protect)_和__私有继承(private)_。
(2分)
2.下列语句序列执行后输出10,请将划线处的语句补充完整。
classMyClass{
public:
MyClass(intx):
val(x){}
voidPrint();
private :
intval ;
};
void MyClass:
:
Print(){cout< intmain(){
MyClassobj(10);
obj.Print();
return0;
}
3.下列语句序列执行后输出10,请将划线处的语句补充完整。
(2分)
classMyClass{
public:
MyClass(intx):
___val(x)_____{}
voidPrint(){cout< private:
intval;
};
intmain(){
MyClassobj(10);
obj.Print();
return0;
}
2.下列语句序列执行后输出10,请将划线处的语句补充完整。
(2分)
classMyClass{
public:
MyClass(intx):
val(x){}
voidPrint(){cout< private :
intval ;
};
intmain(){
MyClassobj(10);
obj Print();
return0;
}
3.有两个类M和C,其中类C定义如下:
classC{public:
Mm;};。
若建立类C的对象object,则对象m和对象object中后被初始化的是对象__object___________。
(2分)
4.下列语句序列执行后输出Hello,请将划线处的语句补充完整。
(2分)
classMyClass{
public:
voidPrint()const{cout<<"Hello";}
};
intmain(){
MyClass*p=newMyClass();
p-> Print();
return0;
}
5.请在划线处填写正确内容,使类MyClass的复制构造函数的声明完整。
(2分)
classMyClass{
public:
MyClass(const_____MyClass&___obj);
};
4.请在划线处填写正确内容,使类Test的复制构造函数的声明完整。
(2分)
classTest{
public:
Test(const___Test&____obj);
};
6.请在划线处写出MyClass类的析构函数声明。
(2分)
classMyClass{
public:
_____~MyClass();______
};
4.为了解决多继承产生的____二义性__问题,在C++中引入了虚基类。
(2分)
5.派生新类的类称为_____父类______,而派生出的新类称____子类________。
(2分)
6.运算符函数的函数名是由运算符前加关键字____operator____构成的。
(2分)
9.下列语句序列的输出结果是__100_____。
(2分)
classMyClass{
public:
MyClass(intx){cout< ~MyClass(){cout<<0;}
};
intmain(){
MyClassobj1
(1),obj2(obj1),&ptr=obj1;
return0;
}
2.下列语句序列的输出结果是___120000___。
(2分)
classMyClass{
public:
MyClass(intx=0){cout< ~MyClass(){cout<<0;}
};
intmain(){
MyClassarr[3]={MyClass
(1),MyClass
(2)};
return0;
}
10.所有在类内部定义的成员函数都是 inline函数。
(2分)
1.在C++中,___函数重载___是指同一个函数名可以对应多个函数的实现。
(2分)
7.下列语句序列执行后输出Hello,请将划线处的语句补充完整。
(2分)
classMyClass{
public:
voidPrint()const{cout<<"Hello";}
};
intmain(){
MyClass*p=newMyClass();
p-> Print();
return0;
}
8.运算符函数的函数名是由运算符前加关键字___operator_构成的。
(2分)
9.请在划线处填写构造函数的声明,使得语句Pointp1;创建的p1对象为原点。
(2分)
classPoint{
public:
____Pointp1(intx=0,inty=0);________
private:
intx,y;
};
11.有两个类M和C,其中类C定义如下:
classC{public:
Mm;};。
若建立类C的对象object,则对象m和对象object中后被初始化的是对象__object___。
(2分)
5.有两个类M和C,其中类C定义如下:
classC{public:
Mm;};。
若建立类C的对象object,则对象m和对象object中先被初始化的是对象_____m________。
(2分)
3.已知一个函数的原型是doublefun(doublex);,若要以4.25为实参调用该函数,应使用表达式____fun(4.25)____。
8.设置虚基类的目的是为了解决多继承产生的__菱形继承___问题。
(2分)
9.将一个函数声明为一个类的友元函数必须使用关键字__friend_________。
(2分)
10.派生新类的类称为_____基类__,而派生出的新类称___派生类,又称为子类__________。
(2分)
三、改错题
下列程序中有三个错误,请改正错误(注意不要修改主函数),使程序的输出结果为:
Thepointis(0,1)
Thepointis(3,5)
源文件清单如下:
Line1:
#include
Line2:
classPoint{
Line3:
public:
Line4:
Point(intxx=0,intyy):
x(xx),y(yy){}
Line5:
voidMove(intxOff,intyOff)const{
Line6:
x+=xOff;y+=yOff;
Line7:
}
Line8:
voidPrint()const
Line9:
{cout<<"Thepointis("<Line10:
private:
Line11:
intx,y=0;
Line12:
};
Line13:
intmain(){
Line14:
Pointp1,p2(2,1);
Line15:
p1.Print();
Line16:
p2.Move(1,4);
Line17:
p2.Print();
Line18:
return0;
Line19:
}
答案:
Line4:
Point(intxx=0,intyy=1):
x(xx),y(yy){}
Line5:
voidMove(intxOff,intyOff){
Line11:
intx,y;
下列程序中有三个错误,请改正错误(注意不要修改主函数),使程序的输出结果为:
Kellyis10yearsold.
Patrickis35yearsold.
源文件清单如下:
Line1:
#include
Line2:
classPerson{
Line3:
public:
Line4:
Person(char*str,int_age=10):
age(_age)
Line5:
{name=newchar[strlen(str+1)];strcpy(name,str);}
Line6:
void~Person(){delete[]name;}
Line7:
voidSetAge(intnum)const{age=num;}
Line8:
voidPrint()const
Line9:
{cout<Line10:
private:
Line11:
char*name;
Line12:
intage=0;
Line13:
};
Line14:
intmain(){
Line15:
Personp1("Kelly"),p2("Patrick",25);
Line16:
p1.Pr