奥鹏东师网考考前练习题及答案 C++程序设计.docx
《奥鹏东师网考考前练习题及答案 C++程序设计.docx》由会员分享,可在线阅读,更多相关《奥鹏东师网考考前练习题及答案 C++程序设计.docx(44页珍藏版)》请在冰豆网上搜索。
奥鹏东师网考考前练习题及答案C++程序设计
C++程序设计练习题一
一、单项选择题
1.C++是一种()的程序设计语言。
A.面向对象B.即可面向过程,又可面向对象
C.面向过程D.面向系统
2.在下面有关析构函数特征的描述中,正确的是()。
A.一个类中可以定义多个析构函数B.析构函数名与类名完全相同
C.析构函数不能指定返回类型D.析构函数可以有一个或多个参数
3.下面对于友元函数描述正确的是()。
A.友元函数的实现必须在类的内部定义
B.友元函数是类的成员函数
C.友元函数破坏了类的封装性和隐藏性
D.友元函数不能访问类的私有成员
4.下面描述中,表达错误的是()。
A.公有继承时基类中的public成员在派生类中仍是public的
B.公有继承时基类中的private成员在派生类中仍是private的
C.公有继承时基类中的protected成员在派生类中仍是protected的
D.保护继承时基类中的public成员在派生类中是private的
5.所谓多态性是指()
A.不同的对象调用不同名称的函数B.不同的对象调用相同名称的函数
C.一个对象调用不同名称的函数D.一个对象调用不同名称的对象
6.重载赋值操作符时,应声明为()函数。
A.友元B.虚C.成员D.多态
7.下列对模板的声明错误的是()。
A.templateB.template
C.templateD.template
8.下列类中()不是输入流类istream的派生类。
A.ifstreamB.istrstreamC.iostreamD.ofstream
9.()不是构造函数的特征。
A.构造函数的函数名与类名相同B构造函数可以重载
C.构造函数可以设置缺省参数D构造函数必须指定类型说明
10.下列语句中错误的是()。
A.int*p=newint(10);B.int*p=newint[10];
C.int*p=newint;D.int*p=newint[40](0)
11.下列关于虚基类的描述,错误的是()
A.设置虚基类的目的是为了消除二义性
B.虚基类的构造函数在非虚基类之后调用
C.若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用
D.若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数
12.已知:
print()函数是一个类的常成员函数,它无返回值,下列表示中,()是正确的。
A.voidprint()const;B.constvoidprint();
C.voidconstprint();D.voidprint(const);
13.在下面有关静态成员函数的描述中,正确的是()。
A.在静态成员函数中可以使用this指针
B.在建立对象前,就可以为静态数据成员赋值
C.静态成员函数在类外定义时,要用static前缀
D.静态成员函数只能在类外定义
14.在下列关键字中,用于说明类中公有成员的是()。
A.publicB.privateC.protectedD.friend
15.以下有关继承的叙述正确的是()。
A.构造函数和析构函数都能被继承
B.派生类是基类的组合
C.派生类对象除了能访问自己的成员以外,不能访问基类中的所有成员
D.基类的公有成员一定能被派生类的对象访问
16.将客观实体的特征与行为作为不可分割的整体进行程序设计的方法称为()程序设计。
A.面向应用B.面向过程C.面向对象D.面向系统
17.构造函数是在()时被执行的。
A.程序编译B.创建对象C.创建类D.程序装入内存
18.静态成员函数仅能访问()。
A.静态的数据成员B.非静态的成员函数C.非静态的数据成员D.以上都不对
19.要将类A说明是类B的虚基类,正确的描述是()。
A.classvirtualB:
publicAB.classB:
virtualpublicA
C.virtualclassB:
publicAD.classB:
publicAvirtual
20.以下基类中的成员函数中表示纯虚函数的是()。
A.virtualvoidvf(int);B.virtualvoidvf(int)=0;
C.virtualvoidvf(int=0);D.virtualvoidvf(int){};
21.如有以下函数模板:
Tmin(Ta,Tb)
{returna
a:
b;}
则函数调用min(100,’b’);返回的结果是()。
A.100B.98C.bD.d
22.下列格式控制符中不是定义于iostream.h中的是()。
A.endlB.hexC.flushD.setw
23.在类的定义中,用于为对象分配内存空间、对类的数据成员进行初始化并执行其他内部管理操作的函数是()。
A.友元函数 B.虚函数 C.构造函数D.析构函数
24.下面的类型声明中正确的是()。
A.int&a[4];B.int&*p;C.int&&q;D.intI,*pp=&I;
25.下面对类的构造函数的定义正确的是()。
A.voidX:
:
X(参数)B.X:
:
X(参数)
C.intX:
:
X(参数)D.floatX:
:
X(参数)
26.当一个函数无返回值时,函数的类型应定义为()。
A.voidB.任意C.intD.无
27.已知类A是类B的友元,类B是类C的友元,则()
A.类A一定是类C的友元
B.类C一定是类A的友元
C.类C的成员函数可以访问类B的对象的任何成员
D.类A的成员函数可以访问类B的对象的任何成员
28.执行下面的程序将输出()
A.XYB.YXC.XD.Y
#include
classBASE{
charc;
public:
BASE(charn):
c(n){}
~BASE(){cout< };
classDERIVED:
publicBASE{
charc;
public:
DERIVED(charn):
BASE(n+1),c(n){}
~DERIVED(){cout< };
intmain()
{ DERIVED(‘X’);
return0;
}
29.能用友元函数重载的运算符是()。
A.+B.=C.[]D.->
30.()是析构函数的特征。
.
A.一个类中只能定义一个析构函数B.析构函数在对象创建时调用
C.析构函数的定义只能在类体内D.析构函数可以有一个或多个参数
31.C++利用()实现面向对象程序设计的封装性。
A.构造数据类型——类B.构造数据类型——枚举
C.类的派生机制D.函数重载与运算符重载
32.在声明类时,下面的说法正确的是()。
A.可以在类的声明中给数据成员赋初值
B.数据成员的数据类型可以是register
C.private、public、protected可以按任意顺序出现
D.没有用private、public、protected定义的数据成员是公有成员
33.假设已经有定义constchar*constname="chen";下面的语句中正确的是()。
A.name[3]='a';B.name="lin";
C.name=newchar[5];D.cout<34.要将类A说明是类B的虚基类,正确的描述是( )
A.classvirtualB:
publicAB.classB:
virtualpublicA
C.virtualclassB:
publicAD.classB:
publicAvirtual
35.下列关于纯虚函数的描述中,正确的是()。
A.纯虚函数是一种特殊的虚函数,它是个空函数
B.具有纯虚函数的类称为虚基类
C.一个基类中说明有纯虚函数,其派生类一定要实现该纯虚函数
D.具有纯虚函数的类不能创建类对象
36.能用友元函数重载的运算符是()。
A.+B.=C.[]D.->
37.下面函数模板定义中不正确的是()
A.templateB.template
TF(Tx){returnT+x;}TF(Tx){returnx+x;}
C.templateD.template
TF(Tx){returnx*x;}TF(Tx){returnx>1;}
二、判断题
1.静态的成员函数没有隐含的this指针,所以它们只能访问静态的数据成员。
()
2.通过类对象可以访问类中所有的成员。
()
3.构造函数是可以被派生类继承的。
()
4.构造函数和析构函数都可以是虚函数。
()
5.只有类中全部函数都为纯虚函数时,该类才被称为抽象类。
()
6.对于同一个运算符来说,重载的运算符的优先级比未重载的运算符的优先级高。
()
7.一个类的友元一定是另一个类的成员函数。
()
8..当一个函数无返回值时,函数的返回类型应为void。
()
9.9.new和delete运算符可以被重载。
()
10.3.在默认参数函数的原型中,所有取缺省值的参数都必须出现在不取缺省值的参数的左边。
()
11.4.数组中的每个元素它们的类型可以是不同的。
()
12.5.在C++中,用数组、指针、和引用作为函数参数,都能够将参数值带回。
()
13.6.类中可以包含各种数据类型的数据成员,但不能有其他类对象。
()
14.7.一个类的友元一定是另一个类的成员函数。
()
15.C++编译器不能够区分重载的无参函数和缺省参数的函数。
()
16.指针和引用都是变量,都占有单独的内存空间。
()
17.一个类可以定义多个构造函数和多个析构函数。
()
三、简答题
1.什么是封装性?
请举例说明。
2.什么是函数重载和运算符重载?
为什么要使用重载?
3.拷贝构造函数在哪几种情况下被调用?
4.什么是类?
什么是对象?
对象与类的关系是什么?
5..什么是类?
什么是对象?
对象与类的关系是什么?
6..什么是多态性?
请举例说明。
7..虚函数是否一定要有virtual关键字?
什么叫纯虚函数和抽象类?
多态调用需要满足怎样的条件?
8..简述结构化的程序设计、面向对象的程序设计的基本思想。
9.什么是消息?
消息具有什么性质?
10.若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能会产生什么问题?
四、程序分析题
1.指出下面程序中的1处错误,并说明原因。
#include
classPoint
{
intX,Y;
public:
Point(){X=0;Y=0;}
Point(intx=0,inty=0){X=x;Y=y;}
voiddisplay(){cout<};
voidmain()
{
Pointp;
p.display();
}
答:
2.指出下面程序中的1处错误,并说明原因。
#include
classCTest{
public:
CTest(){x=20;}
private:
intx;
friendvoidfriend_f(CTestfri);
};
voidfriend_f(CTestfri){fri.x=55;}
voidmain()
{
CTestc1,c2;
c1.friend_f(c2);
}
答:
3.写出下面程序的运行结果。
#include
classTest
{
private:
intnum;
public:
Test(intn=0){num=n;num++;}
~Test(){cout<<”Destructorisactive,number=”<};
voidmain()
{
Testx[2];
cout<<”Exitingmain”<}
答:
4.写出下面程序的运行结果。
#include
classTest{
private:
staticintval;
inta;
public:
staticintfunc();
staticvoidsfunc(Test&r);
};
intTest:
:
val=20;
intTest:
:
func()
{val--;returnval;}
voidTest:
:
sfunc(Test&r)
{r.a=25;cout<<"Result3="<voidmain()
{
cout<<"Resultl="<:
func()<Testa;
cout<<"Result2="<Test:
:
sfunc(a);
}
答:
5.指出下列程序中的1处错误,并说明为什么。
classLocation{
intX,Y=20;
protected:
intzeroX,zeroY;
intSetZero(intZeroX,intZeroY);
private:
intlength,height;
public:
voidinit(intinitX,intinitY);
intGetX();
intGetY();
};
答:
6.指出下列程序中的1处错误,并说明为什么。
#include
#include
classCTest{
public:
constinty2;
CTest(inti1,inti2,inti3):
y1(i1),y2(i2)
{x=i3;}
intshow()const{cout<<"y1="<//…
private:
intx;
constinty1;
};
voidmain()
{
CTestc(1,2,3);
c.show();
c.y2=-2;
c.show();
}
答:
7.写出下面程序的输出结果。
#include
classB
{intb;
public:
B(inti){b=i;}
virtualvoidvirfun(){cout<<"B:
:
b:
"<
};
classD:
publicB
{public:
D(inti,intj):
B(i){d=j;}
voidvirfun(){B:
:
virfun();cout<<"D:
:
d:
"<private:
intd;
};
voidfun(B*objp){objp->virfun();}
voidmain(){D*pd=newD(3,5);fun(pd);}
答:
8.写出下面程序的运行结果。
#include
classexample
{
public:
example(intn)
{
i=n;
cout<<"Constructing\n";
}
~example()
{cout<<"Destructing\n";}
intget_i()
{returni;}
private:
inti;
};
intsqr_it(exampleo)
{returno.get_i()*o.get_i();}
main()
{
examplex(10);
cout<cout<return0;
}
答:
9.指出下列程序中的错误,并说明原因。
classA{
inta,b;
public:
A(intaa=0,intbb)
{
a=aa;b=bb;
}
};
答:
10.指出下面程序中的错误,并说明原因。
#include
classCTest{
public:
CTest(){x=20;}
voiduse_this(int);
private:
intx;
};
voidCTest:
:
use_this(intx)
{
this.x=x;
cout<<"x="<}
voidmain()
{
CTesty;
y.use_this(10);
}
答:
五、完成程序题
1.请在横线处填上适当的字句,以使程序完整。
#include
#include″math.h″
classPoint
{
private:
doubleX,Y;
①__________Line;
public:
Point(doublex=0,doubley=0)
{X=x;Y=y;}
Point(Point&p)
{X=p.X;Y=p.Y;}
};
classLine
{
private:
Pointp1,p2;
public:
Line(Point&xp1,Point&xp2):
②__________{}
doubleGetLength();
};
doubleLine:
:
GetLength()
{
doubledx=p2.X-p1.X;
doubledy=p2.Y-p1.Y;
returnsqrt(dx*dx+dy*dy);
}
voidmain()
{
Pointp1,p2(3,4);
LineL1(p1,p2);
cout<}
2.设计一个立方体类Box,使它能计算并输出立方体的体积和表面积。
要求:
Box类包含三个私有数据成员:
a(立方体边长)、volume(体积)和area(表面积);
Box类包含有构造函数及seta()(设置立方体边长)、getvolume()(计算体积)、getarea()(计算表面积)和disp()(输出体积和表面积)。
3.请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为5。
#include
classInteger
{
intx;
public:
Integer(inta=0){x=a;}
voiddisplay(){cout< ① ;
};
IntegerMax(Integera,Integerb)
{
if(② )
returna;
returnb;
}
voidmain()
{
Integera(3),b(5),c;
c=Max(a,b);
c.display();
}
4.设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,以实现求两个三角形对象的面积之和。
5.请在下面程序的横线处填上适当内容,以使程序完整。
#include
#include
classPerson
{
charname[20];
public:
Person(char*s){strcpy(name,s);}
voiddisplay(){cout<<”Name:
”<};
classStudent:
publicPerson
{
intgrade;
public:
Student(char*s,intg):
① {grade=g;}
voiddisplay()
{
② ;
cout<<”Grade:
”<}
};
voidmain()
{
Students(“周山”,90);
s.display();
}
C++程序设计练习题二
一、单项选择题
1.下列各种高级语言中,不是面向对象的程序设计语言的是()。
A.C++B.JavaC.VBD.C
2.下列说法中正确的是()。
A.类定义中只能说明函数成员的函数头,不能定义函数体
B.类中的函数成员可以在类体中定义,也可以在类体之外定义
C.类中的函数成员在类体之外定义时必须要与类声明在同一文件中
D.在类体之外定义的函数成员不能操作该类的私有数据成员
3.静态数据成员的初始化必须在()。
A.类内B.类外C.构造函数内D.静态成员函数内
4.使用派生类的主要原因是()。
A.提高代码的可重用性B.提高程序的运行效率
C.加强类的封装性D.实现数据的隐藏
5.编译时的多态性通过使用()实现。
A.构造函数B.虚函数C.重载函数D.析构函数
6.下列关于运算符重载的描述中,正确的是()。
A.可以改变运算符的目数B.可以改变运算符的优先级
C.可以改变运算符的结合性D.可以改变运算符的功能
7.如有以下模板类定义:
Template<