第3類和對象舉例_第1頁
第3類和對象舉例_第2頁
第3類和對象舉例_第3頁
第3類和對象舉例_第4頁
第3類和對象舉例_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、c+程序設(shè)計(jì)第第3 3講講 類和對象的簡單應(yīng)用舉例類和對象的簡單應(yīng)用舉例#include void swap3(int &x,int &y) int temp; temp=x; x=y; y=temp; coutx=x, y=yendl;void main() int a(5),b(9); swap3(a,b); couta=a, b=bendl;輸出:輸出:x=9,y=5a=9,b=5例:分析下列程序的輸出結(jié)果例:分析下列程序的輸出結(jié)果(引用調(diào)用引用調(diào)用)。用用const限定引用限定引用由于引用作為參數(shù)時(shí),函數(shù)內(nèi)對引用的修改等于由于引用作為參數(shù)時(shí),函數(shù)內(nèi)對引用的修改等于對實(shí)參

2、的修改,因此一不注意就會造成錯誤。保護(hù)對實(shí)參的修改,因此一不注意就會造成錯誤。保護(hù)實(shí)參不被修改的方法是傳遞實(shí)參不被修改的方法是傳遞const指針指針或或const引用引用。void swap(const int &rx,const int &ry) int temp; temp=rx; rx=ry; /不允許,不允許,rx是常量引用是常量引用 ry=temp; /不允許,不允許,ry是常量引用是常量引用符號常量:符號常量:const 類型定義符類型定義符 符號名符號名=初值初值;例如:例如: const int price=30; 經(jīng)經(jīng)const修飾后便不能修改此符號名之值。修

3、飾后便不能修改此符號名之值。例:例: const int sumvalue=10; 對于簡單類型的常量,對于簡單類型的常量,const可在類型符的前或后可在類型符的前或后 或或 int const sumvalue=10; sumvalue=0; /錯誤錯誤 使用使用const的目的是替代的目的是替代c語言中的編語言中的編譯預(yù)處理命令譯預(yù)處理命令#define(常量定義),但比(常量定義),但比它更加語義精確,因?yàn)樗诱Z義精確,因?yàn)?define無法準(zhǔn)確地?zé)o法準(zhǔn)確地反映常量的數(shù)據(jù)類型反映常量的數(shù)據(jù)類型。 void main()const double pi = 3.1415926535898

4、; /定義圓周率常量定義圓周率常量pidouble radius; /定義圓半徑變量定義圓半徑變量double area; /定義圓面積變量定義圓面積變量double circumference; /定義圓周長變量定義圓周長變量cout radius;area = pi*radius*radius;circumference = 2.0*pi*radius;cout “area of circle of radius ” radius “ is ” area “ n”;cout “and its circumference is ” circumference “ n”; radius=25.

5、6; /正確正確 pi=2.5; /錯誤錯誤1. const是一個(gè)是一個(gè)類型說明符類型說明符,它將一個(gè)變量變?yōu)橐粋€(gè)符,它將一個(gè)變量變?yōu)橐粋€(gè)符號常量(相當(dāng)于一個(gè)只讀變量)。例如:號常量(相當(dāng)于一個(gè)只讀變量)。例如:const double pi=3.14; /常量經(jīng)常用大寫名稱表示常量經(jīng)常用大寫名稱表示用用const定義的定義的pi為符號常量,不僅有數(shù)據(jù)類型,而且為符號常量,不僅有數(shù)據(jù)類型,而且還有值,必須要有初值,其值在程序中不可變。編譯還有值,必須要有初值,其值在程序中不可變。編譯時(shí)會做檢查。時(shí)會做檢查。#define pi 3.14 / 是一個(gè)無參宏定義是一個(gè)無參宏定義無參宏不是符號常量,

