




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、項目一任務一 體會面向?qū)ο笈c面向過程的不同思維方式任務二 創(chuàng)建簡單的C+應用程序打開C+面向?qū)ο蟪绦蛟O計之門任務說明任務一 體會面向?qū)ο笈c面向過程的不同思維方式在本任務中我們來學習面向?qū)ο蟪绦蛟O計思想以及其與面向過程的不同。預備知識一、什么是面向?qū)ο蟮某绦蛟O計思想二、面向?qū)ο笈c面向過程比較一、什么是面向?qū)ο蟮某绦蛟O計思想其基本出發(fā)點是盡可能按照人類認識世界的方法和思維方式來分析和解決問題??陀^世界是由許多具體的事物或者事件、抽象的概念和規(guī)則等組成的,因此,人們研究的對象事、物、概念都統(tǒng)稱為“對象”。面向?qū)ο蟮脑O計方法是以對象作為最基本的元素,以對象作為分析問題、解決問題的核心。下面我們了解幾個
2、面向?qū)ο蟪绦蛟O計中涉及的基本概念。1對象2類3封裝4繼承5多態(tài)面向?qū)ο蟪绦蛟O計方法的優(yōu)勢可以歸納為以下幾點:二、面向?qū)ο笈c面向過程比較(1)程序的開發(fā)效率高(2)程序代碼的可重用性高(3)程序易于維護任務實施 運用面向?qū)ο蠛兔嫦蜻^程兩種思想解決同一問題案例說明本任務中我們將分別使用面向過程和面向?qū)ο蟮某绦蛟O計方法設計兩個功能完全相同的程序(根據(jù)矩形的長和寬求其周長和面積),并結(jié)合任務內(nèi)容說明兩種程序設計思想的異同。實施步驟1以面向過程的程序設計方式思考步驟1 以面向過程的思想來解決問題,步驟如下:(1)確定所求長方形的長和寬。(2)確定計算長方形的周長和面積的公式并計算。(3)輸出計算結(jié)果。步
3、驟2 根據(jù)解題思路編寫代碼,如【例1-1】所示?!纠?-1】 以面向過程程序設計思想編碼。/1-1.cpp#include /包含頭文件iostream.husing namespace std;/使用標準命名空間void main()/主程序 int perimeter,area;/聲明周長與面積變量 int length=20,width=10;/聲明長、寬變量并賦初值 perimeter=2*(length+width);/求周長 area=length*width;/求面積 coutperimeter=perimeterendl;/輸出結(jié)果coutarea=areaendl;2以面向?qū)?/p>
4、象的程序設計方式思考步驟1 以面向?qū)ο蟮乃枷雭斫鉀Q問題,步驟如下:(1)將長方形類的共性,即兩個基本屬性(長和寬)和兩個行為(求周長和求面積)抽取出來,設計一個長方形類。(2)根據(jù)長方形類創(chuàng)建一個對象。(3)通過調(diào)用對象的行為求出其周長和面積。步驟2 根據(jù)解題思路編寫代碼,如【例1-2】所示?!纠?-2】 以面向?qū)ο蟪绦蛟O計思想編碼。/1-2.cpp#include /包含頭文件iostream.husing namespace std;/使用標準命名空間class Rectangle/定義長方形類public:Rectangle(float w=0,float l=0)width=w;len
5、gth=l;/定義構(gòu)造函數(shù),完成創(chuàng)建對象時的初始化工作,即為長和寬賦初值void GetArea()coutarea=width*length endl;/定義求面積方法void GetPerim()coutperimeter=2*(width+length)endl;/定義求周長方法private:float width,length; /外界不可訪問的私有成員;void main() Rectangle a(10,20);/定義長方形類的一個變量a,即實例化一個/特殊的長方形對象a,它的長是20,寬是10a.GetPerim();/調(diào)用a對象的兩個方法a.GetArea();任務二 創(chuàng)建簡
6、單的C+應用程序任務說明在本任務中我們來學習C+應用程序的結(jié)構(gòu)、C+程序的開發(fā)過程以及C+開發(fā)環(huán)境Visual C+ 6.0的使用。預備知識一、認識C+程序二、C+程序的開發(fā)過程三、Visual C+ 6.0集成開發(fā)環(huán)境簡介四、Visual C+ 6.0的排錯與調(diào)試功能1一個C+程序一、認識C+程序#include /包含頭文件iostream.h#include /包含頭文件string.h,字符串using namespace std;/使用標準命名空間/=int main() string greeting=hello world!; /定義一個字符串對象變量,并賦初值couthello
7、 world!n; /在屏幕上輸出字符串“hello world!”并換行coutwelcome to C+!endl; /在屏幕上輸出“welcome to C+!”并換行coutgreetingendl; /在屏幕上輸出字符串變量greeting的內(nèi)容并換行return 0;/程序結(jié)束2C+程序的構(gòu)成(1)一個C+程序可以由一個或多個源程序單元構(gòu)成,每個源程序單元可被看成一個文件?!纠?-3】中的例子僅由一個源程序單元構(gòu)成。(2)在一個源程序單元中,一般包括以下組成部分: 預處理命令。 全局聲明部分。 函數(shù)。3C+程序的書寫形式(1)C+的書寫格式比較自由,一行內(nèi)可以寫幾個語句,一個語句也
8、可以寫在多行。(2)在程序中添加必要的注釋,也是成為一個優(yōu)秀程序員所必需的。編譯系統(tǒng)在編譯代碼時會將注釋內(nèi)容忽略。一般情況下,內(nèi)容較少的簡單注釋用“/”,而跨行的注釋則用“/*/”。二、C+程序的開發(fā)過程1編寫程序2編譯程序3連接目標文件4運行程序 總體而言,C+程序的整個開發(fā)過程可用圖所示的流程圖表示。其中,實線表示操作流程,虛線表示文件的輸入/輸出。三、Visual C+ 6.0集成開發(fā)環(huán)境簡介 本書選用了使用較為廣泛的Visual C+ 6.0作為C+程序的開發(fā)環(huán)境,圖所示為Visual C+ 6.0的集成開發(fā)環(huán)境界面。四、Visual C+ 6.0的排錯與調(diào)試功能第一步 設置斷點第二步
9、 開始調(diào)試程序第三步 單步運行 單步調(diào)試程序時,可以在Variables窗口和Watch窗口中察看變量值的變化,這兩個窗口的作用如下: 在Variables窗口中會自動顯示當前運行程序中所有變量的值。隨著單步調(diào)試的進行,我們會看到變量i的值逐漸遞增。 如果本地變量比較多,Variables窗口就會比較混亂,此時可以直接在代碼中選中需要監(jiān)控的變量,將其拖放到Watch列表,該變量的值會被顯示出來。任務實施創(chuàng)建并運行自己的第一個C+程序單擊此處添加備注 編寫和調(diào)試一個簡單的C+程序,以熟悉Visual C+ 6.0的程序編寫、編譯、連接和調(diào)試方法。實施步驟1創(chuàng)建源程序 步驟1 啟動Visual C
10、+ 6.0,打開“文件”下拉菜單,選擇“新建”菜單項,將打開如圖所示的“新建”對話框。步驟2 如圖1-14所示,選擇“文件”選項卡,在左側(cè)文件類型列表中選擇“C+ Source File”選項,表示創(chuàng)建一個C+源程序。/實訓1-1#include using namespace std;int main()coutWelcome to C+ World!n;coutMy Friend!endl;return 0;2編譯連接將代碼輸入編輯區(qū)后,需要對程序進行編譯連接,以發(fā)現(xiàn)源程序中是否存在錯誤。步驟1 執(zhí)行“組建”“編譯實訓1-1.cpp”菜單命令,系統(tǒng)將顯示圖所示對話框,詢問是否在創(chuàng)建源文件的
11、目錄下建立一個活動工程和一個工作空間。步驟2 單擊“是”按鈕,將創(chuàng)建一個與C+源程序同名的工作區(qū)(對應文件為“實訓1-1.dsw”)和一個工程(對應文件為“實訓1-1.dsp”),系統(tǒng)開始編譯。編譯結(jié)束后,將在輸出窗口輸出編譯信息,如圖所示。步驟3 編譯信息顯示“實訓1-1.obj - 0 error(s), 0 warning(s)”,表示編譯程序時沒有錯誤和警告。為此,繼續(xù)執(zhí)行“組建”“組建實訓1-1.exe”菜單命令,對生成的目標程序進行連接,以生成可執(zhí)行程序,如圖所示。3調(diào)試運行編譯連接通過后,執(zhí)行“組建”“執(zhí)行實訓1-1.exe”菜單命令,或者直接按【Ctrl+F5】組合鍵,運行生成
12、的程序,將出現(xiàn)圖所示畫面。結(jié)果正確無誤,按任意鍵返回。至此,一個完整的C+程序從建立到運行就完成了。項目拓展熟悉Visual C+工作區(qū)與工程的使用C+程序唯有放入某個工作區(qū)和工程,才能被編譯和連接。為了便于讀者更好地使用Visual C+,我們首先對工作區(qū)、工程等概念進行一些簡要說明。(1)在Visual C+中,工作區(qū)用來管理工程,而工程用來管理C+源程序(*.cpp)、C+頭文件(*.h)、資源文件等。因此,如果我們開發(fā)的程序比較龐大的話,應首先創(chuàng)建工作區(qū),然后創(chuàng)建工程,最后利用工程管理C+源程序、頭文件等。(2)我們既可以為在工作區(qū)新建工程,或者在工程中新建C+程序、頭文件,也可以將現(xiàn)
13、有工程添加到工作區(qū)中,或者將現(xiàn)有C+源程序、頭文件等添加到工程中。(3)Visual C+的編譯是針對工程中的C+程序的,而連接是針對工程的。通過選擇“組建”菜單中的“組建”,可以對工程中的程序統(tǒng)一進行編譯和連接。(4)每個工作區(qū)和工程都與某個文件夾相對應,并且工作區(qū)文件的擴展名為.dsw,工程文件的擴展名為.dsp。(5)創(chuàng)建工程時,如果系統(tǒng)尚未創(chuàng)建工作區(qū),則系統(tǒng)會自動創(chuàng)建一個與工程同名的工作區(qū),并以此名稱在指定文件夾中創(chuàng)建一個新文件夾,以存放相關(guān)文件。(6)要想編輯C+源程序或頭文件等,最好打開工作區(qū)文件,如此一來,我們可以直接對C+源程序、頭文件等進行修改、編譯和連接。(7)如果創(chuàng)建的工
14、程是一個Win32 Console Application(Win32控制臺應用程序),則必須在工程中的某個C+程序中包含main()函數(shù),以設置應用程序的入口。此外,每個工程中只能有一個main()函數(shù),否則,將無法連接目標文件。Thank you!項目二任務一 熟悉C+與C在基本控制上的一些區(qū)別任務二 學習有關(guān)函數(shù)方面的區(qū)別任務三 掌握C+中關(guān)于引用的靈活運用任務四 掌握C+中管理動態(tài)內(nèi)存空間的方法由C到C+ 用法更靈活、功能更強大任務說明預備知識任務一 熟悉C+與C在基本控制上的一些區(qū)別 在本任務中我們來學習C+與C在基本控制上的一些區(qū)別,主要包括輸入/輸出的實現(xiàn)、強制數(shù)據(jù)類型轉(zhuǎn)換方式以
15、及新增了bool類型。一、用I/O流實現(xiàn)輸入/輸出二、新增強制類型轉(zhuǎn)換方式三、新增bool類型一、用I/O流實現(xiàn)輸入/輸出 cin是輸入流對象,cout是輸出流對象,它們是在編譯系統(tǒng)中的輸入/輸出流庫中定義的,定義后系統(tǒng)會在內(nèi)存中開辟一段緩沖區(qū),用來暫存輸入/輸出流的數(shù)據(jù)。使用它們時必須將頭文件“iostream.h”加入到本文件中,即在程序的開頭使用預處理命令“#include ”。(一)輸入語句輸入語句的一般格式為:cin表達式1表達式2表達式n; 在使用cin語句時,通過鍵盤輸入的數(shù)據(jù)應與變量定義的數(shù)據(jù)類型一致,并且輸入數(shù)據(jù)的個數(shù)應與變量的個數(shù)相同。輸入完數(shù)據(jù)后鍵入回車,流提取操作符“”
16、便從輸入流中提取出由空格、制表符和換行符間隔開的數(shù)據(jù)賦給相應的變量。(二)輸出語句輸出語句的一般格式為:cout表達式1表達式2表達式nendl; endl是C+中行結(jié)束符,只能用于輸出流中,其作用是在執(zhí)行換行操作的同時,將緩沖區(qū)內(nèi)已有的數(shù)據(jù)全部輸出,并清空緩沖區(qū)。(三)輸入/輸出的格式控制常用的輸入/輸出流格式控制符如表所示。二、新增強制類型轉(zhuǎn)換方式強制轉(zhuǎn)換數(shù)據(jù)類型的一般形式為:(類型名)變量 和 (類型名)(表達式)也可以寫成類型名(變量) 和 類型名(表達式) 例如,下面將變量a強制轉(zhuǎn)換成int型,將m與n的和強制轉(zhuǎn)換成double型,將8與3取余的結(jié)果強制轉(zhuǎn)換成char型。int(a)
17、double(m+n)char(8%3) 當進行強制數(shù)據(jù)類型轉(zhuǎn)換的對象是一個包含多項的表達式時,必須將表達式用括號括起。例如,將7/4的結(jié)果強制轉(zhuǎn)換成double型,應該寫成double(7/4) 此時由于7和4均為整型,故7/4的結(jié)果為整型1,強制轉(zhuǎn)換為雙精度型數(shù)據(jù)后,結(jié)果仍為1,而寫成(double)7/4 則表示將7的數(shù)據(jù)類型強制轉(zhuǎn)換為double型,再與4求商,結(jié)果是雙精度型數(shù)據(jù)1.75。三、新增bool類型 bool(布爾型,也稱邏輯型)只有兩個值,即整數(shù)0(表示邏輯假)和1(表示邏輯真)。在C+語言中還定義了這兩個布爾型常量所對應的符號常量false和true,false的值為0,
18、表示邏輯假,true的值為1,表示邏輯真。 由于邏輯值是整數(shù)0和1,所以它也能夠像其他整數(shù)一樣出現(xiàn)在表達式里,參與各種整數(shù)運算?!纠?-3】 布爾常量應用示例。#include using namespace std; int main() cout布爾類型的符號常量true對應的邏輯值是:trueendl;cout布爾類型的符號常量false對應的邏輯值是:falseendl;return 0;程序運行結(jié)果如圖所示。任務實施輸出楊輝三角案例說明楊輝三角是一個由數(shù)字排列成的三角形數(shù)表,如圖所示。 它描述的是兩個未知數(shù)和的冪次方運算后的系數(shù)問題。例如,(xy)2x22xyy2,這樣系數(shù)就是1,2
19、,1,這就是楊輝三角的其中一行。依次下去,(xy)3、(xy)4等的運算結(jié)果的各項系數(shù)就構(gòu)成了楊輝三角的其他各行。編寫程序,根據(jù)輸入的行數(shù)(小于14)輸出楊輝三角。案例分析楊輝三角每行的數(shù)字是有一定規(guī)律的:每一行數(shù)字的個數(shù)等于所在的行數(shù),每行的第一個數(shù)字均為1,其后數(shù)字為:前面數(shù)字(數(shù)字所在行號(自1起)數(shù)字所在行中的序號(自0起)/數(shù)字所在行中的序號。為了使輸出的數(shù)字排列成如圖所示的金字塔形狀,需控制各行數(shù)字之間空格的個數(shù)。每行第一個數(shù)字之前空格的個數(shù)依次遞減2,兩個數(shù)字之間的空格個數(shù)有三種情況:如果輸出的數(shù)字是一個一位數(shù),則在該數(shù)字后輸出3個空格;如果輸出的數(shù)字是一個兩位數(shù),則在該數(shù)字后輸
20、出2個空格;如果輸出的數(shù)字是一個三位數(shù),則在該數(shù)字后輸出1個空格。根據(jù)以上規(guī)律,我們可以利用循環(huán)嵌套結(jié)構(gòu)逐行逐個輸出數(shù)字和空格。由于確定了行數(shù),循環(huán)的次數(shù)也就跟著確定了,故我們使用的是for循環(huán)。實施步驟步驟1 在Visual C+中新建一個C+ 源文件,根據(jù)分析編寫代碼如下:#include void main() int n,r,c,m,j=0;coutm;while (m=14)/如果連續(xù)三次輸入的數(shù)字不符合要求,則退出程序 if (j=2) cout你的錯誤輸入已達3次,你無權(quán)再輸入!endl;return;cout你輸入的行數(shù)超出范圍,請重新輸入!endl;coutm;j+;/累計輸
21、入次數(shù)for (n=0;n=m-1;n+)/逐行輸出數(shù)字和空格 for(r=1;r15-n;r+)/*輸出第一個數(shù)字之前的空格,為了打印出金字塔形狀,要保證各行依次遞減2個空格*/cout ;c=1;/第一個數(shù)字總為1coutc ;/輸出第一個數(shù)字以及3個空格for(r=1;r=n;r+)/輸出各行的其他數(shù)字和空格 c=c*(n-r+1)/r;/計算應輸出數(shù)字if(c100)/根據(jù)數(shù)值大小確定數(shù)字后面的空格個數(shù)if(c10)coutc ;/一位數(shù)的后面輸出3個空格elsecoutc ;/兩位數(shù)的后面輸出2個空格elsecoutc ;/三位數(shù)的后面輸出1個空格coutendl;步驟2 經(jīng)編譯、連
22、接后,程序運行結(jié)果如圖所示。任務二 學習有關(guān)函數(shù)方面的區(qū)別任務說明在本任務中,我們來學習C+語言與C語言在函數(shù)語法和使用方面的區(qū)別。預備知識一、局部變量隨用隨定義二、作用域限定符:擴大全局變量的可見范圍三、形式參數(shù)可帶有默認值四、內(nèi)聯(lián)函數(shù) 在C+中,允許變量定義語句在程序中的任何地方,只要在是使用它之前就可以;而C語言中,必須要在函數(shù)開頭部分。另外,C+允許重復定義變量,C語言標準中是不允許的。通常情況下,如果全局變量與局部變量同名,局部變量在其作用域內(nèi)具有較高的優(yōu)先權(quán),將會屏蔽全局變量。在C+中,可以通過作用域限定符“:”訪問被屏蔽的全局變量。二、作用域限定符:擴大全局變量的可見范圍一、局部
23、變量隨用隨定義【例2-4】 使用作用域限定符: 訪問被屏蔽的全局變量。#include using namespace std;int v1=80;int main() int v1=8; coutv1; coutn您輸入的v1值是v1endl;coutn全局變量v1的值是:v1endl;return 0;程序運行結(jié)果如圖所示。三、形式參數(shù)可帶有默認值通常情況下,在調(diào)用函數(shù)時要為函數(shù)的每個形參賦予一個相應的實參值。但有時在主調(diào)函數(shù)中沒有給出實參,或者多次調(diào)用同一函數(shù)使用同樣的實參時,給形參設置一個默認值,被調(diào)函數(shù)就可以按指定的默認值來執(zhí)行。函數(shù)形參的默認值可以在函數(shù)原型的聲明中或函數(shù)定義中指定
24、。例如:float area(float r=2.5);指定r的默認值為2.5,在調(diào)用此函數(shù)時可以不必給出實參的值,即等價于調(diào)用area(2.5)。如果函數(shù)中有多個形參,可以為每個形參指定一個默認值,也可以只對部分形參指定默認值,指定默認值必須按照從右到左的順序進行。即為某個參數(shù)指定默認值時,其后的參數(shù)都必須指定默認值,否則已設默認值將被忽略。例如:void f1(double a,float b=2.5,int c=1);/正確void f2(double a,float b=2.5,int c);/*不正確。由于c未指定默認值,故b的默認值無效*/為函數(shù)中的形參設置了默認值后,實參的個數(shù)可
25、以與形參的個數(shù)不同。在進行函數(shù)調(diào)用時,實參與形參按照從左到右的順序進行匹配,沒有給出實參的,該形參就取指定的默認值。例如:int sum(int a,int b, int c=5,int d=6);在此函數(shù)原型中指定了形參c和d的默認值分別為5和6,若調(diào)用語句為:sum(3,2,1);則等價于執(zhí)行語句:sum(3,2,1,6);四、內(nèi)聯(lián)函數(shù)定義內(nèi)聯(lián)函數(shù)的格式為:inline 函數(shù)類型 函數(shù)名(形參列表) 函數(shù)體 ;一般只將規(guī)模很?。ㄒ话銥?個語句以下)且使用頻繁的函數(shù)聲明為內(nèi)聯(lián)函數(shù),并且內(nèi)聯(lián)函數(shù)內(nèi)不能包括循環(huán)語句和switch語句?!纠?-6】 內(nèi)聯(lián)函數(shù)應用示例。#include inline
26、 int sum(int x,int y,int z);/對函數(shù)sum原型的聲明,聲明為內(nèi)聯(lián)函數(shù)void main() int a,b,c,s;coutabc;s=sum(a,b,c); /求三個數(shù)的和coutsum is sendl;int sum(int x,int y,int z)/定義內(nèi)聯(lián)函數(shù)sum return x+y+z; 程序運行結(jié)果如圖所示。任務實施漢諾塔問題求解案例說明已知臺上有3根標號為A、B、C的柱子,在A柱子上放著若干個盤子,每一個都比下面的略小一些?,F(xiàn)要把A柱子上的盤子全部移到C柱子上,要求是:一次只能移動一個盤子,移動過程中大盤子不能放在小盤子上面。編寫程序,輸入A
27、柱子上盤子的數(shù)量,輸出將盤子從A柱子移動到C柱子上時移動的步驟。案例分析漢諾塔問題是典型的遞歸調(diào)用問題。當n1時,直接將盤子從A移動到C即可。將n(n1)個盤子從A柱移動到C柱可以分為三個步驟: 將n-1個盤子借助C柱子移到B柱子; 將最后一個盤子從A柱子移到C柱子; 將n-1個盤子從B借助A移到C。計算移動次數(shù)的公式為2m-1,其中m是盤子總數(shù)。實施步驟步驟1 在Visual C+中新建一個C+ 源文件,根據(jù)分析編寫代碼如下:#includevoid move(char one,char anoth) /將一個柱子上的盤子移動到另一個柱子 coutone anothendl; void ha
28、noi(int n,char no1,char no2,char no3)/求解漢諾塔問題 if (n=1) move(no1,no3);/只有一個盤子時,從A移動到Celse hanoi(n-1,no1,no3,no2);/將n-1個盤子借助C從A移動到Bmove(no1,no3);/將最后一個盤子從A移動到Chanoi(n-1,no2,no1,no3);/將n-1個盤子借助A從B移動到Cint times(int n)/計算移動次數(shù) int i,times=1;for(i=1;i=n;i+)times*=2;return times-1;void main() int m;coutm;co
29、ut當有m個盤子時,移動步驟依次為:endl;hanoi(m,A,B,C);cout移動次數(shù)為times(m)次endl;步驟2 經(jīng)編譯、連接后,程序運行結(jié)果如圖所示。任務三 掌握C+中關(guān)于引用的靈活運用任務說明引用是C+對C的一個重要擴充,在本任務中我們就來學習引用。一、引用的概念及使用預備知識二、引用作為形式參數(shù)三、引用與指針的區(qū)別四、引用作為返回值一、引用的概念及使用引用是指為變量起一個別名,聲明引用型變量的一般形式為:數(shù)據(jù)類型 &引用名變量名;例如,假設有一個變量a,若給它起一個別名b,就可以這樣來聲明:int a;int &b=a;/聲明b是a的引用聲明引用時,b和a表示相同的變量,
30、它們具有相同的地址。換句話說,對b進行操作也就是對a進行操作。在聲明一個引用型變量時,必須同時對其進行初始化。以下語句是不合法的:int a;int &b;b=a;【例2-7】 引用的簡單應用。#include void main() int a=10;int &b=a;/聲明b是a的引用a=a*a;couta bendl;b=b/2;coutb aendl;程序運行結(jié)果如圖所示。二、引用作為形式參數(shù)在C語言中我們已經(jīng)學了函數(shù)參數(shù)傳遞的兩種方式:值傳遞和地址傳遞。將引用作為函數(shù)的參數(shù)時,參數(shù)的傳遞方式為引用傳遞。引用傳遞實際上傳遞的是變量的地址,這種方式節(jié)省了大量存儲空間,從而能夠提高程序的執(zhí)
31、行效率。下面我們通過【例2-8】來比較值傳遞、地址傳遞和引用傳遞這三種傳遞方式?!纠?-8】 引用作為函數(shù)參數(shù)的應用示例。要求實現(xiàn)兩個整型數(shù)據(jù)的交換。#includevoid swap1(int x,int y)/參數(shù)的值傳遞 int temp;temp=x;x=y;y=temp;void swap2(int *x,int *y)/參數(shù)的地址傳遞 int temp;temp=*x;*x=*y;*y=temp;void swap3(int &x,int &y)/參數(shù)的引用傳遞 int temp;temp=x;x=y;y=temp;void main( ) int a,b;coutab;/輸入a、
32、b兩變量的值swap1(a,b);cout值傳遞的結(jié)果:a bendl;swap2(&a,&b);cout地址傳遞的結(jié)果:a bendl;swap3(a,b);cout引用傳遞的結(jié)果:a bendl;程序運行結(jié)果如圖所示。三、引用與指針的區(qū)別 引用是一個變量的別名,本身不單獨分配自己的內(nèi)存空間,而指針有自己的內(nèi)存空間。 引用訪問一個變量是直接訪問,而指針是間接訪問。 引用在開始的時候就綁定到了一個內(nèi)存空間,所以開始必須賦初值,而指針可以先定義后賦值?!纠?-9】 引用與指針對比應用示例。#includevoid main( ) int i = 3,j = 4; couti=ij=jendl;i
33、nt &x = i;/定義引用couti=i;j=j;x=xendl;couti的地址&i;j的地址&j;x的地址&xendl;x = j;couti=i;j=j;x=xendl;couti的地址&i;j的地址&j;x的地址&xendl;程序運行結(jié)果如圖所示。int *y;/定義指針couty的地址¥dl;y = &j;couti=i;j=j;y=yendl;couti的地址&i;j的地址&j;y的地址¥dl;四、引用作為返回值以引用返回函數(shù)值時,定義函數(shù)時需要在函數(shù)名前加&,定義函數(shù)的格式一般如下:類型標識符 &函數(shù)名(形參列表及類型說明)函數(shù)體1通過引用返回函數(shù)值的最大好處是,
34、在內(nèi)存中不產(chǎn)生被返回值的副本?!纠?-10】 定義兩個函數(shù):一個以變量方式返回函數(shù)值,一個以引用方式返回函數(shù)值。#includefloat temp;/定義全局變量tempfloat fn1(float r);/聲明函數(shù)fn1float &fn2(float r);/聲明函數(shù)fn2float fn1(float r)/定義函數(shù)fn1,以返回值的方法返回函數(shù)值 temp=r*r*3.14; return temp;float &fn2(float r)/定義函數(shù)fn2,以引用方式返回函數(shù)值 temp=r*r*3.14; return temp;void main()/主函數(shù) float a=fn
35、1(10.0); float b=fn2(10.0); coutaendlbendl;程序運行結(jié)果如圖所示。從上圖中我們可以看出,兩種方式的運行結(jié)果是相同的,但是它們在內(nèi)存中的活動情況卻是不相同的,下面我們對照圖示進行說明。函數(shù)fn1()是一般的函數(shù)返回值方式:返回全局變量temp值時,C+創(chuàng)建臨時變量并將temp的值314復制給該臨時變量,返回到主函數(shù)后,賦值語句a=fnl(10.0)把臨時變量的值314復制給a,其內(nèi)存情況如圖所示。函數(shù)fn2()以引用方式返回返回值,不產(chǎn)生副本,所以,直接將變量temp返回給主函數(shù),這樣避免了臨時變量的產(chǎn)生。這種方式提高了程序執(zhí)行效率和空間利用率,其內(nèi)存情
36、況如圖所示。2返回引用的函數(shù)可以作為左值。下面我們通過一個案例來了解這種使用方法?!纠?-11】 將返回引用的函數(shù)值作為賦值表達式的左值。#include int &put(int n);int vals10;int error=-1;void main() put(0)=10; /以put(0)函數(shù)值作為左值,等價于vals0=10; put(9)=20; /以put(9)函數(shù)值作為左值,等價于vals9=20; coutvals0endl; coutvals9=0 & n=9 ) return valsn; else coutsubscript error; return error; 程
37、序運行結(jié)果如圖所示。引用作為返回值時,要注意以下兩點:(1)不能返回局部變量的引用(2)不能返回函數(shù)內(nèi)部new分配的內(nèi)存的引用案例說明任務實施通過引用操作數(shù)組創(chuàng)建兩個數(shù)組,輸入數(shù)組元素后將數(shù)組值輸出,然后將兩數(shù)組合并為一個數(shù)組并輸出。實施步驟步驟1 在Visual C+中新建一個C+ 源文件,編寫代碼如下:#include#include#include#define LIST_INIT_SIZE 100/ 數(shù)組初始化元素個數(shù)#define LISTINCREMENT 10/ 數(shù)組元素個數(shù)遞增長度#define Status int#define ElemType int#define OK
38、1#define ERROR 0#define OVERFLOW -2typedef struct ElemType *elem;int length;/ 數(shù)組中實際存放的元素個數(shù)int listsize;/ 數(shù)組長度,可容納的最大元素個數(shù) SqList ;Status InitList_Sq(SqList &L) / 構(gòu)造一個空的數(shù)組L L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType); if (!L.elem) return ERROR;/ 存儲分配失敗 L.length = 0;/ 數(shù)組實際長度為0 L.listsiz
39、e = LIST_INIT_SIZE;/ 初始存儲容量 return OK;Status InputList_Sq(SqList &L) / 向數(shù)組L中輸入n個元素 int i; printf(nInput %d numbers:,L.length); for(i=0;iL.length;i+) scanf(%d,&L.elemi); printf(nInput Success!:); return OK;Status OutputList_Sq(SqList L) / 輸出數(shù)組L中的所有元素 int i; printf(nThere Are %d numbers :, L.length);
40、for(i=0;i L.length;i+) printf(%d , L.elemi); printf(nOutput Success!:); return OK;void MergeList_Sq(SqList La, SqList Lb, SqList &Lc) / 歸并La和Lb得到新的順序線性表Lc ElemType *pa,*pb,*pc,*pa_last,*pb_last; pa = La.elem; pb = Lb.elem; Lc.listsize = Lc.length = La.length+Lb.length; pc = Lc.elem = (ElemType *)mal
41、loc(Lc.listsize*sizeof(ElemType); if (!Lc.elem) exit(OVERFLOW);/ 存儲分配失敗 pa_last = La.elem+La.length-1; pb_last = Lb.elem+Lb.length-1; while (pa = pa_last & pb = pb_last) / 歸并 if (*pa = *pb) *pc+ = *pa+; else *pc+ = *pb+; while (pa = pa_last) *pc+ = *pa+;/ 插入La的剩余元素 while (pb = pb_last) *pc+ = *pb+;/
42、 插入Lb的剩余元素 void main()/ 主函數(shù) SqList La,Lb,Lc; InitList_Sq(La); InitList_Sq(Lb); InitList_Sq(Lc);La.length=5;Lb.length=4;printf(nInput array A); InputList_Sq(La); / 輸入數(shù)組La OutputList_Sq(La); printf(nInput array B); InputList_Sq(Lb); / 輸入數(shù)組Lb OutputList_Sq(Lb); MergeList_Sq(La,Lb,Lc); / 將數(shù)組La與Lb合并 prin
43、tf(nC=merge(A,B):); OutputList_Sq(Lc);步驟2 經(jīng)編譯、連接后,程序運行結(jié)果如圖所示。任務四 掌握C+中管理動態(tài)內(nèi)存空間的方法任務說明在本任務中我們來學習使用C+應用程序的結(jié)構(gòu)、C+程序的開發(fā)過程、C+開發(fā)環(huán)境Visual C+ 6.0的使用。預備知識在C+語言中,new和delete可用來實現(xiàn)動態(tài)內(nèi)存空間的管理。一、用new申請動態(tài)內(nèi)存空間二、用delete釋放動態(tài)內(nèi)存空間new運算符的操作數(shù)是一個數(shù)據(jù)類型,其作用是為變量分配內(nèi)存空間,并返回指向該變量的指針。new運算符使用的一般格式為:一、用new申請動態(tài)內(nèi)存空間指針變量new 數(shù)據(jù)類型 (初值)其中,
44、初值也可以不給出。例如:int *p;/定義了一個指向整型變量的指針p=new int(5);/*為一個整型變量分配內(nèi)存空間,p指向該變量的首地址,將該整型變量初始化為5*/new運算符還可以為多個變量分配存儲空間。例如:int *p;/定義了一個指向整型變量的指針p=new int 8;/*為8個整型變量分配內(nèi)存空間,p指向第一個整型變量的首地址*/for(int i=0;i8;i+)/為p指向的8個整型變量賦值pi=i;二、用delete釋放動態(tài)內(nèi)存空間當new分配的空間使用完之后,必須用delete運算符釋放這些空間。delete運算符的一般格式為:delete 指針變量其中,指針變量是
45、指用new運算符申請分配的內(nèi)存地址。當用delete釋放為多個變量分配的地址時,其格式為:delete 指針變量其中中不需要填寫變量的個數(shù)。例如:int *p=new int a8;delete p;任務實施new、delete的基本使用方法案例說明在本任務中,我們使用new和delete操作符對內(nèi)存進行一些基本操作。實施步驟步驟1 在Visual C+中新建一個C+ 源文件,編寫代碼如下:#include using namespace std;int main ( ) /基本數(shù)據(jù)類型 int *i = new int; /沒有初始值 int *j = new int(100); /初始值為
46、100 float *f = new float(3.1415f); /初始值為3.1415 cout i = *i endl; cout j = *j endl; cout f = *f endl; /數(shù)組 int *iArr = new int3;for (int k=0; k3; k+) iArrk = (k+1)*10; cout k : iArrk endl; /釋放內(nèi)存 delete i; delete j; delete f; delete iArr;/釋放數(shù)組空間 return 0;步驟2 編譯、連接程序,程序運行結(jié)果如圖所示。Thank you!項目三任務一 初識類與對象任務
47、二 深入學習類與對象的相關(guān)知識類與對象 抽象與實體的完美結(jié)合任務說明預備知識任務一 初識類與對象類(Class)是具有相同屬性和行為的一組對象的集合,是對屬于該類的全部對象的統(tǒng)一抽象描述。類是面向?qū)ο笾凶顬橹匾母拍钪?,利用類可以實現(xiàn)數(shù)據(jù)的封裝、隱藏、繼承和派生,C+中許多復雜的程序都是用類來實現(xiàn)的。使用類時,用戶不需要了解類的具體實現(xiàn),只需要通過外部接口,以特定的訪問權(quán)限來使用類的成員即可。一、類的聲明及類成員的訪問二、類成員函數(shù)的定義三、對象成員的定義與引用四、構(gòu)造函數(shù)與析構(gòu)函數(shù)一、類的聲明及類成員的訪問類也是一種數(shù)據(jù)類型,與結(jié)構(gòu)體類型不同的是,類中除了包含數(shù)據(jù)以外,還包含對這些數(shù)據(jù)操作
48、的函數(shù),它將數(shù)據(jù)和操作封裝在一起。聲明類的一般形式為:class 類名public:公有數(shù)據(jù)成員;公有成員函數(shù);private:私有數(shù)據(jù)成員;私有成員函數(shù);protected:保護數(shù)據(jù)成員;保護成員函數(shù);9; 二、類成員函數(shù)的定義C+中,類成員的訪問屬性有以下三種:(1)public(公有的)公有的成員用public來聲明,這類成員既可以被本類中的成員函數(shù)引用,也可以被任何外部函數(shù)引用。它是類與外界的接口。(2)private(私有的)私有的成員用private來聲明,這類成員只能被本類中的成員函數(shù)所引用。(3)protected(保護的)受保護的成員用protected來聲明,這類成員只能被
49、本類及本類的派生類中成員函數(shù)引用(本書將在項目四中詳細講述類的繼承與派生)。三、對象成員的定義與引用在類的聲明中聲明了類的數(shù)據(jù)成員和成員函數(shù)的原型之后,還要通過對類的成員函數(shù)進行定義來實現(xiàn)成員函數(shù)的功能,即成員函數(shù)的實現(xiàn)。成員函數(shù)的定義方法有以下3種。(1)在類內(nèi)直接定義成員函數(shù)C+中可以直接將成員函數(shù)定義在類的內(nèi)部。(2)在類外定義成員函數(shù)在類外定義成員函數(shù)的一般形式為:返回類型 類名:成員函數(shù)名(參數(shù)列表)函數(shù)體 “:”為作用域限定符,用來標識該成員函數(shù)所屬的類。(3)在類外定義成內(nèi)聯(lián)函數(shù)在類外定義成內(nèi)聯(lián)函數(shù)的一般形式為:inline 返回類型 類名:成員函數(shù)名(參數(shù)列表)函數(shù)體 【例3-
50、1】 聲明一個時鐘類,定義該類中的幾個成員函數(shù)。#includeclass Clock/定義時鐘類Clock public:/公有成員void SetTime(int h=0,int m=0,int s=0);/成員函數(shù)void ShowTime()/在類內(nèi)定義成員函數(shù)ShowTime()couthour:minute:secondendl;private:/私有成員int hour,minute,second; ; /數(shù)據(jù)成員void Clock:SetTime(int h,int m,int s)/在類外定義成員函數(shù)SetTime() hour=h;minute=m;second=s;vo
51、id main()/主函數(shù) Clock myClock;/定義對象myClockcoutfirst time set and output:endl;myClock.SetTime();/調(diào)用成員函數(shù)myClock.ShowTime();coutsecond time set and output:endl;myClock.SetTime(8,30,45);myClock.ShowTime();程序運行結(jié)果如圖所示。四、構(gòu)造函數(shù)與析構(gòu)函數(shù)(一)構(gòu)造函數(shù)1構(gòu)造函數(shù)概述構(gòu)造函數(shù)是一種特殊的成員函數(shù),它的主要功能是為對象分配存儲空間,以及為類的成員變量賦初值。構(gòu)造函數(shù)可以在類中定義,也可以在類中聲明
52、、在類外定義。定義構(gòu)造函數(shù)的一般形式為:類名: 構(gòu)造函數(shù)名(參數(shù)列表) 函數(shù)體 構(gòu)造函數(shù)名必須與類名相同,構(gòu)造函數(shù)可以有任意類型的參數(shù),但不能有任何返回值和返回類型。構(gòu)造函數(shù)不需要用戶來調(diào)用,而是在創(chuàng)建對象時自動被調(diào)用,且只調(diào)用一次。如果是在類中定義,則省略類名和作用域限定符。如果在定義類時沒有定義任何構(gòu)造函數(shù),編譯系統(tǒng)會自動為這個類生成一個默認的構(gòu)造函數(shù)。這個默認的構(gòu)造函數(shù)沒有參數(shù)且函數(shù)體是空的,它不執(zhí)行任何初始化操作?!纠?-2】 定義一個復數(shù)類的構(gòu)造函數(shù)。#include class Complex/類Complex的聲明public:/定義共有成員Complex()/在類內(nèi)定義構(gòu)造函數(shù)
53、 cout不帶參數(shù)的構(gòu)造函數(shù)被調(diào)用!endl;real=0;imag=0; void show()/定義成員函數(shù) cout(real,imag); private:/定義私有成員double real,imag;void main() Complex com;/創(chuàng)建一個對象com.show();/調(diào)用成員函數(shù)show 程序運行結(jié)果如圖所示。2帶參數(shù)的構(gòu)造函數(shù)對于不帶參數(shù)的構(gòu)造函數(shù),當定義該類的對象時,所有對象都具有相同的初值。但在實際應用中,用戶往往希望對不同的對象賦予不同的初值,這時就需要使用帶參數(shù)的構(gòu)造函數(shù)。定義對象的一般形式為:類名 對象名(實參1,實參2,實參n)【例3-3】 在【例3
54、-2】基礎上添加帶參數(shù)的構(gòu)造函數(shù)。#include class Complex/類的聲明 public:/定義公有成員Complex();/聲明無參數(shù)的構(gòu)造函數(shù)Complex(double,double);/聲明帶參數(shù)的構(gòu)造函數(shù)void show()/定義公有成員函數(shù)cout(real,imag)endl;private:/定義私有成員double real,imag;Complex:Complex() /定義無參數(shù)的構(gòu)造函數(shù) cout不帶參數(shù)的構(gòu)造函數(shù)被調(diào)用!endl;real=0;imag=0; Complex:Complex(double r,double i)/定義帶參數(shù)的構(gòu)造函數(shù)co
55、ut帶參數(shù)的構(gòu)造函數(shù)被調(diào)用!endl;real=r;imag=i;void main() Complex com;/定義對象com,調(diào)用無參數(shù)的構(gòu)造函數(shù)com.show();/調(diào)用對象的公有成員函數(shù)Complex com1(3,4);/定義對象com1,調(diào)用帶參數(shù)的構(gòu)造函數(shù)com1.show();/調(diào)用對象的公有成員函數(shù)Complex com2(1,2);/定義對象com2,調(diào)用帶參數(shù)的構(gòu)造函數(shù)com2.show();/調(diào)用對象的公有成員函數(shù) 程序運行結(jié)果如圖所示。3帶默認參數(shù)的構(gòu)造函數(shù)當構(gòu)造函數(shù)帶有參數(shù)時,可以通過實參將值傳遞給形參,也可以為構(gòu)造函數(shù)的參數(shù)指定默認值。如果用戶在定義對象時沒有
56、指定實參值,編譯系統(tǒng)就使用默認參數(shù)值來初始化數(shù)據(jù)成員?!纠?-4】 帶默認參數(shù)的構(gòu)造函數(shù)應用示例。#include class Complex/類的聲明 public:/定義公有成員Complex(double=0.0,double=0.0);/聲明帶默認參數(shù)的構(gòu)造函數(shù)void show()/定義公有成員函數(shù)cout(real,imag)endl;private:/定義私有成員double real,imag;Complex:Complex(double r,double i)/定義帶參數(shù)的構(gòu)造函數(shù) cout帶默認參數(shù)的構(gòu)造函數(shù)被調(diào)用!endl;real=r;imag=i; void main
57、() Complex com;/定義對象com,調(diào)用帶默認參數(shù)的構(gòu)造函數(shù)com.show();/調(diào)用對象的公有成員函數(shù)Complex com1(3); /定義對象com1,調(diào)用帶參數(shù)的構(gòu)造函數(shù)com1.show();/調(diào)用對象的公有成員函數(shù)Complex com2(1,2);/定義對象com2,調(diào)用帶參數(shù)的構(gòu)造函數(shù)com2.show();/調(diào)用對象的公有成員函數(shù)程序運行結(jié)果如圖所示。4帶參數(shù)初始化表的構(gòu)造函數(shù)構(gòu)造函數(shù)除了可以在函數(shù)體中使用賦值語句實現(xiàn)對數(shù)據(jù)成員的初始化,還可以通過參數(shù)初始化表來實現(xiàn)。帶參數(shù)初始化表的構(gòu)造函數(shù)的一般形式為:類名:構(gòu)造函數(shù)名(參數(shù)列表):參數(shù)初始化表 函數(shù)體 其中,
58、參數(shù)初始化表的一般形式為:參數(shù)名1(初值1), 參數(shù)名2(初值2), , 參數(shù)名n(初值n)【例3-5】 帶參數(shù)初始化表的構(gòu)造函數(shù)應用示例。#include class Complex/類的聲明public:/定義公有成員Complex();/聲明不帶參數(shù)的構(gòu)造函數(shù)Complex(double r,double i);/聲明帶參數(shù)的構(gòu)造函數(shù)void show()/定義公有成員函數(shù)cout(real,imag)endl;private:/定義私有成員double real,imag;Complex:Complex():real(0),imag(0)/定義帶參數(shù)初始化表的構(gòu)造函數(shù) cout帶參數(shù)初
59、始化表的構(gòu)造函數(shù)被調(diào)用!endl; Complex:Complex(double r,double i):real(r),imag(i)/定義帶參數(shù)初始化表的構(gòu)造函數(shù) cout帶參數(shù)初始化表的構(gòu)造函數(shù)被調(diào)用!endl; void main() Complex com;/定義對象com,調(diào)用無參數(shù)的構(gòu)造函數(shù)com.show();/調(diào)用對象的公有成員函數(shù)Complex com1(1,2);/定義對象com1,調(diào)用帶參數(shù)的構(gòu)造函數(shù)com1.show();/調(diào)用對象的公有成員函數(shù) 程序運行結(jié)果如圖所示。5構(gòu)造函數(shù)的重載在一個類中可以定義多個構(gòu)造函數(shù),這些構(gòu)造函數(shù)的名字相同,而參數(shù)的個數(shù)或參數(shù)的類型不同
60、,程序?qū)⒏鶕?jù)參數(shù)自動調(diào)用該類中對應的構(gòu)造函數(shù),從而對對象使用不同的初始化方法,增加程序設計的靈活性。這就是構(gòu)造函數(shù)的重載?!纠?-6】 重載構(gòu)造函數(shù)應用示例。#include class Complex/類的聲明 public:/定義公有成員Complex();/聲明不帶參數(shù)的構(gòu)造函數(shù)Complex(int,int);/聲明帶參數(shù)的構(gòu)造函數(shù)Complex(double,double);/構(gòu)造函數(shù)的重載void show()/公有成員函數(shù) cout(real,imag)endl; private:/定義私有成員double real,imag;Complex:Complex()/定義不帶參數(shù)的構(gòu)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學年新教材高中物理課時跟蹤訓練十九受力分析和共點力的平衡含解析新人教版必修第一冊
- 2024-2025學年高中物理課時分層作業(yè)14實驗:用雙縫干涉測量光的波長含解析新人教版選修3-4
- 2024-2025學年高中歷史課時作業(yè)3君主專制政體的演進與強化含解析人民版必修1
- 2025年動葉可調(diào)軸流電站用風機項目建議書
- 第3課時:認識紙(2)(教學設計)-2023-2024學年五年級下冊綜合實踐活動粵教版
- 第三單元第11課 西漢建立和“文景之治”2023-2024學年七年級上冊歷史同步教學設計(部編版)
- 第九課 小貓頂足球-偵測與機會指令 教學設計 -2023-2024學年大連版(2015)初中信息技術(shù)七年級下冊
- 第四單元《計算與問題解決》第5課時《成果報告可視化-軟件系統(tǒng)測試》教學設計 2023-2024學年教科版(2019)高中信息技術(shù)必修1
- 登岳陽樓(教學設計)-2024-2025學年高一語文必修下冊同步備課系列(教學設計+教學設計)(統(tǒng)編版2019)
- 2025年電火花成型機床項目發(fā)展計劃
- 2025年交管12123駕駛證學法減分題庫與參考答案
- 《突發(fā)事件應對法》考試題庫150題(含答案)
- 2025下半年上海事業(yè)單位招考易考易錯模擬試題(共500題)試卷后附參考答案
- 2025-2030年中國汽車用鉛酸蓄電池市場發(fā)展趨勢展望與投資策略分析報告
- 天津市和平區(qū)2024-2025學年高一(上)期末質(zhì)量調(diào)查物理試卷(含解析)
- 《呼吸》系列油畫創(chuàng)作中詩意建構(gòu)的研究與實踐
- cpk自動計算電子表格表格
- 第五章 曲線運動(基礎夯實)-高一物理人教版(2019)必修二單元鞏固檢測
- 排球正面上手傳球 說課稿-2023-2024學年高一上學期體育與健康人教版必修第一冊
- 2025年浙江省交通投資集團財務共享服務中心招聘2名高頻重點提升(共500題)附帶答案詳解
- 客流統(tǒng)計系統(tǒng)施工方案
評論
0/150
提交評論