习题二C++练习含有答案.docx

上传人:b****6 文档编号:7216362 上传时间:2023-01-21 格式:DOCX 页数:36 大小:22.42KB
下载 相关 举报
习题二C++练习含有答案.docx_第1页
第1页 / 共36页
习题二C++练习含有答案.docx_第2页
第2页 / 共36页
习题二C++练习含有答案.docx_第3页
第3页 / 共36页
习题二C++练习含有答案.docx_第4页
第4页 / 共36页
习题二C++练习含有答案.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

习题二C++练习含有答案.docx

《习题二C++练习含有答案.docx》由会员分享,可在线阅读,更多相关《习题二C++练习含有答案.docx(36页珍藏版)》请在冰豆网上搜索。

习题二C++练习含有答案.docx

习题二C++练习含有答案

 

习题二

 

一、填空题

1.对运算符进行重载时,不能改变结合性,不能改变操作数个数,不能改

 

变优先级。

2.

当++被重载为后置成员函数时需要

0

个参数。

3.

当++被重载为前置成员函数时需要

1

个参数。

4.

在C++中,运算符重载函数可以是

成员函数

,也可以是

友元函数

,还

可以是普通函数。

5.

友元破坏了类的

封装性

特性。

6.

类的友元能够访问这个类的

所有

成员。

7.

类的静态数据成员的初始化是在

类外

进行的。

8.

类的静态成员函数

没有

this

指针。

9.

类的静态成员函数访问该类的非静态成员可以通过

参数传递对象来实现。

10.

不能被重载的类成员函数是

构造和析构函数

二、选择题

1.

已知类A有一个带double型参数的构造函数,且将运算符“

+”重载为该类友元函数,

若如下语句:

Ax(2.5),y(3.6),z(0);

z=x+y;

能够正常运行,运算符重载函数

operator+应在类中声明为(D

)。

A.friendAoperator+(double,

double);

B.friend

Aoperator+(double,

A&);

C.friendAoperator+(A&,double);

D.friendAoperator+(A&,A

&);

2.

下列关于运算符重载的描述中,正确的是(

D)。

A.

运算符重载可以改变操作数的个数

B.

运算符重载可以改变优先级

C.

运算符重载可以改变结合性

D.

运算符重载不可以改变语法结构

3.友元运算符表达式A.operator>(obj1,obj2)C.obj2.operator>(obj1)

obj1>obj2

被C++编译器解释为(

B.>(obj1,obj2)

 

D.obj1.operator>(obj2)

A)。

 

4.下列关于

 

C++运算符函数的返回类型的描述中,错误的是(

 

C)。

A.可以是类类型

B.

可以是

int

类型

C.可以是

void

类型

D.

可以是

float

类型

5.为了区别单目运算符的前置和后置运算,在后置运算符进行重载时,额外添加一个参数,

 

其类型是(D)。

A.voidB.charC.floatD.int

6.以下运算符中,不能在C++中重载的是(A)。

A.?

:

B.+C.-D.<=

7.在一个类中可以对一个操作符进行(D)重载。

A.1种B.2种以下C.3种以下D.多种

8.若类A被说明成类B的友元,则(D)。

A.

类A的成员即类B的成员

B.

类B的成员即类A的成员

C.

类A的成员函数不能访问类

B的成员

D.

类B不一定是类A的友元

9.

友元的作用是(A)。

A.

提高成员的运行效率

B.

加强类的封装性

C.

实现数据的隐藏性

D.

增加成员函数的种类

10.

下列关于静态数据成员的特性描述中错误的是(

D)。

A.

说明静态数据成员时前边要加

static

B.

静态数据成员要在类体外进行初始化

C.引用静态数据成员时,要在静态数据成员名前加“类名”和作用域运算符

D.静态数据成员不是所有对象所共用的

11.关于友元的描述中,正确的是(C)。

 

A.友元函数是成员函数的一种,它可以访问类的私有成员

B.友元函数不能提高程序的运行效率

 

