CII习题及其解答第版Word格式.docx
- 文档编号:19973995
- 上传时间:2023-01-13
- 格式:DOCX
- 页数:39
- 大小:33.53KB
CII习题及其解答第版Word格式.docx
《CII习题及其解答第版Word格式.docx》由会员分享,可在线阅读,更多相关《CII习题及其解答第版Word格式.docx(39页珍藏版)》请在冰豆网上搜索。
4.下列四个运算符中,优先级最低的是(a)。
(a)++(b).(c)->
(d)()
5.若有以下声明和定义,则下列错误的引用是(d)。
structworker
{intno;
charname[20];
}w,*p=&
w;
(a)w.no(b)p->
no(c)(*p).no(d)*p.no
6.若有以下声明和定义,则下列引用非法的是(d)。
structdata
{intn;
floatscore;
data*q;
};
dataa[3]={1001,87,&
a[1],1002,75,&
a[2],1003,90,&
a[0]};
data*p=a;
n++(b)(*p).n++(c)++p->
n(d)*p->
n
7.关于类和对象不正确的说法是(c)。
(a)类是一种类型,它封装了数据和操作(b)对象是类的实例
(c)一个类的对象只有一个(d)一个对象必属于某个类
8.在类定义的外部,可以被访问的成员有(c)。
(a)所有类成员(b)private或protected的类成员
(c)public的类成员(d)public或private的类成员
9.关于this指针的说法错误的是(a,d)。
(a)this指针必须显式说明
(b)当创建一个对象后,this指针就指向该对象
(c)成员函数拥有this指针
(d)静态成员函数拥有this指针
10.声明一个类的对象时,系统自动调用(b,d)函数;
撤消对象时,系统自动调用(c)函数。
(a)成员函数(b)构造函数(c)析构函数(d)复制构造函数
11.下面对构造函数的不正确描述是(b)。
第11章(a)系统可以提供默认的构造函数
(b)构造函数可以有参数,所以也可以有返回值
(c)构造函数可以重载
(d)构造函数可以设置默认参数
12.下面对析构函数的正确描述是(a,c)。
(a)系统可以提供默认的析构函数(b)析构函数必须由用户定义
(c)析构函数没有参数(d)析构函数可以设置默认参数
13.对静态成员的不正确描述是(c,d)。
(a)静态成员不属于对象,是类的共享成员
(b)静态数据成员要在类外定义和初始化
(c)调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针
(d)只有静态成员函数可以操作静态数据成员
14.下面选项中,不是类的成员函数为(c)。
(a)构造函数(b)析构函数(c)友元函数(d)复制构造函数
15.下面对友员的错误描述是(d)。
(a)关键字friend用于声明友员
(b)一个类中的成员函数可以是另一个类的友员
(c)友员函数访问对象的成员不受访问特性影响
(d)友员函数通过this指针访问对象成员
5.2阅读下列程序,写出执行结果
4.#include<
iostream.h>
classA
{public:
intf1();
intf2();
voidsetx(intm){x=m;
cout<
<
x<
endl;
}
voidsety(intn){y=n;
y<
intgetx(){returnx;
intgety(){returny;
private:
intx,y;
intA:
:
f1(){returnx+y;
}
f2(){returnx-y;
voidmain()
{Aa;
a.setx(10);
a.sety(5);
cout<
a.getx()<
'
\t'
<
a.gety()<
endl;
a.f1()<
a.f2()<
}
答案:
10
5
105
155
5.#include<
classT
T(intx,inty)
{a=x;
b=y;
cout<
"
调用构造函数1."
cout<
a<
b<
}
T(T&
d)
{cout<
调用构造函数2."
d.a<
d.b<
~T(){cout<
调用析构函数."
endl;
intadd(intx,inty=10){returnx+y;
private:
inta,b;
{Td1(4,8);
Td2(d1);
d2.add(10)<
调用构造函数1.
48
调用构造函数2.
48
20
调用析构函数.
调用析构函数.
6.#include<
{public:
T(intx){a=x;
b+=x;
staticvoiddisplay(Tc)
{cout<
"
a="
c.a<
'
b="
c.b<
private:
inta;
staticintb;
intT:
b=5;
{TA(3),B(5);
T:
display(A);
display(B);
a=3b=13
a=5b=13
7.#include<
#include<
math.h>
classpoint
point(floatx,floaty)
{a=x;
b=y;
点("
"
)"
;
frienddoubled(point&
A,point&
B)
{returnsqrt((A.a-B.a)*(A.a-B.a)+(A.b-B.b)*(A.b-B.b));
private:
doublea,b;
{pointp1(2,3);
到"
pointp2(4,5);
的距离是:
d(p1,p2)<
点(3,4)到点(4,5)的距离是:
2.82843
8.#include<
A(){a=5;
voidprinta(){cout<
A:
a="
inta;
friendclassB;
classB
voiddisplay1(At)
{t.a++;
display1:
t.a<
};
voiddisplay2(At)
{t.a--;
display2:
{Aobj1;
Bobj2;
obj1.printa();
obj2.display1(obj1);
obj2.display2(obj1);
a=5
a=6
a=4
5.3编程题
6.定义一个Book(图书)类,在该类定义中包括
数据成员:
bookname(书名)、price(价格)和number(存书数量);
成员函数:
display()显示图书的情况;
borrow()将存书数量减1,并显示当前存书数量;
restore()将存书数量加1,并显示当前存书数量。
在main函数中,要求创建某一种图书对象,并对该图书进行简单的显示、借阅和归还管理。
解答:
iostream.h>
string.h>
stdlib.h>
classBook
voidsetBook(char*,float,int);
voidborrow();
voidrestore();
voiddisplay();
private:
charbookname[40];
floatprice;
intnumber;
//在类外定义Book类的成员函数
voidBook:
setBook(char*name,floatpri,intnum)
{strcpy(bookname,name);
price=pri;
number=num;
borrow()
{if(number==0)
{cout<
已没存书,退出!
abort();
number=number-1;
借一次,现存书量为:
number<
restore()
{number=number+1;
还一次,现存书量为:
display()
{cout<
存书情况:
endl
bookname:
bookname<
price:
price<
number:
{charflag,ch;
Bookcomputer;
computer.setBook("
c++程序设计基础"
32,1000);
computer.display();
ch='
y'
;
while(ch=='
)
请输入借阅或归还标志(b/r):
cin>
>
flag;
switch(flag)
{case'
b'
computer.borrow();
break;
case'
r'
computer.restore();
是否继续?
(y/n)"
ch;
7.定义一个Box(盒子)类,在该类定义中包括
length(长)、width(宽)和height(高);
构造函数Box设置盒子长、宽和高三个初始数据;
函数volume计算并输出盒子的体积。
在main函数中,要求创建Box对象,并求盒子的体积。
解答:
略。
8.定义一个Student类,在该类定义中包括:
一个数据成员score(分数)及两个静态数据成员total(总分)和学生人数count;
成员函数scoretotalcount(floats)用于设置分数、求总分和累计学生人数;
静态成员函数sum()用于返回总分;
静态成员函数average()用于求平均值。
在main函数中,输入某班同学的成绩,并调用上述函数求全班学生的总分和平均分。
类声明如下,实现代码略。
classstudent
voidscoretotalcount(float);
staticfloatsum();
staticfloataverage();
floatscore;
staticfloattotal;
staticfloatcount;
floatstudent:
total=0;
count=0;
9.定义一个表示点的结构类型Point和一个由直线方程y=ax+b确定的直线类Line。
结构类型Point有x和y两个成员,它们分别表示点的横坐标和纵坐标。
Line类有两个数据成员a和b,它们分别表示直线方程中的系数a和b。
Line类有一个成员函数print用于显示直线方程;
友员函数setPoint(Line&
l1,Line&
l2)用于求两条直线的交点。
在main函数中,建立两个直线对象,分别调用print函数显示两条直线的方程,并调用函数setPoint求这两条直线的交点。
结构和类声明如下,实现代码略。
structPoint//点结构
{
floatx;
floaty;
classLine//线类
line(float,float);
//构造函数
voidprint()//显示直线方程
friendpointsetpoint(line&
l1,line&
l2);
//求两条直线交点
floata,b;
第6章运算符重载
6.1选择题
1.在下列运算符中,能重载的是(a,c,d)。
(a)!
(b)sizeof(c)new(d)delete
2.在下列运算符中,不能重载的是(c)。
(a)<
=(b)>
(c)&
&
(d)&
=
3.下列关于运算符重载的描述中,(d)是正确的。
(a)可以改变参与运算的操作数个数(b)可以改变运算符原来的优先级
(c)可以改变运算符原来的结合性(d)不能改变原运算符的语义
4.下列函数中,能重载运算符的函数是(b,c)。
(a)成员函数(b)构造函数(c)析构函数(d)友员函数
5.不能用友员函数重载的是(a)。
(a)=(b)==(c)+=(d)!
6.下面描述中,错误的是(b)。
(a)只有系统预先定义的运算符才可能被重载
(b)使用类型转换函数不能把一个类转换为另一个类
(c)使用类型转换函数可以把类转换为基本类型
(d)类型转换函数只能定义为一个类的成员函数,不能定义为类的友员函数
6.2阅读下列程序,写出执行结果
1.#include<
T(){a=0;
b=0;
c=0;
T(inti,intj,intk)
{a=i;
b=j;
c=k;
voidget(int&
i,int&
j,int&
k)
{i=a;
j=b;
k=c;
Toperator*(Tobj);
inta,b,c;
TT:
operator*(Tobj)
{Ttempobj;
tempobj.a=a*obj.a;
tempobj.b=b*obj.b;
tempobj.c=c*obj.c;
returntempobj;
{Tobj1(1,2,3),obj2(5,5,5),obj3;
inta,b,c;
obj3=obj1*obj2;
obj3.get(a,b,c);
(obj1*obj2):
\t"
<
b="
b<
c="
c<
(obj2*obj3).get(a,b,c);
(obj2*obj3):
\t"
(obj1*obj2):
a=5b=10c=15
(obj2*obj3):
a=25b=50c=75
2.#include<
classvector
vector(){}
vector(inti,intj)
{x=i;
y=j;
friendvectoroperator+(vectorv1,vectorv2)
{vectortempvector;
tempvector.x=v1.x+v2.x;
tempvector.y=v1.y+v2.y;
returntempvector;
}
voiddisplay()
{cout<
("
)"
intx,y;
{vectorv1(1,2),v2(3,4),v3;
v1="
v1.display();
v2="
v2.display();
v3=v1+v2;
v3=v1+v2="
v3.display();
v1=(1,2)
v2=(3,4)
v3=v1+v2=(4,6)
6.3编程题
1.分别使用成员函数和友员函数编程序重载运算符“+”,使该运算符能实现两个字符串的连接。
2.设向量X=(x1,x2,x3)和Y=(y1,y2,y3),则它们之间的加、减和积分别定义为:
X+Y=(x1+y1,x2+y2,x3+y3)
X-Y=(x1-y1,x2-y2,x3-y3)
X*Y=x1*y1+x2*y2+x3*y3
编程序对运算符“+”、“-”和“*”重载,实现向量之间的加、减、乘运算。
3.定义一个类nauticalmile_kilometer,它包含两个数据成员kilometer(千米)和meter(米)。
还包含一个构造函数对数据成员初始化;
成员函数print用于输出数据成员kilometer和meter的值;
类型转换函数double()实现把千米和米转换为海里(1海里=1.852千米)。
编写main函数,测试类nauticalmile_kilometer。
constdoublen=1.852;
//定义海里与千米和米的转换系数(1海里=1.852千米)
classnauticalmile_kilometer
nauticalmile_kilometer(intkm,doublem)
{kilometer=km;
meter=m;
voidprint()
{cout<
kilometer="
kilometer<
meter="
meter<
operatordouble();
intkilometer;
doublemeter;
nauticalmile_kilometer:
ope
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CII 习题 及其 解答