C++II习题及其解答第1版.docx

上传人:b****5 文档编号:8342746 上传时间:2023-01-30 格式:DOCX 页数:39 大小:35.62KB
下载 相关 举报
C++II习题及其解答第1版.docx_第1页
第1页 / 共39页
C++II习题及其解答第1版.docx_第2页
第2页 / 共39页
C++II习题及其解答第1版.docx_第3页
第3页 / 共39页
C++II习题及其解答第1版.docx_第4页
第4页 / 共39页
C++II习题及其解答第1版.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

C++II习题及其解答第1版.docx

《C++II习题及其解答第1版.docx》由会员分享,可在线阅读,更多相关《C++II习题及其解答第1版.docx(39页珍藏版)》请在冰豆网上搜索。

C++II习题及其解答第1版.docx

C++II习题及其解答第1版

习题及其解答

第5章类与对象

5.1选择题

第7章1.在下列结构变量的定义中,不正确的是(d)。

第8章

第9章

第10章(a)structemployee

{charname[20];

longcode;

}emp;

(b)struct

{charname[20];

longcode;

}emp;

(c)structemployee

{charname[20];

longcode;

};

employeeemp;

(d)struct

{charname[20];

longcode;

}employee;

employeeemp;

2.已知有职工情况结构变量emp定义为:

structemployee

{charname[20];

longcode;

struct

{intyear;

intmonth;

intday;

}birth;

}emp;

下列对emp的birth正确赋值方法是(d)。

(a)year=1980;month=5;day=1;

(b)birth.year=1980;birth.month=5;birth.day=1;

(c)emp.year=1980;emp.month=5;emp.day=1;

(d)emp.birth.year=1980;emp.birth.month=5;emp.birth.day=1;

3.假定有以下声明和定义,则下面引用形式错误的是(b)。

structstudent

{intnum;

floatscore;

}stu[3]={{1001,80},{1002,75},{1003,91}},*p=stu;

(a)p->num(b)(p++).num(c)(p++)->num(d)(*p).num

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;

(a)p->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

classA