6、沒有數(shù)據(jù)類型,沒有值,在內(nèi)無參宏不是符號常量,沒有數(shù)據(jù)類型,沒有值,在內(nèi)存中不分配地址。存中不分配地址。宏定義在預(yù)編譯時(shí),只進(jìn)行簡單的宏定義在預(yù)編譯時(shí),只進(jìn)行簡單的替換,不做語法檢查替換,不做語法檢查。const與與#define的區(qū)別的區(qū)別:2.由由#define所定義的符號名為全局性常量,所定義的符號名為全局性常量,因而在整個(gè)程序中應(yīng)保持符號名的唯一性;因而在整個(gè)程序中應(yīng)保持符號名的唯一性;用用#define定義的常量的作用域是從定義時(shí)開始,定義的常量的作用域是從定義時(shí)開始,直到使用直到使用#undef取消定義時(shí)為止,如果不取消定取消定義時(shí)為止,如果不取消定義,直到整個(gè)文件結(jié)束義,直到整個(gè)

7、文件結(jié)束const可以說明一個(gè)局部或全局性同名常量可以說明一個(gè)局部或全局性同名常量(據(jù)此可以改變(據(jù)此可以改變const符號名之值)。符號名之值)。3.另外在語法方面,另外在語法方面,#define為編譯預(yù)處理命為編譯預(yù)處理命令,而令,而const為定義符,語句以為定義符,語句以“;”結(jié)束。結(jié)束。#define min 1const int max=100;void main(void)#define min 2 /錯誤,不能再定義同名常量錯誤,不能再定義同名常量 const int max=200; /可以再定義同名局部常量可以再定義同名局部常量 1. 類和對象的簡單應(yīng)用舉例#include

8、 class time public: int hour, minute, sec; ;int main( ) time t1; cint1.hour; cint1.minute; cint1.sec; coutt1.hour:t1.minute:t1.secendl; return 0;/定義定義time類類 /數(shù)據(jù)成員為公用的數(shù)據(jù)成員為公用的/定義定義time類的對象類的對象t1/為為t1的成員輸入數(shù)據(jù),的成員輸入數(shù)據(jù),/其中通過對象名引用其數(shù)據(jù)成員其中通過對象名引用其數(shù)據(jù)成員例例1 1、最簡單的例子(引用一個(gè)對象)、最簡單的例子(引用一個(gè)對象)在引用成員時(shí),不要忘記在引用成員時(shí),不要忘記

9、對象名對象名如果刪去這如果刪去這3 3個(gè)輸入語句,個(gè)輸入語句,則輸出結(jié)果是不可預(yù)知的則輸出結(jié)果是不可預(yù)知的1. 類和對象的簡單應(yīng)用舉例#include class time private: int hour, minute, sec; public: void inputtime() cinhour; cinminute; cinsec; void outtime() couthour:minute:secendl; ;/定義定義time類類 /數(shù)據(jù)成員為私有的數(shù)據(jù)成員為私有的例例1 1、最簡單的例子(引用一個(gè)對象)、最簡單的例子(引用一個(gè)對象)void main( ) time t1; t

10、1.inputtime(); t1.outtime();1.1 類和對象的簡單應(yīng)用舉例void main() time t1,t2,t3; /定義對象定義對象t1、t2、t3 t1.inputtime();t1.outtime(); t2.inputtime(); t2.outtime(); t3.inputtime();t3.outtime();例例2 2a a、引用多個(gè)對象的成員、引用多個(gè)對象的成員8.5 類和對象的簡單應(yīng)用舉例例例2b2b、引用多個(gè)對象的成員、引用多個(gè)對象的成員void set_time(time& t) /定義函數(shù),形參為引用變量定義函數(shù),形參為引用變量t.in

