国产最新a级毛片无码专区_综合亚洲欧美日韩久久精品_日本成年片在线观看66_一本到九九av电影_一级毛片免费网站播放_国内精品久久人无码大片_国产人成视频99在线观看_欧美不卡在线一本二本_国产亚洲电影av_可以免费看黄色软件

知ing

C++語(yǔ)言程序設(shè)計(jì)(第4版)

鄭莉、董淵、何江舟 編 / 清華大學(xué)出版社

濁晦 上傳

查看本書(shū)

?

????? 第 五 章 ? ??C++程序的基本結(jié)構(gòu)

?

????? 5-1 什么叫做作用域?有哪幾種類(lèi)型的作用域?

?

????? 解:

????? 作用域討論的是標(biāo)識(shí)符的有效范圍,作用域是一個(gè)標(biāo)識(shí)符在程序正文中有效的區(qū)域。C++的作用域分為函數(shù)原形作用域、塊作用域(局部作用域)、類(lèi)作用域和文件作用域.

?

????? 5-2 什么叫做可見(jiàn)性?可見(jiàn)性的一般規(guī)則是什么?

?

????? 解:

????? 可見(jiàn)性是標(biāo)識(shí)符是否可以引用的問(wèn)題;

????? 可見(jiàn)性的一般規(guī)則是:標(biāo)識(shí)符要聲明在前,引用在后,在同一作用域中,不能聲明同名的標(biāo)識(shí)符。對(duì)于在不同的作用域聲明的標(biāo)識(shí)符,遵循的原則是:若有兩個(gè)或多個(gè)具有包含關(guān)系的作用域,外層聲明的標(biāo)識(shí)符如果在內(nèi)層沒(méi)有聲明同名標(biāo)識(shí)符時(shí)仍可見(jiàn),如果內(nèi)層聲明了同名標(biāo)識(shí)符則外層標(biāo)識(shí)符不可見(jiàn)。

?

?

????? 5-3 下面的程序的運(yùn)行結(jié)果是什么,實(shí)際運(yùn)行一下,看看與你的設(shè)想有何不同。

????? #include <iostream.h>

????? void myFunction();

????? int x = 5, y = 7;

????? int main()

????? {

????? cout << "x from main: " << x << " ";

????? cout << "y from main: " << y << " ";

????? myFunction();

????? cout << "Back from myFunction! ";

????? cout << "x from main: " << x << " ";

????? cout << "y from main: " << y << " ";

????? return 0;

????? }

????? void myFunction()

????? {

????? int y = 10;

????? cout << "x from myFunction: " << x << " ";

????? cout << "y from myFunction: " << y << " ";

????? }

?

????? 解:

????? 程序運(yùn)行輸出:

????? x from main: 5

????? y from main: 7

????? x from myFunction: 5

????? y from myFunction: 10

????? Back from myFunction!

????? x from main: 5

????? y from main: 7

?

?

????? 5-4 假設(shè)有兩個(gè)無(wú)關(guān)系的類(lèi)Engine和Fuel,使用時(shí),怎樣允許Fuel成員訪問(wèn)Engine中的私有和保護(hù)的成員?

?

?? ???解:

????? 源程序:

????? class fuel;

????? class engine

????? {

????? friend class fuel;

????? private;

????? int powerlevel;

????? public;

????? engine(){ powerLevel = 0;}

????? void engine_fn(fuel &f);

????? };

????? class fuel

????? {

????? friend class engine;

????? private;

????? int fuelLevel;

????? public:

????? fuel(){ fuelLevel = 0;}

????? void fuel_fn( engine &e);

????? };

????? 5-5 什么叫做靜態(tài)數(shù)據(jù)成員?它有何特點(diǎn)?

?

????? 解:

????? 類(lèi)的靜態(tài)數(shù)據(jù)成員是類(lèi)的數(shù)據(jù)成員的一種特例,采用static關(guān)鍵字來(lái)聲明。對(duì)于類(lèi)的普通數(shù)據(jù)成員,每一個(gè)類(lèi)的對(duì)象都擁有一個(gè)拷貝,就是說(shuō)每個(gè)對(duì)象的同名數(shù)據(jù)成員可以分別存儲(chǔ)不同的數(shù)值,這也是保證對(duì)象擁有自身區(qū)別于其它對(duì)象的特征的需要,但是靜態(tài)數(shù)據(jù)成員,每個(gè)類(lèi)只要一個(gè)拷貝,由所有該類(lèi)的對(duì)象共同維護(hù)和使用,這個(gè)共同維護(hù)、使用也就實(shí)現(xiàn)了同一類(lèi)的不同對(duì)象之間的數(shù)據(jù)共享。

