C類及其對象的封裝性解析_第1頁
C類及其對象的封裝性解析_第2頁
C類及其對象的封裝性解析_第3頁
C類及其對象的封裝性解析_第4頁
C類及其對象的封裝性解析_第5頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、11C+程序開發過程實驗一 C+類及其對象的封裝性、實驗目的和要求(1) 了解C+類的構成。(2) 掌握聲明類的方法,類和類的成員的概念以及定義對象的方法。(3) 掌握成員函數的定義。(4) 熟悉構造函數和析構函數。(5) 了解C+的封裝性。C+程序開發過程如圖1.1所示。C+程序開發過程與其他高級語言語言源程序 開發過程一樣,都必須先經過編輯、編譯和連接過程, 最后生成可執行的代碼后才能運行。程序開發過程基 本步驟如下:(1) 編輯編輯是將編寫好的C+源程序輸入到計算機中, 生成磁盤文件的過程。磁盤文件名字要用擴展名.cpp, 例如:File.cpp。(2) 編譯編譯是通過編譯器將程序的源代

2、碼 (.cpp)轉換成 為機器代碼的形式,稱為目標代碼,即機器語言指令, 這時產生的文件擴展名為.obj。如:將源文件File.cpp 編譯后,生成目標文件 File.obj。但這仍然不是一個 可執行的程序,因為目標代碼只是一個個的程序塊, 需要相互連接成為一個適應操作系統環境的程序整 體。為了把它轉換為可執行程序,必須進行連接。(3) 連接連接是編譯的最后一個過程,它將用戶程序生成 的多個目標代碼文件和系統提供的庫文件 (.lib)中某 些代碼連接在一起,經過這種連接處理,生成一個可 執行文件,存儲這個可執行文件的擴展名為.exe。如: File.obj文件經連接處理后,生成可執行文件Fil

3、e.exe。(4) 運行最后是運行程序。運行可執行文件的方法很多, 一般在編譯系統下有運行功能,可通過選擇菜單項的 方式實現。程序在被編譯、連接的過程中,難免會出現錯誤,這時系統會給出致命錯和警告錯的提示,這時需要返回上一步過程中,對源程序進行修改,直至沒有錯誤提示為止。對于程序中存在的致命錯誤必須要進行修改,否則,系統不能生成可執行文件。程序中存在警告錯誤時,雖然系統也會生成可執行文件,但是一般要求修 改錯告錯誤后再再去運行可執行文件,因為有的錯告錯誤會造成結果的錯誤。編譯過程主要是進行詞法分析和語法分析的過程。程序的運行,是對算法的驗證。程 序被 運行后,一般在屏幕上顯示出運行結果。用戶可

4、以根據運行結果來判斷程度是否有算 法上的錯誤。三、 基本概念(1)C + +類的構成定義類的一般形式class 類名private:/私有類型數據成員和成員函數protected:/保護類型數據成員和成員函數public:/公有類型數據成員和成員函數;(2) 成員函數的定義定義成員函數的一般形式返回值類型 類名 :成員函數名(參數表)函數體;其中“ :”是作用域運算符例: void CArea:square(int vx, int vy)其中: void 為函數返回值類型CArea 為類名: 為作用域運算符square 為成員函數名int vx, int vy 為參數列表( 3) 定義對象對象

5、定義的一般形式類名 對象名 (初值表 );例: class CDate int Year;CDate myBirthday(1988,10,1),*day; 其中: CDate 為類名 myBirthday 為對象名 (1988,10,1) 為初值表 *day 為指向 CDate 類的指針(4)構造函數與析構函數構造函數 構造函數應具有以下特點,并遵循下列規則:1. 構造函數名與類的名稱必須相同。2. 構造函數沒有返回值,因此也沒有函數類型的說明。3. 類中既可包含多個構造函數,也可沒有構造函數,此時編譯系統會自動使用缺省值。4. 拷貝構造函數可利用已有的對象來建立一個類中的新對象。5. 構造

6、函數是由系統自動調用來給對象進行初始化的。構造函數一般格式:構造函數名(類型1形參1,類型2形參2,) 例:類中聲明構造函數class CA/ public:CA() ;/ 聲明無參數的構造函數CA(int rx,int ry); / 聲明帶兩個整型參數的構造函數CA(float rr) r=rr; / 聲明帶一個浮點參數的構造函數CA(floxt rr,char ra ) / 聲明帶兩個參數的構造函數 ;定義對象的一般格式:類名 對象名(實參1,實參2,)析構函數1. 析構函數的名稱必須是“ ”符號加上類名稱。2. 析構函數沒有返回值,也不能接受任何參數,因此也沒有函數類型說明。3. 一個類

7、僅有一個析構函數,如果類中未定義析構函數,系統會自動加上一個完全不 做任何事的析構函數。4. 析構函數不能重載。當對象的生命期結束時,會自動執行析構函數。三、 程序例題例 1.1 顯示日期。程序實現:#includeiostream.hclass tdate private:/成員函數聲明int month;int day;int year;public:void set(int, int, int);/置日期值int isleapyear( );/ 判是否閏年void print( );/輸出日期值;void tdate:set(int m, int d, int y) month = m;

