您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第05章(参考答案)
第五章C++程序的基本结构5-1什么叫做作用域?有哪几种类型的作用域?解:作用域讨论的是标识符的有效范围,作用域是一个标识符在程序正文中有效的区域。C++的作用域分为函数原形作用域、块作用域(局部作用域)、类作用域和文件作用域.5-2什么叫做可见性?可见性的一般规则是什么?解:可见性是标识符是否可以引用的问题;可见性的一般规则是:标识符要声明在前,引用在后,在同一作用域中,不能声明同名的标识符。对于在不同的作用域声明的标识符,遵循的原则是:若有两个或多个具有包含关系的作用域,外层声明的标识符如果在内层没有声明同名标识符时仍可见,如果内层声明了同名标识符则外层标识符不可见。5-3下面的程序的运行结果是什么,实际运行一下,看看与你的设想有何不同。#includeiostream.hvoidmyFunction();intx=5,y=7;intmain(){coutxfrommain:x\n;coutyfrommain:y\n\n;myFunction();coutBackfrommyFunction!\n\n;coutxfrommain:x\n;coutyfrommain:y\n;return0;}voidmyFunction(){inty=10;coutxfrommyFunction:x\n;coutyfrommyFunction:y\n\n;}解:程序运行输出:xfrommain:5yfrommain:7xfrommyFunction:5yfrommyFunction:10BackfrommyFunction!xfrommain:5yfrommain:75-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。设计程序测试这个类,体会静态数据成员和静态成员函数的用法。解:源程序:#includeiostream.hclassCat{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;iMaxCats;i++){CatHouse[i]=newCat(i);TelepathicFunction();}for(i=0;iMaxCats;i++){deleteCatHouse[i];TelepathicFunction();}return0;}voidTelepathicFunction(){coutThereareCat::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最后的值。解:#includeiostream.h#includefn1.hintn;voidmain(){n=20;fn1();coutn的值为n;}//fn1.h文件externintn;voidfn1(){n=30;}程序运行输出:n的值为305-12在函数fn1()中定义一个静态变量n,fn1()中对n的值加1,在主函数中,调用fn1()十次,显示n的值。解:#includeiostream.hvoidfn1(){staticintn=0;n++;coutn的值为nendl;}voidmain(){for(inti=0;i10;i++)fn1();}程序运行输出:n的值为1n的值为2n的值为3n的值为4n的值为5n的值为6n的值为7n的值为8n的值为9n的值为105-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()函数。解:#includemy_x_y_z.hvoidmain(){Xx;Zz;z.f(&x);}//my_x_y_z.h文件#ifndefMY_X_Y_Z_HclassX;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(),计算二者的重量和。解:源程序:#includeiostream.hclassBoat;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);couttotalWeight(c1,b1)endl;}程序运行输出:95-15如果在类模板的定义中有一个静态数据成员,则在程序运行中会产生多少个相应的静态变量?解:这个类模板的每一个实例类都会产生一个相应的静态变量。
本文标题:第05章(参考答案)
链接地址:https://www.777doc.com/doc-2083920 .html