C++程序设计练习题与答案1.docx

上传人:b****6 文档编号:4783255 上传时间:2022-12-08 格式:DOCX 页数:27 大小:120.49KB
下载 相关 举报
C++程序设计练习题与答案1.docx_第1页
第1页 / 共27页
C++程序设计练习题与答案1.docx_第2页
第2页 / 共27页
C++程序设计练习题与答案1.docx_第3页
第3页 / 共27页
C++程序设计练习题与答案1.docx_第4页
第4页 / 共27页
C++程序设计练习题与答案1.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

C++程序设计练习题与答案1.docx

《C++程序设计练习题与答案1.docx》由会员分享,可在线阅读,更多相关《C++程序设计练习题与答案1.docx(27页珍藏版)》请在冰豆网上搜索。

C++程序设计练习题与答案1.docx

C++程序设计练习题与答案1

C++g序设计练习题

一、填空题

1•对象的三大基本特性分别为多态性、()、封装性。

2.赋值运算符应重载为()函数。

3•用()声明的基类称为虚基类。

4•用()声明的函数称为虚函数。

5•派生类对基类继承控制访问有三种。

派生类可以定义其基类中不具备的()。

6•静态成员是对象的成员,()函数不是类的成员。

7•在函数体之前加()关键字可以防止覆盖函数改变数据成员的值。

&一个const对象只能访问()成员函数。

9•使用友元函数是为了提高程序效率,且节约了()开销。

10•类名为“ClassName”的类,其拷贝构造函数的原型说明是()。

11.

由关键字private、public和protected限定成员的访问权限分别是(

省关键字时成员的访问权限为()。

12•如果想要公共基类在派生类中只有一个拷贝,就要将公共的基类说明为默认构造函数,就必须在每一个派生类的构造函数中都要调用虚基类的(

13・静态成员函数是使用关键字()说明的成员函数。

14.一个函数的原型声明为“voidFunName(int=0,double=0,char='x');”,则调用FunName函数的方法

共有()种。

15•编译时多态性是通过()实现的;运行时多态性是通过()实现的。

16.C++通过()实现编译时多态性,通过()实现运行时多态性。

17•在C++中,声明类的关键字是()。

18.声明C++模板的关键字是()。

19.调用函数原型声明为“voidFunName(short,int=0,float=1.0);”的方法有()种。

20.处理C++异常的方法:

采用()结构。

21.用关键字(卜()和()限定的成员,其访问权限分别为:

公有的、私有的和保护的。

缺省关键字时,成员的访问权限为()。

22.在C++中,处理()的方法是采用try-catch结构。

23•在C++中,用关键字()说明内置函数。

24.在C++中,声明友元函数的关键字是()。

25.将公共基类说明为()时,多重派生过程中公共基类在派生类中就只有一个拷贝了。

26.在C++中,如果函数调用在前、定义在后,就必须先对函数进行()。

27.在成员函数头之后、函数体之前加()修饰的成员函数称为类的常成员函数。

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.类的析构函数的作用

H.是

()

A)一般成员函数

B)

类的初始化

C)对象的初始化

D)删除对象创建的所有对象

3.类的析构函数是在

)调用的。

A)类创建时

B)