11、puttime();t.inputtime();void show_time(time& t) /定義函數(shù),形參為引用變量定義函數(shù),形參為引用變量 t.outtime();t.outtime();int main() time t1,t2,t3; set_time(t1);show_time(t1); set_time(t2);show_time(t2); set_time(t1);show_time(t1); return 0;8.6 類和對象的簡單應(yīng)用舉例例例2c2c、引用多個(gè)對象的成員、引用多個(gè)對象的成員數(shù)據(jù)成員的值不再由鍵盤輸入,而是在調(diào)用函數(shù)時(shí)由實(shí)參提供,數(shù)據(jù)成員的值不再由鍵

12、盤輸入,而是在調(diào)用函數(shù)時(shí)由實(shí)參提供,并在函數(shù)中使用了默認(rèn)參數(shù)。并在函數(shù)中使用了默認(rèn)參數(shù)。#include using namespace std;class time private: int hour, minute, sec; public: void settime(int h,int m,int s) hour=h; minute=m; sec=s; void shoutime() couthour:minute:secendl; ;int main() time t1; t1.settime(12,15,10);t1.shoutime(); return 0;#include cla

13、ss time private: int hour, minute, sec; public: void settime(int h,int m,int s=20) hour=h; minute=m; sec=s; void shoutime() couthour:minute:secendl; ;int main() time t1; t1.settime(12,15);t1.shoutime(); return 0;輸出結(jié)果:輸出結(jié)果:12:15:2012:15:20函數(shù)參數(shù)的求值順序函數(shù)參數(shù)的求值順序當(dāng)一個(gè)函數(shù)帶有多個(gè)參數(shù)時(shí),當(dāng)一個(gè)函數(shù)帶有多個(gè)參數(shù)時(shí),c+c+語言語言沒有規(guī)沒有規(guī)定定函數(shù)

14、調(diào)用時(shí)函數(shù)調(diào)用時(shí)實(shí)參實(shí)參的的求值順序求值順序;編譯器編譯器根據(jù)對代碼進(jìn)行優(yōu)化的需要自行根據(jù)對代碼進(jìn)行優(yōu)化的需要自行規(guī)定規(guī)定對實(shí)參的求值順序;對實(shí)參的求值順序;在實(shí)參中注意不要使用帶有副作用的運(yùn)算符,在實(shí)參中注意不要使用帶有副作用的運(yùn)算符,此時(shí)可能產(chǎn)生二義性;此時(shí)可能產(chǎn)生二義性;下例由于使用對參數(shù)求值順序不同的編譯器造下例由于使用對參數(shù)求值順序不同的編譯器造成的二義性。成的二義性。函數(shù)參數(shù)的求值順序函數(shù)參數(shù)的求值順序#include int add(int x,int y) return x+y;void main() int x(4),y(6); int z=add(+x,x+y); cout

15、zendl;產(chǎn)生二義性產(chǎn)生二義性可能的結(jié)果(按照編譯器對實(shí)參求值順序不同):可能的結(jié)果(按照編譯器對實(shí)參求值順序不同):自左至右自左至右,兩個(gè)實(shí)參的值分別為,兩個(gè)實(shí)參的值分別為5和和11;自右至左自右至左,兩個(gè)實(shí)參的值分別為,兩個(gè)實(shí)參的值分別為5和和10;注意:注意:函數(shù)參數(shù)求值順序與參數(shù)默認(rèn)值補(bǔ)足順序不同函數(shù)參數(shù)求值順序與參數(shù)默認(rèn)值補(bǔ)足順序不同參數(shù)求值順序:參數(shù)求值順序:由編譯器決定求值方向由編譯器決定求值方向;參數(shù)默認(rèn)值補(bǔ)足順序:參數(shù)默認(rèn)值補(bǔ)足順序:自左向右自左向右設(shè)置函數(shù)參數(shù)的默認(rèn)值(缺省參數(shù))設(shè)置函數(shù)參數(shù)的默認(rèn)值(缺省參數(shù))c+c+中,在函數(shù)聲明或定義時(shí)可以為一個(gè)或多中,在函數(shù)聲明或定