8、day = d;year = y;int tadte:isleapyear( ) return(year%4=0&year%100!=0|year%400=0); void print( )cout month / day / year endl; void main( ) tdade a;/ 定義類對象a.set(2, 4, 2006);a.print( ); 程序運行結果為:屏幕顯示 : 2/4/2006例 1.2 顯示時鐘。程序實現:#includeiostream.hclass Clock / 定義時鐘類 private:int Hour, Minute, Second;public:

9、Clock( );/構造函數void SetTime(int newh, int newm, int news);void ShowTime( );Clock:Clock( )/構造函數實現 Hour = 0;Minute = 0;Second = 0;void Clock:SetTime(int newh, int newm, int news) Hour = newh; Minute = newm; Second = news;void Clock:ShowTime() cout Hour : Mi nute : Seco nd en dl; void mai n() Clock mycl

10、ock;cout First time set and output: en dl; myclock.ShowTime();cout Sec ond time set and output: en dl; myclock.SetTime(8, 30, 30); 設置時間為 8:30:30 myclock.ShowTime();程序運行結果:First time se七 and output:HS0:0Second time set and output: 8:30:30例1.3自定義拷貝構造函數舉例 程序實現:#in clude /聲明一個字符串類/字符串長度/指向字符串指針/聲明構造函數聲明

11、自定義拷貝構造函數/顯示字符串#i nclude class String int len gth;char *str;public:Strin g(char *);Stri ng(c onst Stri ng &p); void Show() cout str en dl; ;Strin g:Stri ng(char *s) if(s) len gth = strle n(s); str = new charlength+1; strcpy(str, s);else len gth = 0; str = 0;Strin g:Stri ng(c onst String &p) len gth

12、= p.len gth;str = new charle ngth+1; strcpy(str, p.str);void mai n() Stri ng str1(This a con struct ing.); Stri ng str2(str1);cout str1:;str1.Show();cout 拷貝后 nstr2:; str2.Show();程序運行結果為:stri:TTiis a constructing_拷貝后str2:This a construeting.由上面的程序運行結果中可以看出,程序第一步是創建對象stri,這時系統自動調用構造函數 String(char *),給

13、對象stri的str進行初始化,使 stri的數據成員 str =This a constructing.。程序第二步是創建對象str2,它使用的方法是:用一個已知的對象stri來初始化這個被創建的同類對象str2。因此,在創建對象str2時,系統自動調用拷貝構造函數String(const String &p),將對象stri的str的值拷貝給了對象 str2的str。因此str2的數據是 拷貝stri的數據,所以最后的結果是一樣的。例1.4在例題i.3的基礎上,加上析構函數,體會析構函數的使用。#in elude /聲明一個字符串類字符串長度指向字符串指針/聲明構造函數聲明自定義拷貝構造函

14、數顯示#i nclude class String int len gth;char *str;public:Stri ng(char *);Strin g(c onst String &p); void Show() cout str en dl; Stri ng();Strin g:Stri ng(char *s) if(s) len gth = strle n(s); str = new charle ngth+i; strcpy(str, s);else len gth = 0; str = 0;Strin g:Stri ng(c onst String &p)len gth = p.

15、len gth;str = new charle ngth+i; strcpy(str, p.str);Stri ng:Stri ng() cout 調用析構函數 撤消對象 endl; delete str;void mai n() Stri ng str1(This a con struct ing.);Stri ng str2(str1);cout str1:;str1.Show();cout 拷貝后 nstr2:;str2.Show();程序運行結果為:stri:This a constructing.拷貝后str2 :Tliis a construe七ing.調用折構函數慈消對象 Wt

16、fr構函數劇肖才象str1 和 str2。可以從上面的結果看出,當程序結束時,析構函數被調用兩次,撤消對象 例1.5 一個“幫教派對”類tutorpair中,包含有學生類對象和老師類對象#i ncludeiostream.hclass stude nt public:stude nt() cout c on struct ing stude nt.n;semesHours = 100;gpa = 3.5;stude nt()cout destruct ing stude nt.n;protected:int semesHours;float gpa;class teacher public:t

17、eacher()cout c on struct ing teacher.n;teacher()cout destruching teacher.n;class tutorpairpublic:tutorpair() cout c on struct ing tutorpair.n;no meeti ngs = 0;tutorpair( )cout destructing tutorpair.n; protected:student student;teacher teacher;int nomeetings;void main( ) tutorpair tp;cout Num Score;

18、/ 輸入信息 Student:Find(int n) if(Num=n) return 1;/學號相等返回 1else return 0;void Stude nt:Display( )/ 輸出信息到屏幕 cout 學號: Num 成績: Score endl; void mai n()Stude nt stu5;建立對象數組cout 請輸入學生學號,成績: endl;for(i nt i = 0; i 5; i+) cout 第 i+1 位同學:;stui.Set( );/調用建立信息函數for(i = 0; i 5; i+)stui.Display();輸出顯示int n, flag = 0;cout n;for(i = 0; i 5; i+) if(stui.Find(n)=1)/查找 stui.Display();flag = 1;break;if(flag=0)cout沒有找到該學生! 8 876989 耽畫靈t=i:1 , I同同同同同101n0404在該題中先定義學生對象數組,循環調用建立信息函數Set(),建立5位學生的信息,后調用Display()函數將信息輸出顯示。然后,根據輸入的學號,調用Find()查找

溫馨提示

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

評論

0/150

提交評論