C++面向对象程序设计教程第3版陈维兴林小茶课后习题答案.docx

上传人:b****5 文档编号:12148616 上传时间:2023-04-17 格式:DOCX 页数:55 大小:30.12KB
下载 相关 举报
C++面向对象程序设计教程第3版陈维兴林小茶课后习题答案.docx_第1页
第1页 / 共55页
C++面向对象程序设计教程第3版陈维兴林小茶课后习题答案.docx_第2页
第2页 / 共55页
C++面向对象程序设计教程第3版陈维兴林小茶课后习题答案.docx_第3页
第3页 / 共55页
C++面向对象程序设计教程第3版陈维兴林小茶课后习题答案.docx_第4页
第4页 / 共55页
C++面向对象程序设计教程第3版陈维兴林小茶课后习题答案.docx_第5页
第5页 / 共55页
点击查看更多>>
下载资源
资源描述

C++面向对象程序设计教程第3版陈维兴林小茶课后习题答案.docx

《C++面向对象程序设计教程第3版陈维兴林小茶课后习题答案.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计教程第3版陈维兴林小茶课后习题答案.docx(55页珍藏版)》请在冰豆网上搜索。

C++面向对象程序设计教程第3版陈维兴林小茶课后习题答案.docx

C++面向对象程序设计教程第3版陈维兴林小茶课后习题答案

C++面向对象程序设计教程课后题答案

1.1什么是面向对象程序设计?

面向对象程序设计是一种新的程序设计范型.这种范型的主要特征是:

程序=对象+消息

面向对象程序的基本元素是对象。

主要结构特点是:

第一,程序一般由类的定义和类的使用两部分组成;

第二,程序中的一切操作都是通过向对象发送消息来实现的。

1.2什么是对象?

什么是类?

对象与类之间的关系是什么?

对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统

一体。

类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有

相同数据结构和相同操作的一类对象的描述。

类和对象之间的关系是抽象和具体的关系。

类是多个对象进行综合抽象的结果,

一个对象是类的一个实例。

1.3现实世界中的对象有哪些特征?

请举例说明。

现实世界中的对象具有以下特征:

1)每一个对象必须有一个名字以区别于其他对象;

2)用属性来描述对象的某些特征;

3)有一组操作,每组操作决定对象的一种行为;

4)对象的行为可以分为两类:

一类是作用于自身的行为,另一类是作

用于其他对象的行为。

例如一个教师是一个对象。

每个教师对象有自己的名字来和别的教师区别。

教师

具有编号,姓名,年龄,职称,专业等属性。

教师拥有走路,吃饭,授课等行为

操作。

走路,吃饭是作用于自身的行为,授课是作用于其他对象的行为。

1.4什么是消息?

消息具有什么性质?

一个对象向另一个对象发出的请求成为“消息”。

消息具有以下3个性质:

1)同一个对象可以接收不同形式的多个消息,做出不同的相应;

2)相同形式的消息可以传递给不同的对象,所做出的响应可以是不同

的;

3)对消息的响应并不是必须的,对象可以响应消息,也可以不响应。

1.5什么是抽象和封装?

请举例说明。

抽象是将有关事物的共性归纳、集中的过程。

例如:

把所有具有大学生学籍的人归为一类,成为“大学生”,这就是一个抽象。

封装是指把数据和实现操作的代码集中起来放在对象内部,并尽可能隐藏对象的

内部细节。

例如:

每一台洗衣机都有出厂日期、机器编号等属性,也有启动、暂停、选择等

操作。

人们在使用洗衣机的时候只需要按下对应的按钮,而不用关心具体的内部

实现。

这就是封装。

1.6什么是继承?

请举例说明。

继承就是允许派生类使用基类的数据和操作,同时,派生类还可以增加新的操作

和数据。

例如:

哺乳动物是一种热血、有毛发、用奶哺育幼崽的动物;狗是有犬牙、食

肉、特定的骨骼结构、群居的哺乳动物。

狗就继承了哺乳动物。

1.7若类之间具有继承关系,则他们之间具有什么特征?

若类之间具有继承关系,则他们之间具有下列几个特征:

1)类间具有共享特征(包括数据和操作代码的共享);

