精品午夜福利中文字av_国产成人综合网_av毛片免费观看网站_欧美影视国产综合_野花香视频中文免费观看_亚洲无码要在线视频_又粗又大又用力大交换好大好爽小静_欧美贵妇v办公室高跟鞋_亚洲国产高清a∨网站_免费中文少妇亚洲

知ing

C++語言程序設(shè)計(第4版)

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

濁晦 上傳

查看本書

?

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

?

????? 5-1 什么叫做作用域?有哪幾種類型的作用域?

?

????? 解:

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

?

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

?

????? 解:

????? 可見性是標識符是否可以引用的問題;

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

?

?

????? 5-3 下面的程序的運行結(jié)果是什么,實際運行一下,看看與你的設(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 << " ";

????? }

?

????? 解:

????? 程序運行輸出:

????? 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è)有兩個無關(guān)系的類Engine和Fuel,使用時,怎樣允許Fuel成員訪問Engine中的私有和保護的成員?

?

?? ???解:

????? 源程序:

????? 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ù)成員?它有何特點?

?

????? 解:

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

?

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

?

????? 解:

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

?

????? 5-7

????? 定義一個Cat類,擁有靜態(tài)數(shù)據(jù)成員HowManyCats,記錄Cat的個體數(shù)目;靜態(tài)成員函數(shù)GetHowMany(),存取HowManyCats。設(shè)計程序測試這個類,體會靜態(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! ";

????? }

????? 程序運行輸出:

????? 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ù)?什么叫做友元類?

?

????? 解:

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

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

?

??? ??解:

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

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

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

?

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

?

????? 解:

????? 可以,例如:

????? private:

????? static int a;

?

????? 5-11

????? 在一個文件中定義一個全局變量n,主函數(shù)main(),在另一個文件中定義函數(shù)fn1(),在main()中對n賦值,再調(diào)用fn1(),在fn1()中也對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;

????? }

????? 程序運行輸出:

????? n的值為30

?

????? 5-12 在函數(shù)fn1()中定義一個靜態(tài)變量n,fn1()中對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();

????? }

????? 程序運行輸出:

????? 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,函數(shù)h(X*),滿足:類X有私有成員i,Y的成員函數(shù)g(X*)是X的友元函數(shù),實現(xiàn)對X的成員i加1,類Z是類X的友元類,其成員函數(shù)f(X*)實現(xiàn)對X的成員i加5,函數(shù)h(X*)是X的友元函數(shù),實現(xiàn)對X的成員i加10。在一個文件中定義和實現(xiàn)類,在另一個文件中實現(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

????? 程序運行輸出:無

?

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

?

????? 解:

????? 源程序:

????? #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;

????? }

????? 程序運行輸出:

????? 9

?

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

?

????? 解:

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

?




查看更多