第05章 参考答案.docx

上传人:b****4 文档编号:4011861 上传时间:2023-05-06 格式:DOCX 页数:11 大小:16.68KB
下载 相关 举报
第05章 参考答案.docx_第1页
第1页 / 共11页
第05章 参考答案.docx_第2页
第2页 / 共11页
第05章 参考答案.docx_第3页
第3页 / 共11页
第05章 参考答案.docx_第4页
第4页 / 共11页
第05章 参考答案.docx_第5页
第5页 / 共11页
第05章 参考答案.docx_第6页
第6页 / 共11页
第05章 参考答案.docx_第7页
第7页 / 共11页
第05章 参考答案.docx_第8页
第8页 / 共11页
第05章 参考答案.docx_第9页
第9页 / 共11页
第05章 参考答案.docx_第10页
第10页 / 共11页
第05章 参考答案.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

第05章 参考答案.docx

《第05章 参考答案.docx》由会员分享,可在线阅读,更多相关《第05章 参考答案.docx(11页珍藏版)》请在冰点文库上搜索。

第05章 参考答案.docx

第05章参考答案

第五章C++程序的基本结构

5-1什么叫做作用域?

有哪几种类型的作用域?

解:

作用域讨论的是标识符的有效范围,作用域是一个标识符在程序正文中有效的区域。

C++的作用域分为函数原形作用域、块作用域(局部作用域)、类作用域和文件作用域.

5-2什么叫做可见性?

可见性的一般规则是什么?

解:

可见性是标识符是否可以引用的问题;

可见性的一般规则是:

标识符要声明在前,引用在后,在同一作用域中,不能声明同名的标识符。

对于在不同的作用域声明的标识符,遵循的原则是:

若有两个或多个具有包含关系的作用域,外层声明的标识符如果在内层没有声明同名标识符时仍可见,如果内层声明了同名标识符则外层标识符不可见。

5-3下面的程序的运行结果是什么,实际运行一下,看看与你的设想有何不同。

#include

voidmyFunction();

intx=5,y=7;

intmain()

{

cout<<"xfrommain:

"<

cout<<"yfrommain:

"<

myFunction();

cout<<"BackfrommyFunction!

\n\n";

cout<<"xfrommain:

"<

cout<<"yfrommain:

"<

return0;

}

voidmyFunction()

{

inty=10;

cout<<"xfrommyFunction:

"<

cout<<"yfrommyFunction:

"<

}

解:

程序运行输出:

xfrommain:

5

yfrommain:

7

xfrommyFunction:

5

yfrommyFunction:

10

BackfrommyFunction!

xfrommain:

5

yfrommain:

7

5-4假设有两个无关系的类Engine和Fuel,使用时,怎样允许Fuel成员访问Engine中的私有和保护的成员?

解:

源程序:

classfuel;

classengine

{

friendclassfuel;

private;

intpowerlevel;

public;

engine(){powerLevel=0;}

voidengine_fn(fuel&f);

};

classfuel

{

friendclassengine;

private;

intfuelLevel;

public:

fuel(){fuelLevel=0;}

voidfuel_fn(engine&e);

};

5-5什么叫做静态数据成员?

它有何特点?

解:

类的静态数据成员是类的数据成员的一种特例,采用static关键字来声明。

对于类的普通数据成员,每一个类的对象都拥有一个拷贝,就是说每个对象的同名数据成员可以分别存储不同的数值,这也是保证对象拥有自身区别于其它对象的特征的需要,但是静态数据成员,每个类只要一个拷贝,由所有该类的对象共同维护和使用,这个共同维护、使用也就实现了同一类的不同对象之间的数据共享。

5-6什么叫做静态函数成员?

它有何特点?

解:

使用static关键字声明的函数成员是静态的,静态函数成员属于整个类,同一个类的所有对象共同维护,为这些对象所共享。

静态函数成员具有以下两个方面的好处,一是由于静态成员函数只能直接访问同一个类的静态数据成员,可以保证不会对该类的其余数据成员造成负面影响;二是同一个类只维护一个静态函数成员的拷贝,节约了系统的开销,提高程序的运行效率。

5-7定义一个Cat类,拥有静态数据成员HowManyCats,记录Cat的个体数目;静态成员函数GetHowMany(),存取HowManyCats。

设计程序测试这个类,体会静态数据成员和静态成员函数的用法。

解:

源程序:

#include

classCat