C.友元函数要在类体内说明

D.友元函数增强了类的封装性和隐藏性

12.用来说明类的友元的是(D)。

A.privateB.protected

C.public

D.friend

13.已知

f1

f2

是同一个类的两个成员函数,但

f1

不能调用

f2,下列选项中符合要求的

是(

B

)。

A.f1和f2都是静态函数B.f1是静态函数,f2不是静态函数

 

C.f1不是静态函数,f2是静态函数D.f1和f2都不是静态函数

14.下面对于友元函数描述正确的是(C)。

A.

友元函数的实现必须在类的内部定义

B.

友元函数是类的成员函数

C.

友元函数破坏了类的封装性和隐藏性

D.

友元函数不能访问类的保护成员

15.

一个类的友元函数或友元类能够通过成员操作符访问该类的(

D)

A.

私有成员

B.

保护成员

C.

公有成员

D.

所有成员

16.

下面对静态数据成员的描述中,正确的是(

D)

A.

静态数据成员可以在类体内进行初始化

B.

静态数据成员不可以被类的对象调用

C.静态数据成员不受private控制符的限制D.静态数据成员可以直接用类名调用

17.C++语言中提供的(B)不是类的成员,但具有类成员的特权。

A.构造函数

B.

 

友元函数

C.

 

虚函数

D.

 

重载函数

18.下列关于静态成员函数的说法中不正确的是(

C)

A.静态成员函数不属于对象成员

B.

对静态成员函数的引用不需要使用对象名

C.静态成员函数中可以直接引用类的非静态成员

 

D.静态成员函数中可以直接引用类的静态成员

19.下面对友元的错误描述是(D)。

 

A.关键字friend用于声明友元

 

B.一个类中的成员函数可以是另一个类的友元函数

C.友元函数访问对象的成员不受访问特性影响

D.友元函数通过this指针访问对象成员

20.下列有关一个类的友元函数的叙述中,正确的(B)

 

A.允许在类外访问类中除私有成员以外的所有成员

B.允许在类外访问类中的任何成员

 

C.友元也是该类的成员

D.友元的声明必须被放在该类的公有部分

 

三、判断题

1、静态数据成员可以通过类名或对象名引用。

2、静态数据成员可以在类内或类外进行初始化。

3、在静态成员函数中可以访问本类中非静态的数据成员。

4、类的静态成员函数的初始化工作要放在类外进行。

 

5、若A是B的友元类,B是C的友元类,则A是C的友元类。

6、通过运算符重载,可以定义新的运算符。

7、C++中的所有运算符都能被重载。

8、运算符重载不能改变操作数的个数。

9、运算符重载不能改变其优先级与结合性。

10、在运算符重载函数中不能使用缺省的参数值。

答案:

1、√

2、×

3、√

4、×

5、×

6、×

7、×

8、√

9、√

10、√

四、程序分析题

(写程序运行结果)

1.#includeclassA