16、義時(shí)可以為一個(gè)或多個(gè)參數(shù)指定缺省參數(shù)值;個(gè)參數(shù)指定缺省參數(shù)值;int add(int x,int y=10);進(jìn)行函數(shù)調(diào)用時(shí),若未指定足夠的實(shí)參,則編譯進(jìn)行函數(shù)調(diào)用時(shí),若未指定足夠的實(shí)參,則編譯器將器將按從左向右的順序按從左向右的順序用函數(shù)聲明或定義中的缺省用函數(shù)聲明或定義中的缺省值來補(bǔ)足所缺少的實(shí)參;值來補(bǔ)足所缺少的實(shí)參;add(15);add(15,10);設(shè)置函數(shù)參數(shù)的默認(rèn)值設(shè)置函數(shù)參數(shù)的默認(rèn)值(續(xù)續(xù))在一個(gè)指定了缺省值的參數(shù)的右邊,不能出現(xiàn)沒在一個(gè)指定了缺省值的參數(shù)的右邊,不能出現(xiàn)沒有指定缺省值的參數(shù);有指定缺省值的參數(shù);void f(int x,int y=1,int z);在給某個(gè)

17、參數(shù)指定缺省值時(shí),不僅可以是一個(gè)數(shù)在給某個(gè)參數(shù)指定缺省值時(shí),不僅可以是一個(gè)數(shù)值,而且可以是任意復(fù)雜的表達(dá)式;值,而且可以是任意復(fù)雜的表達(dá)式;int f();void delay(int k,int time=f();錯誤錯誤例如:例如:f(2,4);理想:;理想:f(2,1,4),實(shí)際:,實(shí)際:z參數(shù)未被賦值參數(shù)未被賦值1. 類和對象的簡單應(yīng)用舉例例例3 3、找出一個(gè)整型數(shù)組中的最大元素、找出一個(gè)整型數(shù)組中的最大元素 這里使用類來處理。這里使用類來處理。#include using namespace std;class array_max public: void set_value( );

18、 void max_value( ); void show_maxvalue( ); private: int array10; int max; ;void array_max:set_value( ) for (int i=0;iarrayi; void array_max:max_value( ) max=array0; for(int i=1;imax) max=arrayi;void array_max:show_maxvalue( ) coutmax=max;int main( )array_max arrmax; arrmax.set_value( ); arrmax.max_v

19、alue( ); arrmax.show_maxvalue( ); return 0; 可以看出,主函數(shù)十分簡單,只需調(diào)用有關(guān)對象的成員函可以看出,主函數(shù)十分簡單,只需調(diào)用有關(guān)對象的成員函數(shù),以完成相應(yīng)的操作。數(shù),以完成相應(yīng)的操作。 在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,最關(guān)鍵的工作是類的設(shè)計(jì),所在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,最關(guān)鍵的工作是類的設(shè)計(jì),所有的數(shù)據(jù)和對數(shù)據(jù)的操作都體現(xiàn)在類中。有的數(shù)據(jù)和對數(shù)據(jù)的操作都體現(xiàn)在類中。例3 3、找出一個(gè)整型數(shù)組中的元素的最大值、找出一個(gè)整型數(shù)組中的元素的最大值#include using namespace std;class array_max public: void s

20、et_value( ); void max_value( ); void show_value( ); private: int array10; int max; ;void array_max set_value( ) int i; for (i=0;iarrayi; void array_max max_value( ) int i; max=array0; for (i=1;imax) max=arrayi; void array_max show_value( ) coutmax=max;int main( ) array_max arrmax; arrmax.set_value(

21、); arrmax.max_value( ); arrmax.show_value( ); return 0;/聲明類聲明類/以下以下3 3行為成員函數(shù)原型聲明行為成員函數(shù)原型聲明/對數(shù)組元素設(shè)置值對數(shù)組元素設(shè)置值/找出數(shù)組中的最大元素找出數(shù)組中的最大元素/輸出最大值輸出最大值/整型數(shù)組整型數(shù)組/成員函數(shù)定義,向數(shù)組元素輸入數(shù)值成員函數(shù)定義,向數(shù)組元素輸入數(shù)值/成員函數(shù)定義,找數(shù)組元素中的最大值成員函數(shù)定義,找數(shù)組元素中的最大值/定義對象定義對象arrmax/調(diào)用調(diào)用arrmax的的set_value函函數(shù),向數(shù)組元素輸入數(shù)值數(shù),向數(shù)組元素輸入數(shù)值/調(diào)用調(diào)用arrmaxarrmax的的max_

22、valuemax_value函數(shù),函數(shù),找出數(shù)組元素中的最大值找出數(shù)組元素中的最大值/調(diào)用調(diào)用arrmaxarrmax的的show_valueshow_value函函數(shù),輸出數(shù)組元素中的最大值數(shù),輸出數(shù)組元素中的最大值/成員函數(shù)定義,輸成員函數(shù)定義,輸出最大值出最大值2.2.類的封裝性和信息隱蔽類的封裝性和信息隱蔽n公用接口與私有實(shí)現(xiàn)的分離公用接口與私有實(shí)現(xiàn)的分離 class student private: int num; string name; char sex; public: void display( ) coutnum:numendl; coutname:nameendl; c

23、outsex:sexendl ; student stud;被操作的數(shù)據(jù)是私有的被操作的數(shù)據(jù)是私有的公用接口公用接口int age;(1)如果想修改或擴(kuò)充類的功)如果想修改或擴(kuò)充類的功能,只需修改本類中有關(guān)的數(shù)據(jù)能,只需修改本類中有關(guān)的數(shù)據(jù)成員和與它有關(guān)的成員函數(shù),程成員和與它有關(guān)的成員函數(shù),程序中類外的部分可以不必修改。序中類外的部分可以不必修改。coutage:ageendl;注意:雖然類中的數(shù)據(jù)成員改變了,注意:雖然類中的數(shù)據(jù)成員改變了,成員函數(shù)成員函數(shù)display的定義改變了,但的定義改變了,但是類的對外接口沒有改變,外界仍是類的對外接口沒有改變,外界仍然通過公用的然通過公用的dis

24、play函數(shù)訪問類中函數(shù)訪問類中的數(shù)據(jù)。程序中的其他任何部分均的數(shù)據(jù)。程序中的其他任何部分均無需修改。無需修改。當(dāng)接口與實(shí)現(xiàn)(對數(shù)據(jù)的操作)分當(dāng)接口與實(shí)現(xiàn)(對數(shù)據(jù)的操作)分離時(shí),只要類的接口沒有改變,對離時(shí),只要類的接口沒有改變,對私有實(shí)現(xiàn)私有實(shí)現(xiàn)的修改不會影響程序的其的修改不會影響程序的其他部分。這種他部分。這種“類的公用接口與私類的公用接口與私有實(shí)現(xiàn)的分離有實(shí)現(xiàn)的分離”形成信息隱蔽。形成信息隱蔽。(2) (2) 如果在編譯時(shí)發(fā)現(xiàn)類中的數(shù)如果在編譯時(shí)發(fā)現(xiàn)類中的數(shù)據(jù)讀寫有錯,不必檢查整個(gè)程序,據(jù)讀寫有錯,不必檢查整個(gè)程序,只需檢查本類中訪問這些數(shù)據(jù)的只需檢查本類中訪問這些數(shù)據(jù)的少數(shù)成員函數(shù)。少

25、數(shù)成員函數(shù)。2.2.類的封裝性和信息隱蔽類的封裝性和信息隱蔽n類聲明和成員函數(shù)定義的分離類聲明和成員函數(shù)定義的分離n如果一個(gè)類被多個(gè)程序使用,一般做法是將類的聲明如果一個(gè)類被多個(gè)程序使用,一般做法是將類的聲明( (其中包含成員函數(shù)其中包含成員函數(shù)的聲明的聲明) )放在指定的頭文件中,用戶如果想用該類,只要把有關(guān)的頭文件放在指定的頭文件中,用戶如果想用該類,只要把有關(guān)的頭文件包含進(jìn)來即可,不必在程序中重復(fù)書寫類的聲明,減少工作量,提高編程包含進(jìn)來即可,不必在程序中重復(fù)書寫類的聲明,減少工作量,提高編程的效率。的效率。/student.h (這是頭文件,在此文件中進(jìn)行類的聲明這是頭文件,在此文件中

26、進(jìn)行類的聲明)class student public: void display( ); private: int num; char name20; char sex; ; /類聲明類聲明/公用成員函數(shù)原型聲明公用成員函數(shù)原型聲明/student.cpp (在此文件中進(jìn)行函數(shù)的定義在此文件中進(jìn)行函數(shù)的定義)#include #include student.h void student display( )coutnum:numendl; coutname:nameendl; coutsex:sexendl; /不要漏寫此行,否不要漏寫此行,否則編譯通不過則編譯通不過/在類外定義在類外定義

27、display類函數(shù),類函數(shù),實(shí)現(xiàn)信息隱蔽。實(shí)現(xiàn)信息隱蔽。2.2.類的封裝性和信息隱蔽類的封裝性和信息隱蔽n為了組成一個(gè)完整的源程序,還應(yīng)當(dāng)有包括主函數(shù)為了組成一個(gè)完整的源程序,還應(yīng)當(dāng)有包括主函數(shù)的源文件:的源文件: /main.cpp 主函數(shù)模塊主函數(shù)模塊#include #include student.h /將類聲明頭文件包含進(jìn)來將類聲明頭文件包含進(jìn)來int main( ) student stud; /定義對象定義對象 stud.display( ); /執(zhí)行執(zhí)行stud對象的對象的display函數(shù)函數(shù) return 0;這是一個(gè)包括這是一個(gè)包括3個(gè)文件的程序,組成兩個(gè)文件模塊:個(gè)文

28、件的程序,組成兩個(gè)文件模塊: 一個(gè)是一個(gè)是主模塊主模塊main.cpp,一個(gè)是,一個(gè)是student.cpp。在主模塊中又包含頭。在主模塊中又包含頭文件文件student.h。在預(yù)編譯時(shí)會將頭文件。在預(yù)編譯時(shí)會將頭文件student.h中的內(nèi)容取中的內(nèi)容取代代#include student.h行。行。2.2.類的封裝性和信息隱蔽類的封裝性和信息隱蔽n注意:注意:由于將頭文件由于將頭文件student.hstudent.h放在用戶當(dāng)前目錄中,因此在文件放在用戶當(dāng)前目錄中,因此在文件名兩側(cè)用雙撇號包起來名兩側(cè)用雙撇號包起來“student.h student.h ”) )而不用尖括號而不用尖括號

29、()()c+c+編譯系統(tǒng)對兩個(gè)文件編譯系統(tǒng)對兩個(gè)文件main.cppmain.cpp和和student.cppstudent.cpp分別進(jìn)行編譯分別進(jìn)行編譯得到兩個(gè)目標(biāo)文件得到兩個(gè)目標(biāo)文件main.objmain.obj和和tudent.objtudent.obj得到兩個(gè)目標(biāo)文件得到兩個(gè)目標(biāo)文件main.objmain.obj和和tudent.objtudent.objc+c+編譯系統(tǒng)對兩個(gè)文件編譯系統(tǒng)對兩個(gè)文件main.cppmain.cpp和和student.cppstudent.cpp分別進(jìn)行編譯分別進(jìn)行編譯2.2.類的封裝性和信息隱蔽類的封裝性和信息隱蔽n在實(shí)際工作中,并不是將一個(gè)類聲

30、明做成一個(gè)頭文件,在實(shí)際工作中,并不是將一個(gè)類聲明做成一個(gè)頭文件,而是將而是將若干個(gè)常用的功能相近的類聲明集中在一起,形若干個(gè)常用的功能相近的類聲明集中在一起,形成類庫成類庫。n類庫有兩種:類庫有兩種: 一種是一種是c+c+編譯系統(tǒng)提供的標(biāo)準(zhǔn)類庫編譯系統(tǒng)提供的標(biāo)準(zhǔn)類庫;一種一種是用戶根據(jù)自己的需要做成的用戶類庫是用戶根據(jù)自己的需要做成的用戶類庫,提供給自己和,提供給自己和自己授權(quán)的人使用,這稱為自定義類庫。自己授權(quán)的人使用,這稱為自定義類庫。n類庫包括兩個(gè)組成部分:類庫包括兩個(gè)組成部分: (1)(1)類聲明頭文件;類聲明頭文件; (2)(2)已經(jīng)過編譯的成員函數(shù)的定義,它是目標(biāo)文件。已經(jīng)過編譯

31、的成員函數(shù)的定義,它是目標(biāo)文件。 用戶只需把類庫裝入到自己的計(jì)算機(jī)系統(tǒng)中用戶只需把類庫裝入到自己的計(jì)算機(jī)系統(tǒng)中( (一般裝到一般裝到c+c+編譯系統(tǒng)所在的子目錄下編譯系統(tǒng)所在的子目錄下) ),并在程序中用,并在程序中用#include#include命令行將有關(guān)的類聲明的頭文件包含到程序中,就可以命令行將有關(guān)的類聲明的頭文件包含到程序中,就可以使用這些類和其中的成員函數(shù),順利地運(yùn)行程序。使用這些類和其中的成員函數(shù),順利地運(yùn)行程序。全局作用域限定符全局作用域限定符“:” #include #include ; ;int x=1;int x=1;void main()void main() int

32、 x=2; int x=2; cout x; cout x; 此時(shí)輸出的此時(shí)輸出的x x值是為值是為“1”1”還是還是“2”2”? 輸出:輸出:2 2因?yàn)橄到y(tǒng)因?yàn)橄到y(tǒng)采用同名覆采用同名覆蓋原則。蓋原則。如何輸出全局變量如何輸出全局變量x x的的值?值?相同嗎?相同嗎?c+中的全局作用域限定符 例題:全局作用域例題:全局作用域#include using namespace std;int x=1;void main() int x=2; cout local x= xendl; /未限定時(shí)的符號名為局部符號名未限定時(shí)的符號名為局部符號名 cout “global x=” :xendl;/采用采