{

public:

Cat(intage):

itsAge(age){HowManyCats++;}

virtual~Cat(){HowManyCats--;}

virtualintGetAge(){returnitsAge;}

virtualvoidSetAge(intage){itsAge=age;}

staticintGetHowMany(){returnHowManyCats;}

private:

intitsAge;

staticintHowManyCats;

};

intCat:

:

HowManyCats=0;

voidTelepathicFunction();

intmain()

{

constintMaxCats=5;

Cat*CatHouse[MaxCats];inti;

for(i=0;i

{

CatHouse[i]=newCat(i);

TelepathicFunction();

}

for(i=0;i

{

deleteCatHouse[i];

TelepathicFunction();

}

return0;

}

voidTelepathicFunction()

{

cout<<"Thereare"<

:

GetHowMany()<<"catsalive!

\n";

}

程序运行输出:

Thereare1catsalive!

Thereare2catsalive!

Thereare3catsalive!

Thereare4catsalive!

Thereare5catsalive!

Thereare4catsalive!

Thereare3catsalive!

Thereare2catsalive!

Thereare1catsalive!

Thereare0catsalive!

5-8什么叫做友元函数?

什么叫做友元类?

解:

友元函数是使用friend关键字声明的函数,它可以访问相应类的保护成员和私有成员。

友元类是使用friend关键字声明的类,它的所有成员函数都是相应类的友元函数。

5-9如果类A是类B的友元,类B是类C的友元,类D是类A的派生类,那么类B是类A的友元吗?

类C是类A的友元吗?

类D是类B的友元吗?

解:

类B不是类A的友元,友元关系不具有交换性;

类C不是类A的友元,友元关系不具有传递性;

类D不是类B的友元,友元关系不能被继承。

5-10静态成员变量可以为私有的吗?

声明一个私有的静态整型成员变量。

解:

可以,例如:

private:

staticinta;

5-11在一个文件中定义一个全局变量n,主函数main(),在另一个文件中定义函数fn1(),在main()中对n赋值,再调用fn1(),在fn1()中也对n赋值,显示n最后的值。

解:

#include

#include"fn1.h"

intn;

voidmain()

{

n=20;

fn1();

cout<<"n的值为"<

}

//fn1.h文件

externintn;

voidfn1()

{

n=30;

}

程序运行输出:

n的值为30

5-12在函数fn1()中定义一个静态变量n,fn1()中对n的值加1,在主函数中,调用fn1()十次,显示n的值。

解:

#include

voidfn1()

{

staticintn=0;

n++;

cout<<"n的值为"<

}

voidmain()

{

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

fn1();

}

程序运行输出:

n的值为1

n的值为2

n的值为3

n的值为4

n的值为5

n的值为6

n的值为7

n的值为8

n的值为9

n的值为10

5-13定义类X、Y、Z,函数h(X*),满足:

类X有私有成员i,Y的成员函数g(X*)是X的友元函数,实现对X的成员i加1,类Z是类X的友元类,其成员函数f(X*)实现对X的成员i加5,函数h(X*)是X的友元函数,实现对X的成员i加10。

在一个文件中定义和实现类,在另一个文件中实现main()函数。

解:

#include"my_x_y_z.h"

voidmain()

{

Xx;

Zz;

z.f(&x);

}

//my_x_y_z.h文件

#ifndefMY_X_Y_Z_H

classX;

classY{

voidg(X*);

};

classX

{

private:

inti;

public:

X(){i=0;}

friendvoidh(X*);

friendvoidY:

:

g(X*);

friendclassZ;

};

voidh(X*x){x->i=+10;}

voidY:

:

g(X*x){x->i++;}

classZ{

public:

voidf(X*x){x->i+=5;}

};

#endif//MY_X_Y_Z_H

程序运行输出:

5-14定义Boat与Car两个类,二者都有weight属性,定义二者的一个友元函数totalWeight(),计算二者的重量和。

解:

源程序:

#include

classBoat;

classCar

{

private:

intweight;

public:

Car(intj){weight=j;}

friendinttotalWeight(Car&aCar,Boat&aBoat);

};

classBoat

{

private:

intweight;

public:

Boat(intj){weight=j;}

friendinttotalWeight(Car&aCar,Boat&aBoat);

};

inttotalWeight(Car&aCar,Boat&aBoat)

{

returnaCar.weight+aBoat.weight;

}

voidmain()

{

Carc1(4);

Boatb1(5);

cout<

}

程序运行输出:

9

5-15如果在类模板的定义中有一个静态数据成员,则在程序运行中会产生多少个相应的静态变量?

解:

这个类模板的每一个实例类都会产生一个相应的静态变量。

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2