C++程序设计练习题与答案完整版本Word格式文档下载.docx
- 文档编号:22632406
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:33
- 大小:24.02KB
C++程序设计练习题与答案完整版本Word格式文档下载.docx
《C++程序设计练习题与答案完整版本Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C++程序设计练习题与答案完整版本Word格式文档下载.docx(33页珍藏版)》请在冰豆网上搜索。
28.包含纯虚函数的类称为抽象类,这种类只能用作()来派生新类。
由于抽象类的特殊性,我们可以说明抽象类的(),但不能说明抽象类的()。
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.类的析构函数的作用是()
A)一般成员函数B)类的初始化C)对象的初始化D)删除对象创建的所有对象
3.类的析构函数是在()调用的。
A)类创建时B)创建对象时C)删除对象时D)不自动调用
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)操作D)标识符
7.在公有继承的情况下,基类成员在派生类中的访问权限()
A)受限制B)保持不变C)受保护D)不受保护
8.在C++类体系中,不能被派生类继承的有()
A)转换函数B)构造函数C)虚函数D)静态成员函数
9.假定ClassN为一个类,则执行“ClassNx;
”语句时将自动调用该类的()
A)有参构造函数B)无参构造函数C)拷贝构造函数D)赋值构造函数
10.C++语言建立类族是通过()
A)类的嵌套B)类的继承C)虚函数D)抽象类
11.重载一元运算符--为类A的成员运算符,若有类A的对象obj,则表达式--obj被C++编译器解释为()。
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&
C)friendClassNoperator--(int);
D)friendClassNoperator--();
19.在公有派生时,下列描述中不正确的是()。
A)派生类的对象可以赋给基类的对象B)派生类对象的地址可以赋给指向基类的指针
C)派生类的对象可以初始化基类的引用
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);
};
4.
#include<
iostream>
usingnamespacestd;
int&
par=newint[6];
deletepar;
cout>
>
"
主函数End!
"
<
endl;
5.
long&
par=newlong[9];
deletepar;
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;
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];
Exitingmain"
classCBase
intn;
CBase(intm=0){n=m;
virtualvoidprint(){cout<
InsideCBase"
n<
classCDrive:
publicCBase
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;
CBase:
print();
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
CName();
~CName();
CName:
CName(){num=0;
~CName(){cout<
CNamecarr[2];
退出main"
9.分析下列程序并写出程序的运行结果。
CDrive(){n=0;
CBase(a),n(b){}
CBaseba,bb(100),*pb;
CDrivedd(123,456);
ba;
bb;
10.
classCT
CT(inti){n=i;
operatorint(){returnn;
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{
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<
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)写出该类的所有构造函数的类外定义代码。
(2)写出对运算符“+”、“<
”、“>
”进行重载的运算符重载函数的定义。
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)在主程序中,创
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 练习题 答案 完整 版本