33、用“:”:”限定時(shí)的符號名為全局符號名限定時(shí)的符號名為全局符號名全局作用域限定符全局作用域限定符“:”:”的作用:的作用: 能使程序員訪問到在某能使程序員訪問到在某外部塊中所定義的全局外部塊中所定義的全局變量,以免被同名的局變量,以免被同名的局部變量所覆蓋。部變量所覆蓋。訪問規(guī)則:訪問規(guī)則: (1 1)有)有“:”:”限定的限定的同名符號是全局變量。同名符號是全局變量。 (2 2)無)無“:”:”限定的限定的同名符號是局部變量。同名符號是局部變量。全局作用域限定符的編程規(guī)則全局作用域限定符的編程規(guī)則:createwindow(:createwindow(參數(shù)參數(shù)) );createwindow

34、(createwindow(參數(shù)參數(shù)) );n全 局 作 用 域 限 定 符全 局 作 用 域 限 定 符“:”:”不僅可以限定不僅可以限定變量,也可以用來限變量,也可以用來限定函數(shù)。定函數(shù)。n以以microsoft microsoft 公司的公司的sdk apisdk api函數(shù)與函數(shù)與vc+vc+中的中的mfcmfc類庫中的成類庫中的成員函數(shù)同名為例說明員函數(shù)同名為例說明它為它為mfc cwndmfc cwnd類中類中的成員函數(shù)!的成員函數(shù)!它為它為windows apiwindows api全局函數(shù)全局函數(shù)c+程序設(shè)計(jì)第第3章章 類和對象類和對象課后作業(yè)與上機(jī)練習(xí)題目課后作業(yè)與上機(jī)練習(xí)題