{public:

intf1();

intf2();

voidsetx(intm){x=m;cout<

voidsety(intn){y=n;cout<

intgetx(){returnx;}

intgety(){returny;}

private:

intx,y;

};

intA:

:

f1(){returnx+y;}

intA:

:

f2(){returnx-y;}

voidmain()

{Aa;

a.setx(10);a.sety(5);

cout<

cout<

}

答案:

10

5

105

155

5.#include

classT

{public:

T(intx,inty)

{a=x;b=y;

cout<<"调用构造函数1."<

cout<

}

T(T&d)

{cout<<"调用构造函数2."<

cout<

}

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

intadd(intx,inty=10){returnx+y;}

private:

inta,b;

};

voidmain()

{Td1(4,8);

Td2(d1);

cout<

}

答案:

调用构造函数1.

48

调用构造函数2.

48

20

调用析构函数.

调用析构函数.

6.#include

classT

{public:

T(intx){a=x;b+=x;};

staticvoiddisplay(Tc)

{cout<<"a="<

private:

inta;

staticintb;

};

intT:

:

b=5;

voidmain()

{TA(3),B(5);

T:

:

display(A);

T:

:

display(B);

}

答案:

a=3b=13

a=5b=13

7.#include

#include

classpoint

{public:

point(floatx,floaty)

{a=x;b=y;cout<<"点("<

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;

};

voidmain()

{pointp1(2,3);

cout<<"到";

pointp2(4,5);

cout<<"的距离是:

"<

}

答案:

点(3,4)到点(4,5)的距离是:

2.82843

8.#include

classA

{public:

A(){a=5;}

voidprinta(){cout<<"A:

a="<

private:

inta;

friendclassB;

};

classB

{public:

voiddisplay1(At)

{t.a++;cout<<"display1:

a="<

voiddisplay2(At)

{t.a--;cout<<"display2:

a="<

};

voidmain()

{Aobj1;

Bobj2;

obj1.printa();

obj2.display1(obj1);

obj2.display2(obj1);

obj1.printa();

}

答案:

A:

a=5

display1:

a=6

display2:

a=4

A:

a=5

5.3编程题

6.定义一个Book(图书)类,在该类定义中包括

数据成员:

bookname(书名)、price(价格)和number(存书数量);

成员函数:

display()显示图书的情况;borrow()将存书数量减1,并显示当前存书数量;restore()将存书数量加1,并显示当前存书数量。

在main函数中,要求创建某一种图书对象,并对该图书进行简单的显示、借阅和归还管理。

解答:

#include

#include

#include

classBook

{public:

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;

}

voidBook:

:

borrow()

{if(number==0)

{cout<<"已没存书,退出!

"<

abort();

}

number=number-1;

cout<<"借一次,现存书量为:

"<

}

voidBook:

:

restore()

{number=number+1;

cout<<"还一次,现存书量为:

"<

}

voidBook:

:

display()

{cout<<"存书情况:

"<

<<"bookname:

"<

<<"price:

"<

<<"number:

"<

}

voidmain()

{charflag,ch;

Bookcomputer;

computer.setBook("c++程序设计基础",32,1000);

computer.display();

ch='y';

while(ch=='y')

{cout<<"请输入借阅或归还标志(b/r):

";

cin>>flag;

switch(flag)

{case'b':

computer.borrow();break;

case'r':

computer.restore();

}

cout<<"是否继续?

(y/n)";

cin>>ch;

}

computer.display();

}

7.定义一个Box(盒子)类,在该类定义中包括

数据成员:

length(长)、width(宽)和height(高);

成员函数:

构造函数Box设置盒子长、宽和高三个初始数据;函数volume计算并输出盒子的体积。

在main函数中,要求创建Box对象,并求盒子的体积。

解答:

略。

8.定义一个Student类,在该类定义中包括:

一个数据成员score(分数)及两个静态数据成员total(总分)和学生人数count;成员函数scoretotalcount(floats)用于设置分数、求总分和累计学生人数;静态成员函数sum()用于返回总分;静态成员函数average()用于求平均值。

在main函数中,输入某班同学的成绩,并调用上述函数求全班学生的总分和平均分。

解答:

类声明如下,实现代码略。

classstudent

{public:

voidscoretotalcount(float);

staticfloatsum();

staticfloataverage();

private:

floatscore;

staticfloattotal;

staticfloatcount;

};

floatstudent:

:

total=0;

floatstudent:

:

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//线类

{public:

line(float,float);//构造函数

voidprint()//显示直线方程

friendpointsetpoint(line&l1,line&l2);//求两条直线交点

private:

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

classT

{public:

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

private:

inta,b,c;

};

TT:

:

operator*(Tobj)

{Ttempobj;

tempobj.a=a*obj.a;

tempobj.b=b*obj.b;

tempobj.c=c*obj.c;

returntempobj;

}

voidmain()

{Tobj1(1,2,3),obj2(5,5,5),obj3;

inta,b,c;

obj3=obj1*obj2;

obj3.get(a,b,c);

cout<<"(obj1*obj2):

\t"

<<"a="<

(obj2*obj3).get(a,b,c);

cout<<"(obj2*obj3):

\t"

<<"a="<

}

答案:

(obj1*obj2):

a=5b=10c=15

(obj2*obj3):

a=25b=50c=75

2.#include

classvector

{public:

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<<"("<

private:

intx,y;

};

voidmain()

{vectorv1(1,2),v2(3,4),v3;

cout<<"v1=";

v1.display();

cout<<"v2=";

v2.display();

v3=v1+v2;

cout<<"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。

解答:

#include

constdoublen=1.852;//定义海里与千米和米的转换系数(1海里=1.852千米)

classnauticalmile_kilometer

{public:

nauticalmile_kilometer(intkm,doublem)

{kilometer=km;meter=m;}

voidprint()

{cout<<"kilometer="<

operatordouble();

private:

intkilometer;

doublemeter;

};

nauticalmile_kilometer:

:

ope

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

当前位置:首页 > 人文社科 > 广告传媒

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

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