C++程序设计练习题与答案1文档格式.docx
- 文档编号:17728504
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:27
- 大小:120.49KB
C++程序设计练习题与答案1文档格式.docx
《C++程序设计练习题与答案1文档格式.docx》由会员分享,可在线阅读,更多相关《C++程序设计练习题与答案1文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
由于抽象类的特殊性,我们
可以说明抽象类的(),但不能说明抽象类的()。
29.说明函数类型为“double”、函数名为“virfun”且无参数的纯虚函数的表达形式为()。
30.说明静态成员要使用关键字()。
31.当函数调用在前定义在后时,必须先对函数进行()说明。
32.类名为“ClassN”的类的拷贝构造函数的函数原型说明为()。
33.抽象类是包含()的类,必须注意:
不能说明抽象类的(),但可说明抽象类的()。
34.流插入运算符<
<
只能重载为友元函数,重载流插入运算符<
的函数名为()。
35.要防止在该成员函数中改变数据成员的值,就要在类的成员函数名之后、函数体之前加上关键字
()。
36.类和对象的关系可表述为:
类是对象的(),而对象则是类的()。
37•在C++中,三种继承方式的说明符号为()、()和(),如果不加说明,则默认的继
承方式为()。
38•如果只想保留公共基类的一个复制,就必须使用关键字()把这个公共基类声明为虚基类。
39.若要把voidmyfun()定义为类A的友元函数,则应在类A的声明中加入语句()。
40.类的静态成员分为()和()。
41•运算符重载要求保持其原来的操作数个数、
42.通过关键字()可以声明模板,通过关键字
43.请列出C++中两种用户自定义的数据类型:
44.构造函数的作用是()。
45.后置自增运算符“++”重载为类的成员函数
()、()和语法结构。
()指定函数模板的类型参数。
()、()。
(设类名为ClassName)的形式为()。
二、单选题
1.继承机制的作用是()
A)信息隐藏
B)
数据封装
C)定义新类
D)数据抽象
2.类的析构函数的作用
H.是
()
A)一般成员函数
类的初始化
C)对象的初始化
D)删除对象创建的所有对象
3.类的析构函数是在
(
)调用的。
A)类创建时
创建对象时
C)删除对象时
D)不自动调用
4.在()情况下适宜采用inline定义内联函数。
A)函数体含有循环语句
C)函数代码少、频繁调用
5.如果类A被说明成类B的友元,则(
A)obj.operator--()B)operator--(obj)C)obj:
:
operator--()D)obj:
operator--()
12.以下有四种关于类的说法,其中不正确的是()。
A)构造函数可以指定参数,但不能指定函数类型B)一个类可以有多个构造函数
C)析构函数不可以指定参数,但可以指定函数类型D)一个类只能有一个析构函数
13.面向对象程序设计讲求封装性,在C++中封装是借助于()实现的。
A)结构B)数组C)类D)函数
14.下面有四种关于类的说法,其中不正确的是()。
A)一个类可以有多个构造函数B)析构函数不可以指定函数类型,但可以指定函数参数
C)一个类只能有一个析构函数D)在一个类中可以说明其它类的对象
15.下列有关基类的叙述中不正确的是(),前提为"
公有派生”。
A)基类的公有成员在派生类中仍然是公有的B)基类的保护成员在派生类中仍然是保护的
C)基类的私有成员在派生类中仍然是私有的D)基类的私有成员在派生类中是不可访问的
16•以下有四种关于友元的描述,其中错误的是()。
A)类A的友元类B的成员函数都是类A的友元函数B)友元函数可以访问该类的私有数据成员C)类与类之间的友元关系可以继承D)友元可以提高程序的运行效率
17.C++的封装性是借助于()实现的。
A)函数B)数组C)结构D)类
18•要将--重载为类ClassN的后置友元运算符,那么,要在类中添加的原型说明为()。
A)friendClassNoperator--(ClassN&
int);
B)friendClassNoperator--(ClassN&
)
D)当基类的指针指向派生类对象时,通过该指针可以直接访问派生类中的成员20•以下关于继承成员的访问属性的叙述中,不正确的是()。
A)基类的保护成员在私有派生类中是私有的B)对基类成员的访问必须没有二义性
C)基类的保护成员在保护派生类中是保护的D)基类的保护成员在派生类中是保护的
三、程序改错题(改正下列类中的错误)
1.
classClassN
{
private:
intnmember;
ClassNpmember;
public:
ClassN();
intClassN(intx);
}
2.
voidmain()
charc[]=newchar[20];
deletec;
3.
classMyClass{
intn=1;
MyClasspO;
MyClass(inta=0);
void~MyClass(inta);
#include<
iostream>
usingnamespacestd;
voidmain()
int&
par=newint[6];
deletepar;
cout>
>
"
主函数End!
<
endl;
5.
usingnamespacestd;
long&
par=newlong[9];
deletepar;
cout<
Endl;
6.
CLassCN
longn;
CNpobj;
CN();
voidCN(intX);
};
四、分析程序输出题
1.
classA
A(){cout<
"
constructingA"
endl;
}
~A(){cout<
destructingA"
classB:
publicA
B(){cout<
constructingB"
~B(){cout<
destructingB"
classC:
publicB
C(){cout<
constructingC"
~C(){cout<
destructingC"
}};
{Cc1;
voidfun(int&
a,int&
b)
intp;
p=a;
a=b;
b=p;
voidexchange(int&
a,int&
b,int&
c)
if(a<
b)fun(a,b);
c)fun(a,c);
if(b<
c)fun(b,c);
inta=12,b=89,c=56;
exchange(a,b,c);
cout<
a="
a<
b="
b<
c="
c<
iostream.h>
classTC{
intnum;
TC();
intTEST(){returnnum;
~TC();
TC:
TC(){num=0;
~TC(){cout<
Destructorisactive"
TCtarr[5];
cout<
Exitingmain"
endl;
4.
classCBase
intn;
CBase(intm=0){n=m;
virtualvoidprint(){cout<
InsideCBase"
n<
endl;
classCDrive:
publicCBase
CDrive(){n=0;
CDrive(inta,intb):
CBase(a),n(b){}
voidprint(){cout<
InsideCDrive"
CBaseb1,b2(99),*pb;
CDrivedd(11,22);
pb=&
b1;
pb->
print();
b2;
dd;
pb->
CBase:
classCTest
longnum;
CTest();
~CTest();
CTest:
CTest(){num=0;
~CTest(){cout<
调用析构函数"
CTestcobj;
退出主函数"
classCN
CN(inti){n=i;
operatorint(){returnn;
CNcobj(123);
cobj<
7.
intnum=100;
ref=num;
ref<
ref=ref+100;
num<
num=num+100;
8.
classCName
longnum;
CName();
~CName();
CName:
CName(){num=0;
~CName(){cout<
CNamecarr[2];
退出main"
9•分析下列程序并写出程序的运行结果。
CBaseba,bb(100),*pb;
CDrivedd(123,456);
ba;
bb;
10.
classCT
CT(inti){n=i;
CTcObj(1234);
cObj<
五、编程题
1.下列类成员函数的定义不完整,请在填代码以使其完整。
floatx;
TC(int,float);
TC(TC&
TC(intn,floatf)
num=n;
TC(TC&
t)
x=t.x;
2.根据下面的主程序,完成类说明的最小形式(不要求实现成员函数的定义)。
classBase
;
{Basebo(6);
3.一个类的头文件如下所示,程序产生对象tco,且tco.num=10,并使用Show()函数输出这个对象
的值。
//tcn.h
classTCN{
intnum;
TCN(intn){num=n;
voidShow(){cout<
num<
#include<
#include"
tcn.h"
4.完成下面类中的成员函数的定义(在处填写适当的内容)。
classCTN
intmen;
floatmef;
CTN(int,float);
CTN(CTN&
CTN:
CTN()
{men=a;
=b;
CTN(—rObj)
{men=;
mef=.mef;
5•在—处填写适当内容,以便完成下列类成员函数的定义。
intmn;
floatmf;
CN(int=0,float=0);
CN(CN&
CN:
CN()
{this->
mn=mn;
=mf;
CN(rObj)
mn=;
mf=.f;
6•填上合适的字句,使程序的最终结果为200。
classCNumber
intval;
CNumber(inti){val=i;
int();
CNumber:
operatorint(){}
classnum:
publicCNumber{
num(inti):
CNumber(i){}
numn(100);
inti=n;
i+n<
endl;
7•下面是一个类的测试程序,设计出能使用如下测试程序的类:
Testto;
to.Init(300,200);
to.Print();
输出结果:
300-200=100
8.已知复数类Complex的声明如下:
classComplex
Complex();
Complex(double);
Complex(double,double);
friendComplexoperator+(Complex&
Complex&
friendostream&
operator<
(ostream&
friendistream&
operator>
(istream&
doublereal,imag;
要求:
(1)写出该类的所有构造函数的类外定义代码。
⑵写出对运算符“+”、“<
”、“>
”进行重载的运算符重载函数的定义。
9.
个通用的用
下列AbstractC类是一个表示形状的抽象类,area()为求图形面积的函数,total()则是以求不同形状的图形面积总和的函数。
classAbstractC
virtualdoublearea()=0;
};
doubletotal(AbstractC*sa[],intn)
doubles=0.0;
for(inti=0;
i<
n;
i++)s+=sa[i]->
area();
returns;
(1)从AbstractC类派生圆类(Circle)、正方形类(Square),圆类新增数据成员半径(r),正方形类新增数据成员边长(a),圆类和正方形类都有构造函数,修改、显示数据成员值的函数,求面积函数。
⑵写出main()函数,计算半径为3.5的圆和边长为7.9的正方形的面积和(必须通过调用total函数计算)。
10.一个类的头文件cn.h的内容如下所示:
//cn.h
CN(int);
voidPrint();
CN(intN){n=N;
voidCN:
Print(){cout<
*<
(1)编写一个主程序,产生对象Obj,且使Obj对象中的n成员的值为100,并使用Print()函数输出这个对象中私有成员n的值。
(2)在主程序中,创建一动态对象,使该动态对象的数据成员值为2015,并使用指针pObj指向该动
态对象,然后输出该动态对象的数据成员的值。
11.一个类的头文件CT.h的内容如下所示:
//CT.h
intm;
CT(int);
voidShowM();
CT:
CT(intn){m=n;
voidCT:
ShowM(){cout<
m<
(1)编写一个主程序,产生对象mObj,且使mObj对象中的m成员的值为11,并使用ShowM()函数
输出这个对象中私有成员m的值。
(2)在主程序中,创建一动态对象,使该动态对象的数据成员值为126,并使用指针pObj指向该动态
对象,然后输出该动态对象的数据成员的值。
12•使用运行时多态性编程实现三角形、矩形和圆的总面积的统计并输出结果。
三角形、矩形和圆类的类名分别为T、R和C。
T类必须以S类作基类,R类必须从T类派生,C类必须以S作基类。
Shape类的定义如下:
classS
intx,y;
S(inta=0,intb=0):
x(a),y(b){}
virtualintArea()=0;
不必建立工程,将所有代码都放在一个源文件中。
在主函数中,必须调用下列Sum函数来统计各类图
形面积的总和。
intSum(S*s[],intn
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 练习题 答案