35、目作業(yè):需要求需要求3個(gè)長方柱的體積,請編寫一個(gè)基于對象個(gè)長方柱的體積,請編寫一個(gè)基于對象的程序。的程序。數(shù)據(jù)成員包括數(shù)據(jù)成員包括length(長)、(長)、width(寬)、(寬)、height(高)。要求用成員函數(shù)(高)。要求用成員函數(shù)實(shí)現(xiàn)以下功能:實(shí)現(xiàn)以下功能:1、由鍵盤分別輸入、由鍵盤分別輸入3個(gè)長方柱的長、寬、高;個(gè)長方柱的長、寬、高;2、計(jì)算長方柱的體積;、計(jì)算長方柱的體積;3、輸出、輸出3個(gè)長方柱體積;個(gè)長方柱體積;請編寫程序,上機(jī)調(diào)試并運(yùn)行。請編寫程序,上機(jī)調(diào)試并運(yùn)行。本章作業(yè)1.分析下列程序的輸出結(jié)果分析下列程序的輸出結(jié)果(1) #include using namespac

36、e std;class location public:void init(int i=0,int j=0);void seta(int n1) a=n1;void setb(int n2) b=n2;int geta() return a;int getb()return b;private:int a,b;void location:init(int i,int j) a=i; b=j; int main() location x,y; x.init(4); x.seta(10); coutx.geta(),x.getb()endl; y.init(7,9); y.setb(8); cou