?

????? 5-6 什么叫做靜態(tài)函數(shù)成員?它有何特點(diǎn)?

?

????? 解:

????? 使用static關(guān)鍵字聲明的函數(shù)成員是靜態(tài)的,靜態(tài)函數(shù)成員屬于整個(gè)類(lèi),同一個(gè)類(lèi)的所有對(duì)象共同維護(hù),為這些對(duì)象所共享。靜態(tài)函數(shù)成員具有以下兩個(gè)方面的好處,一是由于靜態(tài)成員函數(shù)只能直接訪問(wèn)同一個(gè)類(lèi)的靜態(tài)數(shù)據(jù)成員,可以保證不會(huì)對(duì)該類(lèi)的其余數(shù)據(jù)成員造成負(fù)面影響;二是同一個(gè)類(lèi)只維護(hù)一個(gè)靜態(tài)函數(shù)成員的拷貝,節(jié)約了系統(tǒng)的開(kāi)銷(xiāo),提高程序的運(yùn)行效率。

?

????? 5-7

????? 定義一個(gè)Cat類(lèi),擁有靜態(tài)數(shù)據(jù)成員HowManyCats,記錄Cat的個(gè)體數(shù)目;靜態(tài)成員函數(shù)GetHowMany(),存取HowManyCats。設(shè)計(jì)程序測(cè)試這個(gè)類(lèi),體會(huì)靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)的用法。

?

????? 解:

????? 源程序:

????? #include <iostream.h>

????? class Cat

????? {

????? public:

????? Cat(int age):itsAge(age){HowManyCats++; }

????? virtual ~Cat() { HowManyCats--; }

????? virtual int GetAge() { return itsAge; }

????? virtual void SetAge(int age) { itsAge = age; }

????? static int GetHowMany() { return HowManyCats; }

????? private:

????? int itsAge;

????? static int HowManyCats;

????? };

????? int Cat::HowManyCats = 0;

????? void TelepathicFunction();

????? int main()

????? {

????? const int MaxCats = 5;

????? Cat *CatHouse[MaxCats]; int i;

????? for (i = 0; i<MaxCats; i++)

????? {

????? CatHouse[i] = new Cat(i);

????? TelepathicFunction();

????? }

????? for ( i = 0; i<MaxCats; i++)

????? {

????? delete CatHouse[i];

????? TelepathicFunction();

????? }

????? return 0;

????? }

????? void TelepathicFunction()

????? {

????? cout << "There are " << Cat::GetHowMany() << " cats alive! ";

????? }

????? 程序運(yùn)行輸出:

????? There are 1 cats alive!

????? There are 2 cats alive!

????? There are 3 cats alive!

????? There are 4 cats alive!

????? There are 5 cats alive!

????? There are 4 cats alive!

????? There are 3 cats alive!

????? There are 2 cats alive!

????? There are 1 cats alive!

????? There are 0 cats alive!

?

????? 5-8 什么叫做友元函數(shù)?什么叫做友元類(lèi)?

?

????? 解:

????? 友元函數(shù)是使用friend關(guān)鍵字聲明的函數(shù),它可以訪問(wèn)相應(yīng)類(lèi)的保護(hù)成員和私有成員。友元類(lèi)是使用friend關(guān)鍵字聲明的類(lèi),它的所有成員函數(shù)都是相應(yīng)類(lèi)的友元函數(shù)。

????? 5-9 如果類(lèi)A是類(lèi)B的友元,類(lèi)B是類(lèi)C的友元,類(lèi)D是類(lèi)A的派生類(lèi),那么類(lèi)B是類(lèi)A的友元嗎?類(lèi)C是類(lèi)A的友元嗎?類(lèi)D是類(lèi)B的友元嗎?

?

??? ??解:

????? 類(lèi)B不是類(lèi)A的友元,友元關(guān)系不具有交換性;

????? 類(lèi)C不是類(lèi)A的友元,友元關(guān)系不具有傳遞性;

????? 類(lèi)D不是類(lèi)B的友元,友元關(guān)系不能被繼承。

?

????? 5-10 靜態(tài)成員變量可以為私有的嗎?聲明一個(gè)私有的靜態(tài)整型成員變量。

?

????? 解:

????? 可以,例如:

????? private:

????? static int a;

?

????? 5-11

????? 在一個(gè)文件中定義一個(gè)全局變量n,主函數(shù)main(),在另一個(gè)文件中定義函數(shù)fn1(),在main()中對(duì)n賦值,再調(diào)用fn1(),在fn1()中也對(duì)n賦值,顯示n最后的值。

?

????? 解:

????? #include <iostream.h>

????? #include "fn1.h"

????? int n;

????? void main()

????? {

????? n = 20;

????? fn1();

????? cout << "n的值為" <<n;

????? }

????? // fn1.h文件

????? extern int n;

????? void fn1()

?? ???{

????? n=30;

????? }

????? 程序運(yùn)行輸出:

????? n的值為30

?

????? 5-12 在函數(shù)fn1()中定義一個(gè)靜態(tài)變量n,fn1()中對(duì)n的值加1,在主函數(shù)中,調(diào)用fn1()十次,顯示n的值。

?

????? 解:

????? #include <iostream.h>

????? void fn1()

????? {

????? static int n = 0;

????? n++;

????? cout << "n的值為" << n <<endl;

???? ?}

????? void main()

????? {

????? for(int i = 0; i < 10; i++)

????? fn1();

????? }

????? 程序運(yùn)行輸出:

????? n的值為1

????? n的值為2

????? n的值為3

????? n的值為4

????? n的值為5

????? n的值為6

????? n的值為7

????? n的值為8

????? n的值為9

????? n的值為10

?

????? 5-13

????? 定義類(lèi)X、Y、Z,函數(shù)h(X*),滿足:類(lèi)X有私有成員i,Y的成員函數(shù)g(X*)是X的友元函數(shù),實(shí)現(xiàn)對(duì)X的成員i加1,類(lèi)Z是類(lèi)X的友元類(lèi),其成員函數(shù)f(X*)實(shí)現(xiàn)對(duì)X的成員i加5,函數(shù)h(X*)是X的友元函數(shù),實(shí)現(xiàn)對(duì)X的成員i加10。在一個(gè)文件中定義和實(shí)現(xiàn)類(lèi),在另一個(gè)文件中實(shí)現(xiàn)main()函數(shù)。

?

????? 解:

????? #include "my_x_y_z.h"

????? void main()

????? {

????? X x;

????? Z z;

????? z.f(&x);

????? }

????? // my_x_y_z.h文件

????? #ifndef MY_X_Y_Z_H

????? class X;

????? class Y {

????? void g(X*);

????? };

????? class X

????? {

????? private:

????? int i;

????? public:

????? X(){i=0;}

????? friend void h(X*);

????? friend void Y::g(X*);

????? friend class Z;

????? };

??? ??void h(X* x) { x->i =+10; }

????? void Y::g(X* x) { x->i ++; }

????? class Z {

????? public:

????? void f(X* x) { x->i += 5; }

????? };

????? #endif // MY_X_Y_Z_H

????? 程序運(yùn)行輸出:無(wú)

?

????? 5-14 定義Boat與Car兩個(gè)類(lèi),二者都有weight屬性,定義二者的一個(gè)友元函數(shù)totalWeight(),計(jì)算二者的重量和。

?

????? 解:

????? 源程序:

????? #include <iostream.h>

????? class Boat;

????? class Car

????? {

????? private:

????? int weight;

????? public:

????? Car(int j){weight = j;}

????? friend int totalWeight(Car &aCar, Boat &aBoat);

????? };

????? class Boat

????? {

? ????private:

????? int weight;

????? public:

????? Boat(int j){weight = j;}

????? friend int totalWeight(Car &aCar, Boat &aBoat);

????? };

????? int totalWeight(Car &aCar, Boat &aBoat)

????? {

????? return aCar.weight + aBoat.weight;

????? }

????? void main()

????? {

????? Car c1(4);

????? Boat b1(5);

????? cout << totalWeight(c1, b1) << endl;

????? }

????? 程序運(yùn)行輸出:

????? 9

?

????? 5-15 如果在類(lèi)模板的定義中有一個(gè)靜態(tài)數(shù)據(jù)成員,則在程序運(yùn)行中會(huì)產(chǎn)生多少個(gè)相應(yīng)的靜態(tài)變量?

?

????? 解:

????? 這個(gè)類(lèi)模板的每一個(gè)實(shí)例類(lèi)都會(huì)產(chǎn)生一個(gè)相應(yīng)的靜態(tài)變量。

?




查看更多