2)类间具有差别或新增部分(包括非共享的数据和操作代码);

3)类具有层次结构。

1.8什么是单继承、多继承?

请举例说明。

单继承是指每个派生类只直接继承了一个基类的特征。

例如狗继承自哺乳动物。

多继承是指多个基类派生出一个派生类的继承关系。

比如玩具车同时继承自玩具

和车。

1.9什么是多态?

请举例说明。

多态是指不同的对象收到相同的消息时执行不同的操作。

例如,有一个窗口类对象,还有一个棋子类对象。

当我们发出“移动”消息时,

两个对象的行为不同。

1.10面向对象程序设计的主要优点是什么?

1.可提高程序的重用性;

2.可控制程序的复杂性;

3.可改善程序的可维护性;

4.能够更好地支持大型程序设计;

5.增强了计算机处理信息的范围;

能够很好地适应新的硬件环境。

2.1简述C++的主要特点。

1)C++是C的超集,保持与C的兼容。

2)保持了C的简洁、高效和接近汇编语言等特点,并对C的功能作了

不少扩充。

用C++编写的程序比C更安全,可读性更好,代码结构更为合理。

3)程序质量高。

4)增加了面向对象机制。

1.11

#include

usingnamespacestd;

intmain()

{

inta,b,d,min;

cout<<"Entertwonumbers:

";

cin>>a>>b;

min=a>b?

b:

a;

for(d=2;d

{

if(((a%d)==0)&&((b%d)==0))break;

}

if(d==min)

{

cout<<"Nocommondenominators"<

return0;

}

cout<<"Thelowestcommondenominatoris"<

return0;

}

1.12有效

1.13没有函数声明;

函数定义没有写返回值类型。

1.14

(1)等价,函数声明可以省略参数的名字。

(2)不等价,第二个的函数定义不能省略参数的名字。

1.15-2.10CDAAB

6.-2.15ACBDC

2.2-2.17DC

2.18

101

2.19

1010

2.20

10

20

2.21举例说明可以使用const替代#define以消除#define的不安全性。

#include

usingnamespacestd;

intmain()

{

inta=1;

#defineT1a+a

#defineT2T1-T1

cout<<"T2is"<

return0;

}

上面这个程序,初看应该输出T2is0

但是实际上,得出T2is2

如果把#define换成const,则可以输出想要的结果。

1.16用动态分配空间的方法,计算Fibonacci数列的前20项,并存储到动态分

配的空间中。

#include

usingnamespacestd;

intmain()

{

int*pi=newint[20];

*pi=1;

pi[1]=1;

for(inti=2;i<20;i++)

{

pi[i]=pi[i-2]+pi[i-1];

}

return0;}

1.17重载sroot函数,输出一个数的二次方根。

#include

usingnamespacestd;

doublesroot(intnum)

{

return(double)sqrt((double)num);

}

doublesroot(longnum)

{

return(double)sqrt((double)num);}

doublesroot(doublenum)

{

return(double)sqrt(num);

}

intmain()

{

return0;

}

1.18解决百钱问题。

将一元人民币换成1、2、5分的硬币,有多少种换法?

#include

usingnamespacestd;

intmain()

{

intnum=0;//总共换法的总数。

初始化为0。

for(inti=0;i<=100;i++){

for(intj=0;j<=50;j++)

{

if((i+2*j)>100){

break;

}

for(intk=0;k<=20;k++)

{

if((i+2*j+5*k)==100)

{

num++;

cout<<"1分"<

<<"5分"<

}

if((i+2*j+5*k)>100)

{

break;

}

}

}

}

cout<

return0;

}

1.19输入两个整数,按由小到大的顺序输出。

要求使用变量的引用。

#includeusingnamespacestd;

voidswap(int&a,int&b)

{

a=a+b;

b=a-b;

a=a-b;

}

intmain()

{

inta,b;

cin>>a>>b;

if(a>b)

{

swap(a,b);

}

cout<

return0;

}

1.20用二分法求解f(x)=0的根。

#include

usingnamespacestd;

doubleFun(doublex)

{

return35*x+25;//假设f(x)=35x+25

}

intmain()

{

doublea,b;

cin>>a;

if(Fun(a)==0)

{

cout<<"x="<

return0;

}

do

{

cin>>b;

}

while((Fun(a)*Fun(b))>=0);

if(Fun(b)==0)

{

cout<<"x="<

return0;

}

if(a>b)

{

a=a+b;

b=a-b;

a=a-b;

}

while

(1)

{

if(Fun((a+b)/2)==0)

{

cout<<"x="<<(a+b)/2<

return0;

}

if(Fun(a)*Fun((a+b)/2)<0)

{

b=(a+b)/2;

}

if(Fun(b)*Fun((a+b)/2)<0)

{

a=(a+b)/2;

}

}

return0;

}

1.21类声明的一般格式是什么?

class类名

{

[private:

]

私有数据成员和成员函数public:

公有数据成员和成员函数

}

1.22构造函数和析构函数的主要作用是什么?

它们各自有什么特性?

构造函数是一种特殊的成员函数,它主要用于为对象分配空间,进行

初始化。

构造函数的名字必须与类名相同,而不能由用户任意命名。

它可以有任意类型的

参数,但不能具有返回值类型。

析构函数通常用于执行一些清理任务,如释放分配给对象的内存空间等。

析构函数名与类名相同,但它前面必须加一个波浪号。

不能有返回值,也不能有

参数。

1.23什么是对象数组?

所谓对象数组,是指每一个数组元素都是对象的数组。

1.24什么是this指针?

它的主要作用是什么?

C++为成员函数提供了一个名为this的指针,这个指针称为自引用指

针。

每当创建一个对象时,系统就把this指针初始化为指向该对象。

一个类的所有对象合用一份成员函数,this指针可以帮助对象辨别出

当前调用的是自己的那个对象的数据成员和函数。

1.25友元函数有什么作用?

友元函数可以在类的外部访问类的私有成员或保护成员。

1.26

(1)声明并定义了P2,P3,并用默认无参构造函数初始化。

(2)声明并定义了P2,并调用Point类的拷贝构造函数用P1对P2进行初始

化。

(3)声明并定义了P2,并调用Point类的拷贝构造函数用P1对P2进行初始

化。

(4)调用拷贝构造函数,将P1的成员值赋值给P4的成员。

1.27-3.10BCCB

7.-3.15BAABA

2.3-3.17BB

10,20

30,48

50,68

70,80

90,16

11,120

1.28

Constructing

10

100

Destructing

1.29

3objectsinexistence

4objectsinexistenceafterallocation

3objectsinexistenceafterdeletion

1.30

Countingat0

Countingat9

1.31

Defaultconstructorcalled.

Defaultconstructorcalled.

Defaultconstructorcalled.

Construcotor:

a=1,b=2

Construcotor:

a=3,b=4

Construcotor:

a=5,b=6

1.32

Con.

Copycon.

default.

Copycon.

1.33

A=5

B=14

A=9

B=14

1.34

5,7

8.

1.35

Constructing

Constructing

A=5

B=15

A=10

B=15

Destructing

Destructing

1.36

voidpintStu();函数只有声明,没有定义。

age是私有成员,不能用对象直接调用。

1.37

voidprintStu()和voidsetSno(ints)没有加限定符Student:

:

voidsetAge(inta)在类中没有声明

1.38

构造函数不能定义为私有。

否则无法创建对象。

1.39下面是一个计算器类的定义,请完成该类成员函数的实现。

classcounter

{

public:

counter(intnumber);

voidincrement();//给原始值加1

voiddecrement();//给原始值减1

intgetvalue();//取的计数器值

intprint();//显示计数

private:

intvalue;

};

counter:

:

counter(intnumber)

{

value=number;

}

voidcounter:

:

increment()

{

++value;

}

voidcounter:

:

decrement()

{

--value;

}

intcounter:

:

getvalue()

{

returnvalue;

}

intcounter:

:

print()

{

cout<

returnvalue;

}

1.40根据注释语句提示,实现类Date的成员函数

#includeusingnamespacestd;

classDate

{

public:

voidprintDate();

voidsetDay(intd);voidsetMonth(intm);

voidsetYear(inty);

private:

intday,month,year;

};

voidDate:

:

printDate()

{

cout<<"今天是"<

endl;

}

voidDate:

:

setDay(intd)

{

day=d;}

voidDate:

:

setMonth(intm)

{

month=m;

}

voidDate:

:

setYear(inty)

{

year=y;

}

intmain()

{

DatetestDay;

testDay.setDay(5);

testDay.setMonth(10);

testDay.setYear(2003);

testDay.printDate();

return0;}

1.41建立类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径和

高度。

用类cylinder计算圆柱体的体积,并存储在一个double变量中。

在类cylinder中包含

一个成员函数vol,用来显示每个cylinder对象的体积。

constintPI=3.14;

classcylinder

{

private:

doubleradius,height,volume;

public:

cylinder(intrad,inthei);

doublegetVolume();

voidvol();

};

cylinder:

:

cylinder(intrad,inthei)

{

radius=rad;

height=hei;

}

doublecylinder:

:

getVolume()

{

volume=PI*radius*radius*height;

returnvolume;

}

voidcylinder:

:

vol()

{

cout<<"圆柱体的体积是:

"<

}

1.42构建一个类book,其中包含有两个私有数据成员qu和price,将qu初始化为1~5,将

price初始化为qu的10倍,建立一个有5个元素的数组对象。

显示每个对象数组元素的

qu*price值。

classbook

{

private:

intqu,price;

public:

book(intqu);

intmult();

};

book:

:

book(intq)

{

if(q<1||q>5)

{

qu=1;

}

else

{

qu=q;

}

price=10*qu;

}

intbook:

:

mult()

{

returnqu*price;

}

intmain()

{

bookbooks[5]={1,2,3,4,5};

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

{

cout<

}

}

1.43修改3.33,通过对象指针访问对象数组,使程序以相反的顺序显示每个对象数组元素

的qu*price值。

classbook

{

private:

intqu,price;

public:

book(intqu);

intmult();

};

book:

:

book(intq)

{

if(q<1||q>5)

{

qu=1;

}

else

{

qu=q;

}

price=10*qu;

}

intbook:

:

mult()

{

returnqu*price;

}

intmain()

{

bookbooks[5]={1,2,3,4,5};

book*p=books;

p+=4;

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

{

cout<mult()<<"";

--p;

}

return0;

}

1.44构建一个类Stock,含字符数组stockcode[]及整型数组成员quan、双精度型数据成员

price。

构造函数含3个参数:

字符数组na[]及q、p。

当定义Stock的类对象时,将对象的第

一个字符串参数赋给数据成员stockcode,第2和第3个参数分别赋给quan、price。

未设置

第2和第3个参数时,quan的值为1000,price的值为8.98.成员函数print没有形参,需使

用this指针,显示对象数据成员的内容。

编写程序显示对象数据成员的值。

#include

usingnamespacestd;

classStock

{

private:

charstockcode[25];

intquan;

doubleprice;

public:

Stock(charna[],intq=1000,doublep=8.98);

Stock(charna[]);

voidprint();

};

Stock:

:

Stock(charna[],intq=1000,doublep=8.98)

{

strcpy(stockcode,na);

quan=q;

price=p;

}

voidStock:

:

print()

{

cout<<"stockcode:

"<stockcode<<"quan:

"<quan

<<"price:

"<price<

}

intmain()

{

Stockstock1("600001",3000,5.67);

Stockstock2("600002");

stock1.print();

stock2.print();

return0;

}

1.45编写一个程序,已有若干学生的数据,包括学号、姓名、成绩,要求输出这些学生的

数据并计算出学生人数和平均成绩(要求将学生人数和总成绩用静态数据成员表示)。

#includeusingnamespacestd;

classstudent

{

private:

charname[25],studentNo[10];

intscore;

staticintsum;

staticinttotalScore;

public:

student(charna[],charstuNo[],intsc);

voidshow();

staticvoidshowTotal();

};

student:

:

student(charna[],charstuNo[],intsc)

{

strcpy(name,na);

strcpy(studentNo,stuNo);

score=sc;

++sum;

totalScore+=sc;

}

voidstudent:

:

show()

{

cout<<"姓名:

"<

cout<<"学号:

"<

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

当前位置:首页 > 工程科技 > 冶金矿山地质

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

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