创建对象时

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{

private:

intn=1;

MyClasspO;

public:

MyClass(inta=0);void~MyClass(inta);

#includeusingnamespacestd;voidmain()

{

int&par=newint[6];deletepar;

cout>>"主函数End!

"<

}

5.

#include

usingnamespacestd;

voidmain()

{

long&par=newlong[9];

deletepar;

cout<<"主函数End!

"<

}

6.

CLassCN

{

private:

longn;CNpobj;

public:

CN();voidCN(intX);

};

四、分析程序输出题

1.

#include

usingnamespacestd;

classA

{

public:

A(){cout<<"constructingA"<

~A(){cout<<"destructingA"<

};

classB:

publicA

{

public:

B(){cout<<"constructingB"<

~B(){cout<<"destructingB"<

};

classC:

publicB

{

public:

C(){cout<<"constructingC"<

~C(){cout<<"destructingC"<

voidmain()

{Cc1;}

#include

usingnamespacestd;

voidfun(int&a,int&b)

{

intp;p=a;a=b;b=p;

}

voidexchange(int&a,int&b,int&c)

{

if(a

if(a

if(b

}

voidmain()

{

inta=12,b=89,c=56;

exchange(a,b,c);cout<<"a="<

}

3.

#include

classTC{

private:

intnum;

public:

TC();

intTEST(){returnnum;}

~TC();

};

TC:

:

TC(){num=0;}

TC:

:

~TC(){cout<<"Destructorisactive"<

voidmain()

{

TCtarr[5];

cout<<"Exitingmain"<

}

4.

#include

classCBase

{

private:

intn;

public:

CBase(intm=0){n=m;}

virtualvoidprint(){cout<<"InsideCBase"<

classCDrive:

publicCBase

{

private:

intn;

public:

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();

pb=&b2;

pb->print();

pb=ⅆ

pb->print();pb->CBase:

:

print();

}

5.

#include

classCTest

{

private:

longnum;

public:

CTest();

~CTest();

};

CTest:

:

CTest(){num=0;}

CTest:

:

~CTest(){cout<<"调用析构函数"<

voidmain()

{

CTestcobj;

cout<<"退出主函数"<

}

6.

#include

classCN

{

private:

intn;

public:

CN(inti){n=i;}

operatorint(){returnn;}

};

voidmain()

{

CNcobj(123);

cout<

}

7.

#include

voidmain()

{

intnum=100;

int&ref=num;

cout<

ref=ref+100;

cout<

num=num+100;

cout<

}

8.

#include

classCName

{

private:

longnum;

public:

CName();

~CName();

};

CName:

:

CName(){num=0;}

CName:

:

~CName(){cout<<"调用析构函数"<

voidmain()

{

CNamecarr[2];

cout<<"退出main"<

}

9•分析下列程序并写出程序的运行结果。

#include

classCBase

{

private:

intn;

public:

CBase(intm=0){n=m;}

virtualvoidprint(){cout<<"InsideCBase"<

};

classCDrive:

publicCBase

{

private:

intn;

public:

CDrive(){n=0;}

CDrive(inta,intb):

CBase(a),n(b){}

voidprint(){cout<<"InsideCDrive"<

};

voidmain()

{

CBaseba,bb(100),*pb;

CDrivedd(123,456);

pb=&ba;

pb->print();

pb=&bb;

pb->print();

pb=ⅆ

pb->print();pb->CBase:

:

print();

}

10.

#include

classCT

{

private:

intn;

public:

CT(inti){n=i;}

operatorint(){returnn;}

};

voidmain()

{

CTcObj(1234);cout<

}

五、编程题

1.下列类成员函数的定义不完整,请在填代码以使其完整。

classTC{

private:

intnum;

floatx;

public:

TC(int,float);

TC(TC&);

};

TC:

:

TC(intn,floatf)

{

num=n;

}

TC:

:

TC(TC&t)

{

x=t.x;

}

2.根据下面的主程序,完成类说明的最小形式(不要求实现成员函数的定义)。

#include

classBase

{

private:

;

public:

;

};

voidmain()

{Basebo(6);}

3.一个类的头文件如下所示,程序产生对象tco,且tco.num=10,并使用Show()函数输出这个对象

的值。

//tcn.h

classTCN{

private:

intnum;

public:

TCN(intn){num=n;}

voidShow(){cout<

};

#include

#include"tcn.h"

voidmain()

{

}

4.完成下面类中的成员函数的定义(在处填写适当的内容)。

classCTN

{

private:

intmen;

floatmef;

public:

CTN(int,float);

CTN(CTN&);

};

CTN:

:

CTN()

{men=a;

=b;

}

CTN:

:

CTN(—rObj)

{men=;

mef=.mef;

}

5•在—处填写适当内容,以便完成下列类成员函数的定义。

classCN

{

private:

intmn;

floatmf;

public:

CN(int=0,float=0);

CN(CN&);

};

CN:

:

CN()

{this->mn=mn;

=mf;

}

CN:

:

CN(rObj)

mn=;

mf=.f;

}

6•填上合适的字句,使程序的最终结果为200。

#include

classCNumber

{

private:

intval;

public:

CNumber(inti){val=i;}

int();

};

CNumber:

:

operatorint(){}

classnum:

publicCNumber{

public:

num(inti):

CNumber(i){}

};

voidmain()

{

numn(100);

inti=n;

cout<

}

7•下面是一个类的测试程序,设计出能使用如下测试程序的类:

voidmain()

{

Testto;

to.Init(300,200);

to.Print();

}

输出结果:

300-200=100

8.已知复数类Complex的声明如下:

classComplex

{

public:

Complex();

Complex(double);

Complex(double,double);

friendComplexoperator+(Complex&,Complex&);

friendostream&operator<<(ostream&,Complex&);

friendistream&operator>>(istream&,Complex&);

private:

doublereal,imag;

};

要求:

(1)写出该类的所有构造函数的类外定义代码。

⑵写出对运算符“+”、“<<”、“>>”进行重载的运算符重载函数的定义。

9.

个通用的用

下列AbstractC类是一个表示形状的抽象类,area()为求图形面积的函数,total()则是以求不同形状的图形面积总和的函数。

classAbstractC

{

public:

virtualdoublearea()=0;

};

doubletotal(AbstractC*sa[],intn)

{

doubles=0.0;

for(inti=0;iarea();

returns;

}

要求:

(1)从AbstractC类派生圆类(Circle)、正方形类(Square),圆类新增数据成员半径(r),正方形类新增数据成员边长(a),圆类和正方形类都有构造函数,修改、显示数据成员值的函数,求面积函数。

⑵写出main()函数,计算半径为3.5的圆和边长为7.9的正方形的面积和(必须通过调用total函数计算)。

10.一个类的头文件cn.h的内容如下所示:

//cn.h

#include

classCN

{

private:

intn;

public:

CN(int);

voidPrint();

};

CN:

:

CN(intN){n=N;}

voidCN:

:

Print(){cout<<*

(1)编写一个主程序,产生对象Obj,且使Obj对象中的n成员的值为100,并使用Print()函数输出这个对象中私有成员n的值。

(2)在主程序中,创建一动态对象,使该动态对象的数据成员值为2015,并使用指针pObj指向该动

态对象,然后输出该动态对象的数据成员的值。

11.一个类的头文件CT.h的内容如下所示:

//CT.h

#include

usingnamespacestd;

classCT

{

private:

intm;

public:

CT(int);

voidShowM();

};

CT:

:

CT(intn){m=n;}

voidCT:

:

ShowM(){cout<

(1)编写一个主程序,产生对象mObj,且使mObj对象中的m成员的值为11,并使用ShowM()函数

输出这个对象中私有成员m的值。

(2)在主程序中,创建一动态对象,使该动态对象的数据成员值为126,并使用指针pObj指向该动态

对象,然后输出该动态对象的数据成员的值。

12•使用运行时多态性编程实现三角形、矩形和圆的总面积的统计并输出结果。

三角形、矩形和圆类的类名分别为T、R和C。

T类必须以S类作基类,R类必须从T类派生,C类必须以S作基类。

Shape类的定义如下:

classS

{

private:

intx,y;

public:

S(inta=0,intb=0):

x(a),y(b){}

virtualintArea()=0;

};

不必建立工程,将所有代码都放在一个源文件中。

在主函数中,必须调用下列Sum函数来统计各类图

形面积的总和。

intSum(S*s[],intn

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1