{

 

intx,y,z;public:

A(intvx,intvy,intvz){x=vx;y=vy;z=vz;}A(){x=0;y=0;z=0;}

Aoperator+(At)

 

{

Ate;

 

te.x=x+t.z;

te.y=y+t.y;

 

te.z=z+t.z;returnte;

}

 

Aoperator-(At)

{

 

Ate;te.x=x-t.z;te.y=y-t.y;te.z=z-t.z;

 

returnte;

 

}

Aoperator=(At)

 

{

 

x=t.x;

 

y=t.y;

z=t.z;

 

return*this;

}

 

voidprint(){cout<

 

};

voidmain()

 

{

At1(10,10,10),t2(20,20,20),t3;

 

t3=t1+t2;

t3.print();

 

t3=t2=t1;

t1.print();

 

t2.print();

 

t3.print();

}

 

答案:

3030

 

1010

1010

 

1010

2.#includeclassA

{

public:

 

A(intr,intc){row=r;col=c;elem=newint[row*col];}

 

int&operator()(intx,inty){returnelem[col*x+y];}

intoperator()(intx,inty)const{returnelem[col*x+y];}

 

~A(){delete[]elem;}

 

private:

 

int*elem;

introw,col;

 

};

voidmain()

 

{

 

Am(5,8);inti;

for(i=0;i<5;i++)m(i,1)=i+5;

for(i=0;i<5;i++)cout<

}

 

答案:

5,6,7,8,9,

 

3.#includeusingnamespacestd;classgoods

{

private:

 

staticinttotalweight;

intweight;

 

public:

goods(intw){weight=w;totalweight+=weight;}

 

goods(goods&gd){weight=gd.weight;totalweight+=weight;}

 

~goods(){totalweight-=weight;}

staticintgettotal(){returntotalweight;}

 

};

 

intgoods:

:

totalweight=0;

voidmain()

 

{

 

goodsg1(50);

 

cout<

:

gettotal()<

goodsg2(100);

 

cout<

}

 

答案:

50

150

 

4.#includeusingnamespacestd;

classA

{

 

inti,j;

staticintc;

 

public:

 

A(inta=0,intb=0){i=a;j=b;c++;}

~A(){c--;}

 

staticvoidf(){cout<<"c="<

 

};

 

intA:

:

c=0;

voidmain()

 

{

Aa(4,8),b,d;

 

{

 

Az(3,6),f;A:

:

f();

 

}

 

A:

:

f();

}

 

答案:

c=5

 

c=3

5.#includeusingnamespacestd;classpoint

{

 

public:

voidpoi(intpx=10,intpy=10)

 

{x=px;y=py;}

friendintgetpx(pointa);

 

friendintgetpy(pointb);

private:

 

intx,y;

};

 

intgetpx(pointa)

 

{returna.x;}

intgetpy(pointa)

 

{returna.y;}

voidmain()

 

{

pointp,q;

 

p.poi();q.poi(15,15);

cout<

 

cout<

 

cout<

cout<

 

}

 

答案:

1010

 

1515

 

6.#includeclassB;

classA

 

{

intdata;A*prev;

public:

A(intd,A*n){data=d;prev=n;}friendclassB;

};

 

classB

{

 

A*top;

public:

 

B(){top=0;}

 

voidpush(inti){A*n=newA(i,top);top=n;}intpop()

{

A*t=top;

 

if(top)

{

 

top=top->prev;

intc=t->data;

 

deletet;

 

returnc;

}

 

return0;

 

}

};

 

voidmain()

 

{

 

intc[10]={23,34,56,87,67,876,42,657,55,66};

 

Bs;

 

for(inti=0;i<10;i++)s.push(c[i]);

for(i=0;i<10;i++)cout<

 

cout<

 

}

 

答案:

66,55,657,42,876,67,87,56,34,23,

7.#include

 

usingnamespacestd;

classTIME;

 

classDATE

{

 

public:

 

DATE(inta=2004,intm=9,intb=23)

{

 

year=a;month=m;day=b;

}

 

voidDateTime(TIME&t);

private:

 

intyear,month,day;

};

 

classTIME

 

{

public:

 

TIME(inth=0,intm=0,ints=0)

 

{

hour=h;minute=m;second=s;

 

}

 

friendvoidDATE:

:

DateTime(TIME&t);

 

private:

inthour,minute,second;

 

};

voidDATE:

:

DateTime(TIME&t)

 

{

 

cout<<"Now

is"<

'<

'<

 

l;

}

 

intmain()

{

 

DATEb(2004,9,23);

TIMEt(10,20,50);

 

b.DateTime(t);

 

return0;

}

 

答案:

Nowis2004.9.2310:

20:

50.

 

四、编程题

1.定义一个处理日期的类TDate,它有3个私有数据成员:

Month,Day,Year和若干个公有成员函数,并实现如下要求:

(1)成员函数设置缺省参数;

 

(2)定义一个友元函数来打印日期。

参考程序:

#include

 

usingnamespacestd;

 

classTDate

{

 

public:

 

TDate(intm=0,intd=0,inty=0):

Month(m),Day(d),Year(y)

 

{}

~TDate(){}

 

friendvoidShow(TDate);

private:

 

intMonth,Day,Year;

 

};

voidShow(TDated)

 

{

cout<

 

}

intmain()

 

{

TDated1,d2(4,8,2014);

 

Show(d1);

 

Show(d2);

return0;

 

}

2.设计一个类CTimeInfo,要求其满足下述要求。

 

(1)

要求有一个无参数的构造函数,其初始的小时和分钟分别为:

0,0;

(2)

要求有一个带参数的构造函数,其参数分别对应小时和分钟

;

(3)

要求用一个成员函数实现时间的设置;

(4)

要求用一个友元函数实现以

12

小时的方式输出时间

;

(5)

要求用一个友元函数实现以

24

小时的方式输出时间

;

参考程序:

#include

 

usingnamespacestd;

 

classCTimeInfo

{

 

public:

 

CTimeInfo():

Hour(0),Minute(0){}

 

CTimeInfo(inth,intm):

Hour(h),Minute(m)

{}

 

~CTimeInfo(){}

voidSet(inth,intm)

 

{

 

Hour=h;Minute=m;

}

 

friendvoidShow_12(CTimeInfo);

friendvoidShow_24(CTimeInfo);

 

private:

intHour,Minute;

 

};

voidShow_12(CTimeInfod)

 

{

 

if(d.Hour<=12)

cout<<"am"<

"<

 

else

{

 

d.Hour-=12;

cout<<"pm"<

"<

 

}

}

 

voidShow_24(CTimeInfod)

 

{

cout<

"<

 

}

 

intmain()

{

 

CTimeInfod1,d2(21,8);

 

Show_12(d1);

 

Show_12(d2);

Show_24(d2);

 

return0;

}

 

3.定义一个

Student

 

类,在该类定义中包括:

一个数据成员

score(

分数)及两个静态数据

成员

total(

总分)和

count(

学生人数

成员函数:

scoretotalcount(float

s)用于设置分

数、求总分和累计学生人数;

静态成员函数

sum用于返回总分;静态成员函数

average

用于

求平均分。

在main函数中,创建三名学生,并调用上述函数求这三名学生的总分和平均分。

 

参考程序:

#include

classStudent

 

{

public:

 

voidscoretotalcount(floats)

 

{

score=s;

 

total+=score;

count++;

 

}

staticfloatsum(){returntotal;}

 

staticfloataverage(){returntotal/count;}

private:

 

floatscore;

 

staticfloattotal;

staticintcount;

 

};

 

floatStudent:

:

total=0;

intStudent:

:

count=0;

 

voidmain()

 

{

 

Students1,s2,s3;

s1.scoretotalcount(70);

 

s2.scoretotalcount(80);

s3.scoretotalcount(90);

 

cout<<"total:

"<

:

sum()<

 

cout<<"average:

"<

:

average()<

}

 

4.编写程序实现宾馆住宿客人管理。

定义客人类Guest,包含客人编号Num(按先后顺序自

 

动生成)、姓名

Name、住宿房号

Room、房费

fee,并定义静态成员

Count,用于记录客人总

数;提供构造函数,显示信息函数

Display

,以及返回客人总数函数

GetCount

等。

在主函

数中创建3个客人对象进行测试。

 

参考程序:

#include

 

#include

 

usingnamespacestd;

classGuest

 

{

public:

 

Guest(stringn,stringr,doublef)

{

 

Num=++Count;

Name=n;

 

Room=r;

 

fee=f;

}

 

voiddisplay()

 

{

cout<

 

}

 

staticintGetCount()

 

{

returnCount;

 

}

private:

 

intNum;

 

stringName;

stringRoom;

 

doublefee;

staticintCount;

 

};

int

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

当前位置:首页 > 表格模板 > 合同协议

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

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