37、ty.geta(),y.getb()endl; return 0;本章作業(yè)(2)下面的程序定義了一個(gè)下面的程序定義了一個(gè)clockclock類,記錄當(dāng)前時(shí)間(小時(shí)和分鐘),并可以類,記錄當(dāng)前時(shí)間(小時(shí)和分鐘),并可以通過兩個(gè)函數(shù)取到這兩個(gè)私有成員。主函數(shù)定義一個(gè)通過兩個(gè)函數(shù)取到這兩個(gè)私有成員。主函數(shù)定義一個(gè)clockclock對象,輸出對象,輸出他的當(dāng)前時(shí)間,然后將時(shí)間增加一分鐘,再輸出增加后的時(shí)間。寫出他的當(dāng)前時(shí)間,然后將時(shí)間增加一分鐘,再輸出增加后的時(shí)間。寫出程序運(yùn)行結(jié)果。程序運(yùn)行結(jié)果。#include using namespace std; class clock int hour;

38、int minute; public: clock(void); void inc_time(void); int present_hour(void) return hour; int present_minute(void) return minute; void print_time();clock:clock(void) hour = 6; minute = 59;本章作業(yè)void clock:print_time(void) coutnow , the time is : hour:; if (minute10) cout0; coutminute59) minute-=60; ho

39、ur+; int main() clock myclock; myclock.print_time(); myclock.inc_time(); myclock.print_time(); myclock.inc_time(); myclock.print_time(); return 0;本章作業(yè)2. 2. 設(shè)計(jì)設(shè)計(jì)testtest類,使如下程序的輸出結(jié)果為:類,使如下程序的輸出結(jié)果為: 測試結(jié)果:測試結(jié)果:68-55=1368-55=13int main() test a; a.init(68,55); a.print(); return 0;本章作業(yè)3. 3. 改錯題改錯題(1)請用橫線標(biāo)出下面的程序錯誤語句所在行并說明出錯原因請用橫線標(biāo)出下面的程序錯誤語句所在行并說明出錯原因。#include using namespace std;class a private: int a; public: void seta( int x) a = x; void showa() couta=aendl;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論