C++程序设计练习题与答案Word下载.docx
- 文档编号:21429580
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:25
- 大小:50.67KB
C++程序设计练习题与答案Word下载.docx
《C++程序设计练习题与答案Word下载.docx》由会员分享,可在线阅读,更多相关《C++程序设计练习题与答案Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
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.
类的析构函数的作用
曰,是
()
一般成员函数
类的初始化
C)对象的初始化
删除对象创建的所有对象
3.
类的析构函数是在
)调用的。
类创建时
创建对象时
C)删除对象时
不自动调用
4.在()情况下适宜采用inline定义内联函数。
A)函数体含有循环语句B)函数体含有递归语句
C)函数代码少、频繁调用D)函数代码多、不常调用
5•如果类A被说明成类B的友元,则()
A)类A的成员即类B的成员B)类B的成员即类A的成员
C)类A的成员函数不得访问类B的成员D)类B不一定是类A的友元
6.在类中声明转换函数时不能指定()
A)参数
B)访问权限
C)操作
标识符
7.在公有继承的情况下,基类成员在派生类中的访问权限()
A)受限制
B)保持不变
C)受保护
不受保护
&
在C++类体系中,
不能被派生类继承的有
A)转换函数
B)构造函数
C)虚函数
静态成员函数
9.假定ClassN为一
个类,则执行“ClassN
x;
”语句时将自动调用该类的
A)有参构造函数
B)无参构造函数
C)拷贝构造函数
赋值构造函数
10.C++语言建立类族是通过()
A)类的嵌套
B)类的继承
抽象类
11.
重载一元运算符--为类A的成员运算符,若有类A的对象obj,则表达式--obj被C++编译器解释为()。
12•以下有四种关于类的说法,其中不正确的是(
A)构造函数可以指定参数,但不能指定函数类型
C)析构函数不可以指定参数,但可以指定函数类型
13.面向对象程序设计讲求封装性,在C++中封装是借助于()实现的。
A)结构B)数组C)类D)函数
B)析构函数不可以指定函数类型,但可以指定函数参数
D)在一个类中可以说明其它类的对象),前提为“公有派生”。
B)基类的保护成员在派生类中仍然是保护的
D)基类的私有成员在派生类中是不可访问的)。
A)一个类可以有多个构造函数
C)一个类只能有一个析构函数15.下列有关基类的叙述中不正确的是
A)基类的公有成员在派生类中仍然是公有的
C)基类的私有成员在派生类中仍然是私有的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.
long&
par=newlong[9];
cout<
Endl;
6.
CLassCN
longn;
CNpobj;
CN();
voidCN(intX);
};
四、分析程序输出题
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;
usingnamespacestd;
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"
}voidmain()
TCtarr[5];
cout<
Exitingmain"
4.
classCBase
intn;
CBase(intm=0){n=m;
virtualvoidprint(){cout<
InsideCBase"
n<
classCDrive:
publicCBase
{private:
CDrive(){n=0;
CDrive(inta,intb):
CBase(a),n(b){}
voidprint(){cout<
InsideCDrive"
voidmain()
CBaseb1,b2(99),*pb;
CDrivedd(11,22);
pb=&
b1;
pb->
print();
b2;
dd;
pb->
CBase:
print();
5.
classCTest
longnum;
CTest();
~CTest();
CTest:
CTest(){num=0;
~CTest(){cout<
调用析构函数"
}voidmain()
CTestcobj;
退出主函数"
classCN
CN(inti){n=i;
}operatorint(){returnn;
CNcobj(123);
cobj<
7.
intnum=100;
ref=num;
cout<
ref<
ref=ref+100;
num<
num=num+100;
8.
classCName
public:
CName();
~CName();
CName:
CName(){num=0;
~CName(){cout<
}voidmain(){
CNamecarr[2];
退出main"
9.分析下列程序并写出程序的运行结果。
classCBase
publicCBase{private:
}};
CBaseba,bb(100),*pb;
CDrivedd(123,456);
ba;
bb;
10.
classCT
CT(inti){n=i;
CTcObj(1234);
cObj<
五、编程题
处填代码以使其完整。
1.下列类成员函数的定义不完整,请在classTC{
floatx;
TC(int,float);
TC(TC&
TC(intn,floatf)
num=n;
t)
x=t.x;
2.根据下面的主程序,完成类说明的最小形式(不要求实现成员函数的定义)。
classBase
;
};
voidmain()
{Basebo(6);
3.一个类的头文件如下所示,程序产生对象tco,且tco.num=10,并使用Show()函数输出这个对象
的值。
//tcn.h
classTCN{
intnum;
TCN(intn){num=n;
voidShow(){cout<
num<
endl;
#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。
#include<
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
已知复数类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),圆类和正方形类都有构造函数,修改、显示数据成员值的函数,求面积函数。
(2)写出main()函数,计算半径为3.5的圆和边长为7.9的正方形的面积和(必须通过调用total函数计算)。
10.一个类的头文件cn.h的内容如下所示:
//cn.h
CN(int);
voidPrint();
CN(intN){n=N;
voidCN:
Print(){cout<
n<
(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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 练习题 答案