C++面向對象程序設計教程-第1章-C++程序設計基礎_第1頁
C++面向對象程序設計教程-第1章-C++程序設計基礎_第2頁
C++面向對象程序設計教程-第1章-C++程序設計基礎_第3頁
C++面向對象程序設計教程-第1章-C++程序設計基礎_第4頁
C++面向對象程序設計教程-第1章-C++程序設計基礎_第5頁
已閱讀5頁,還剩85頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

C++面向對象程序設計教程第1章C++程序設計根底1.1C++的開展和主要特點1.1.1C++的開展1.1.2C++的特點1.2第一個C++程序以及C++程序開發過程1.2.1第一個C++程序 1.2.2C++程序開發過程1.3C++在非面向對象方面的常用新特性 1.3.1C++的輸入輸出1.3.2const定義常量函數重載有默認參數的函數變量的引用 1.3.6動態分配/釋放內存的運算符new和delete 1.3.7布爾類型1.4程序陷阱1.5補充:變量的定義、數據類型、函數等1.1C++的開展和主要特點1.1.1C++的開展C++由AT&TBellLaboratories的BjarneStroustrup設計和實現的,C++最初的版本被稱作“帶類的C”1980年第一次投入使用支持面向對象特性在1983年被參加到C++中,在1987年至1989年之間,模板技術被加進了C++C++標準化工作在1990年啟動。標準化工作由ANSI〔美國國家標準化組織〕及后來參加的ISO〔國際標準化組織〕負責。1998年正式發布了C++國際標準回憶:C語言的特點(1)C語言既具備高級語言的結構和編程環境,又提供類似于匯編語言那樣的系統資源操縱能力及程序執行效率。適合解決有實時要求的問題。(2)有豐富的運算符和數據類型,表達式類型多樣化,可以方便地實現在其他語言中較難實現的運算,對各種不同類型的程序設計都有良好的適應性。(3)以函數為根底實現程序的結構化設計,支持大型程序的多文件構成及單個文件獨立編譯,適合大型復雜程序的設計。(4)可移植性好,語言簡潔、緊湊,使用方便、靈活。1.1.2C++的特點一個更好的CC++兼容C,會C的程序員,可在C

的根底上逐步參加C++的新特性支持面向對象程序設計C++通過類支持面向對象程序設計支持范型程序設計在C++中,通過模板簡單而實用地實現了范型程序設計技術補充程序設計語言的開展1、開展過程:機器語言匯編語言高級語言(1)機器語言簡單的“0”和“1”的組合,與硬件相關。(2)匯編語言將機器語言映射為一些可以被人們讀懂的助記符,如“ADD”、“SUB”等,與硬件相關。(3)高級語言接近自然語言,與硬件無關。2、高級語言的開展(1)根底語言,如:Fortran,Basic等;(2)結構化程序設計語言,如:C語言,Pascal等;(3)面向對象程序設計語言,如:純面向對象的有:Smalltalk,Eiffel,Java;混合型的有:C++,CLOS。例如:要向屏幕打印一個“A”字符1、BASIC語言:PRINT“A”2、PASCAL語言:writeln(‘A’);3、C語言:printf(“A”);4、C++語言:cout<<“A”;5、JAVA語言:System.out.print("A");1、新的研究領域對信息科學、軟件工程、人工智能、系統工程和認知科學等學科有重要影響;對在計算機科學與技術的許多方面影響深遠。面向對象數據庫(OODB,Object-OrientedDatabase)面向對象的系統模擬面向對象的人機交互圖形用戶界面(GUI,GraphicUserInterface)人工智能和知識工程計算機輔助軟件工程(CASE,Computer-AidedSoftwareEngineering)計算機網絡設計模擬面向對象技術概述2、定義(Coad和Yourdon)

面向對象=對象+類+繼承+消息通信3、作用(1)提高生產效率。表現在:程序可重用性(2)降低維護復雜性。表現在:程序模塊化(3)開發大型軟件。主要表現在:抽象模型更接近現實世界;模型與程序易于理解;程序具有重用性和模塊化;軟件易于維護。結構化程序設計與面向對象程序設計的區別1、結構化程序設計60年代后期提出來的(針對當時對goto語句的爭論才開展起來的),70年代到80年代非常流行;設計思路:自頂向下、逐步求精、模塊化;優點:增強了程序的可讀性,程序結構清晰;缺點:軟件的可重用程度低,軟件很難維護。C語言之父DennisRitchieTheCProgrammingLanguage(1978)2、面向對象程序設計90年代以來才興起的;設計思路:OOA(面向對象分析)、OOD(面向對象設計)、OOP(面向對象程序設計);優點:可移植性增強了,可重用性、可維護性好;缺點:有待于大家去發現和體會。C++之父BjarneStroustrupTheC++ProgrammingLanguage(1991)面向對象技術的根本特征根本特征主要有:對象、類、封裝、繼承、消息、結構與連接、多態性。1、對象(1)定義:客觀存在的事物,是構成現實世界的一個獨立單位;具體的:一名學生,一臺電腦等;抽象的:一次籃球比賽,一次班會等;(2)屬性和效勞是構成一個對象的兩個重要的因素;屬性:對象本身所具有的狀態。如:S(S#,SNAME,AGE,SEX);屬性分為公有(public)、保護(protected)和私有(private);效勞:是用來描述對象動態特征和行為的一個操作。(3)對象完整的定義:描述事物的一個實體;構成系統的一個根本單元;由一組屬性和效勞組成。2、類(1)定義:具有相同屬性和效勞的一組對象的集合,為該類的全部對象提供了統一的抽象描述。其內部包含屬性和效勞。在面向對象程序設計中,類是一個獨立的程序單位。(2)作用:用來定義對象。(3)類的層次結構:人教職工學生教師管理員工人本科生研究生超類(父類)

子類兩者的關系:超類是子類的抽象或普通化,子類是超類的特殊化活具體化。3、封裝(1)定義:把對象的屬性和效勞結合成一個獨立的系統單位,隱蔽對象的內部細節。如:一個集成塊,我們不關心其內部結構,只關心芯片的引腳個數,引腳的電氣參數及引腳提供的功能。(2)特點:一個清楚的邊界;一個接口;受保護的內部實現。(3)意義:靜態特征和動態特征的不可分割;隱蔽性反映了事物的相對獨立性;如:存款:姓名,賬號,存款額,利率等屬性;計算利息,顯示存款金額,轉賬等效勞。4、繼承(1)定義:特殊類的對象擁有其一般類的全部屬性和效勞;(2)基類:一般類;派生類:特殊類(3)意義:對程序的理解、修改和維護都變得相對簡單;實現了軟件的可重用性、模塊化。如買大桶的礦泉水商店;顧客;買東西;買大桶什么牌子的礦泉水;付款;案例:5、消息(1)定義:向對象發出的效勞請求;(2)組成:接受者;發送者;要求的效勞;輸入信息;輸出信息;如買大桶的礦泉水商店;顧客;買東西;買大桶什么牌子的礦泉水;付款;(3)機制流程:創立對象輸入信息;發送消息發送者;接受消息接受者;分析處理消息要求的效勞;返回相應的消息輸出信息;6、結構與連接分為4種:一般與特殊結構;整體與局部結構;實例連接;消息連接。(1)一般與特殊結構類與類之間的關系,即一般類與特殊類;(2)整體與局部結構對象之間的組成關系;(3)實例連接一對一;一對多;多對多;(4)消息連接效勞的實現方式;如:學生和圖書管理員,“我借一本C++的書”。7、多態性指在一般類中定義的屬性或效勞在被特殊類繼承以后,可以具有不同的數據類型或表現出不同的行為。幾何圖形橢圓多邊形如:繪圖(效勞)1.2第一個C++程序以及C++程序開發過程1.2.1第一個C++程序C++程序的結構嚴謹,下面介紹著名的“Hello,world!”程序,此程序一般用于介紹各種語言的第一個程序程序功能是在屏幕上輸出字符串“Hello,world!”。例1.1在屏幕上輸出“Hello,world!”//文件路徑名:e1_1\main.cpp#include<iostream> //編譯預處理命令usingnamespacestd; //使用命名空間stdintmain() //主函數main(){ cout<<“Hello,World!”<<endl; //用C++方法輸出一行 system(“PAUSE”); //輸出系統提示信息 return0; //返回值0,返回操作系統}程序運行時屏幕輸出如下:Hello,world!請按任意鍵繼續...注釋上面程序的第一行如下: //文件路徑名:e1_1\main.cpp這一行不是程序代碼,是注釋,告訴讀者程序的文件路徑名,位于“//”后面的文本都是注釋讀者應養成給程序添加注釋的習慣在C++程序中,可以使用C語言中“/*……*/”形式的注釋,還可以使用以“//”開頭的注釋輸出信息例1.1中的main()函數體包含了如下的語句: cout<<"Hello,World!"<<endl; //用C++的方法輸出一行cout實際上是C++系統預定義的對象名,稱為標準輸出流對象。“<<”是“輸出運算符”,在上面的代碼中將運算符“<<”右側雙引號內的字符串“Hello,World!”插入到輸出流中,endl用于表示換行,endl也插入到輸出流中,C++系統將輸出流的內容輸出到系統指定的設備〔一般為顯示器〕上C++中也可以用C函數printf()進行輸出main()函數中還包含了調用system()函數的語句: system("PAUSE"); //輸出系統提示信息 system("PAUSE")函數調用將使程序暫停,以便用戶觀察執行結果預處理命令和命名空間stdcout需要用到頭文件iostream。程序中如下的代碼行 #include<iostream> //編譯預處理命令 是一個預處理命令,文件iostream的內容提供輸入或輸出時所需要的一些信息注意:在C語言中所有的頭文件都帶后綴.h,C++標準要求由系統提供的頭文件不帶后綴.h,用戶自己編制的頭文件可以有后綴.h。在C++中也可使用C語言編譯系統提供的帶后綴.h的頭文件,如“#include<stdio.h>”程序的如下代碼: usingnamespacestd; //使用命名空間std 表示使用命名空間std。C++標準庫中的類和函數是在命名空間std中聲明的,程序中可用“usingnamespacestd;”語句聲明,表示要用到命名空間std中的內容定義main()函數下面的代碼行定義了main()函數:intmain() //主函數main(){ cout<<"Hello,World!"<<endl; //輸出一行 system("PAUSE"); //輸出系統提示信息 return0; //返回值0,返回操作系統}所有C++程序都由一個或多個函數組成,每個C++程序都必須有一個main()函數定義main()函數定義main()函數的第一行代碼如下: intmain() //主函數main() 的int表示main()函數的返回值的類型,表示返回一個整數值,執行完main()函數后將返回給操作系統的一個代碼,它表示程序的狀態。在下面的語句中,指定了執行完main()函數后要返回的值: return0; //返回值0,返回操作系統 main()函數通常用返回0表示程序正常終止,而返回非0值表示發生了異常標準C++要求main()函數必須聲明為int型。有的操作系統〔如Linux)要求執行一個程序后必須向操作系統返回一個數值。但有些C++編譯系統并未完全執行C++這一規定,如主函數首行寫成“voidmain()”也能通過,本書中的所有例題都按標準C++規定寫成“intmain()”。1.2.2C++程序開發過程注意:當前的C++語言開發環境中都集成了以上四個步驟,大大方便了C++語言的開發工作。附錄B討論了常用C++語言開發環境的使用方法。 請同學們至少選擇一種〔如能做到兩種更好〕C++編譯系統,在該環境下輸入和運行例題和習題中的程序。程序開發過程

簡單的C++程序1、正式的程序從代碼“voidmain()”開始,它包含一個名為main()的函數,也稱為主函數。每個C++程序有且僅有一個main()函數,程序在開始運行時會自動調用main()函數。main()前面的void表示函數的返回值的類型,意味著程序執行結束后無需向操作系統返回。

3、注釋:“注釋”是程序員為讀者作的說明,用來提高程序的可讀性,C++程序在編譯過程中忽略注釋。(1)“//”用來注釋一行說明,在“//”之后的文字直到換行都為注釋。一般用來對于程序中難懂的代碼進行說明。(2)“/*”和“*/”用來注釋一段說明,在“/*”和“*/”之間的局部,不管多長都為注釋。2、#include<iostream.h>:每次啟動編譯器時,先運行預處理器,預處理器找到所有以“#”開頭的代碼行進行處理。iostream是系統定義的一個“頭文件”,它設置了C++的I/O相關環境,并定義了輸入輸出流對象cout和cin等。

補充C++的字符集26個小寫字母

abcdefghijklmnopqrstuvwxyz26個大寫字母

ABCDEFGHIJKLMNOPQRSTUVWXYZ10個阿拉伯數字

0123456789

其他符號

+-*/=,._:;?\"'~|!#%&()[]{}^<>空格C++語言根本字符:關鍵字關鍵字〔keyword〕:又稱保存字。是由系統定義的具有特定含義的英文單詞。關鍵字不能另作它用。C++區分大小寫,關鍵字全部由小寫字母組成。標準C++〔ISO14882〕定義了74個關鍵字,具體的C++編譯器會做一些增刪。常用關鍵字及分類見表2.1。數據類型說明符與修飾符boolcharwchar_tclassconstdoubleenumfloatintlongshortsignedstructunionunsignedvoidvolatile存儲類型說明符autoexterninlineregisterstatic訪問說明符friendprivateprotectedpublic其它說明符asmexplicitnamespaceoperatortemplatethistypedeftypenameusingvirtual

語句與標號breakcasecatchcontinuedefaultdoelseforgotoifreturnswitchthrowtrywhile

運算符及邏輯值deletefalsenewsizeoftrue表2-1C++常用關鍵字及分類

關鍵字

還有一些關鍵字本書未介紹:

const_castdynamic_castreinterpret_caststatic_castexportmutabletypeid下面可用一些關鍵字代替邏輯運算符:andand_eqbitandbitorComplnotoror_eqXorxor_eqnot_eq關鍵字標識符標識符〔Identifier,ID〕:是程序員定義的“單詞”,用來給變量、常量、數據類型、函數等命名。合法標識符由字母或下劃線開始,由字母、數字、下劃線組成,其有效長度為1-31個字符,長度超過31個字符者只識別前31個字符,VC++標識符長度為1-247個字符。建議使用有一定含義的英文單詞或拼音序列作標識符,以提高可讀性;另外盡量不用下劃線或雙下劃線打頭,以免與系統定義的關鍵字沖突。 標識符例:判斷下面哪些是合法的標識符:

MyFileSalary94amountvoid94SalarySalary94$amountf3.5Num_of_Student標點符號標點符號:#、()、{}、,、:、;、"、'等。標點符號的作用:有一定的語法意義。如字符和字符串常量分別用‘’和“”引起來。對語法符號起分隔作用。如;等C++中的數據類型C++的數據結構實型float雙精度型doubleC++的數據類型基本數據類型非基本數據類型數組type[]指針type*結構struct聯合union枚舉enum類class整型int字符型char邏輯型bool無值型void實型類型名稱占用字節數取值范圍bool布爾型

1true,false(signed)char有符號字符型1-128

127unsigedchar無符號字符型10

255(signed)short(int)有符號短整型2-32768

32767unsignedshort(int)無符號短整型20

65535(signed)int(signed)有符號整型4-231

(231-1)unsigned(int)無符號整型40

(232-1)(signed)long(int)有符號長整型4-231

(231-1)unsignedlong(int)無符號長整型40

(232-1)float實型4-1038

1038double雙精度型8-10308

10308longdouble長雙精度型8-10308

10308void無值型0無值VC++中所有根本數據類型常量和變量變量文字常量常變量在程序中,常量和變量是用來表示數據的;常量又分為字面常量、常變量;變量1變量說明

2變量初始化值

變量,在程序中是指可以改變值的量;變量必須用標識符進行標識,稱為變量名;變量有類型之分,如整形變量、字符變量等;任何變量都必須先說明后使用;一是便于編譯程序為變量分配空間,二是便于編譯時進行語法檢查;變量使用的第一步,是給變量賦初始值;變量說明

在C++中,變量說明的一般格式為:《存儲類型》數據類型變量名1《,變量名2,

,變量名n》;例:inti,j,k;

//說明三個整型變量i,j,kfloatx,y,z;

//說明三個單精度實型變量x,y,zcharc1,c2;

//說明兩個字符型變量c1,c2doubledx;

//說明一個雙精度型變量dx

變量初始化賦初值:定義變量時即給變量一個值稱為變量初始化或給變量賦初值例如: inta=3,b=4,c=5; floatx=3.0; 變量初始化可以防止引用到隨機變量。文字常量1.整型常量

4.字符串常量3.字符型常量2.實型常量文字常量:指程序中直接給出的量;常量的值在程序執行過程中保持不變;并且存儲在程序區,而非數據區;根據取值和表示方法的不同,可分為以下幾種:1.3C++在非面向對象方面的常用新特性C++在非面向對象方面的常用新特性C++是從C開展而來的,C++對C引入了面向對象的新概念,同時也增加一些非面向對象的新特性,這些特性使C++使用起來更方便與更平安,本節將討一些常用新特性。1.3.1C++的輸入輸出為了方便用戶,C++還增加了標準輸入輸出流對象cout和cin。cout代表標準輸出流對象,cin代表輸入流對象cout和cin都是在頭文件iostream中定義的。cin的輸入設備是鍵盤,cout的輸出設備是屏幕coutcout是從內存向屏幕流動的數據流。cout必須和輸出運算符“<<”配合使用。“<<”在此處起到插入的作用,例如: cout<<"Hello,World!\n"; //用C++的方法輸出一行 的作用是將字符串“Hello,World!\n”插入到輸出流中,也就是輸出在標準輸出設備上。在頭文件iostream中定義了控制符endl,endl代表回車換行操作,作用與“\n”相同。cincin是從鍵盤向內存流動的數據流。用“>>”運算符從輸入設備鍵盤取得數據送到標準輸入流cin中,然后再送到內存。“>>”常稱為輸入運算符。cin應與“>>”配合使用。例如:intm; //定義整型變量mfloatx; //定義浮點型變量xcin>>m>>x; //輸入一個整數和一個實數可以從鍵盤輸入:16168.98 m和x分別獲得值16和168.98。例1.2cin與cout使用例如a。#include<iostream> //編譯預處理命令usingnamespacestd; //使用命名空間stdintmain() //主函數main(){ cout<<"請輸入你的姓名與年齡:"<<endl;//輸出提示信息 charname[16]; //姓名 intage; //年齡

cin>>name; //輸入姓名 cin>>age; //輸入年齡 cout<<"你的姓名是:"<<name<<endl; //輸出姓名 cout<<"你的年齡是:"<<age<<endl; //輸出年齡

system("PAUSE"); //輸出系統提示信息 return0; //返回值0,返回操作系統}對變量的定義放在執行語句之后。在C語言中要求變量的定義必須在執行語句之前。C++允許將變量的定義放在程序的任何位置。1.3.2const定義常量在C語言中常用#define命令來定義符號常量,例如:#definePI3.14159 //聲明符號常量PI 在預編譯時進行字符替換,把程序中出現的字符串PI全部替換為3.14159C++提供了用const定義常量的方法,例如:constfloatPI=3.14159; //定義常量PI 常量PI具有數據類型,在編譯時要進行類型檢查,占用存儲單元,在程序運行期間它的值是固定的。注意:(1)程序中不能修改,只能讀;(2)常量名不能放在賦值語句的左邊,如:constfloatPI;PI=3.14159;(3)常量定義中初始化的值可以是常量表達式,如:constcharca[]=“Iamastudent.”;(4)定義常量的目的是:防止在程序中對該值的改變,減少程序出錯的可能性,提高程序的可維護性;例1.3用const定義常量使用例如。#include<iostream> //編譯預處理命令usingnamespacestd; //使用命名空間stdintmain() //主函數main(){ constfloatPI=3.14159; //定義常量PI floatr,s; //定義變量

cout<<"輸入半徑:"; //輸入提示信息 cin>>r; //輸入半徑r s=PI*r*r; //計算面積 cout<<"面積:"<<s<<endl; //輸出面積

system("PAUSE"); //輸出系統提示信息 return0; //返回值0,返回操作系統}1.3.3函數重載問題:在C語言中,例如:intadd(intx,inty){ints;returns=x+y;}floatadd(floatx,floaty){ints;returns=x+y;}C++中,可以解決這個問題。C++允許在同一作用域內定義多個同名函數,但要求這些函數參數的類型或個數不相同。這個功能稱為函數重載在同一個作用域內,函數名相同,參數的類型或個數不同的函數稱為重載函數。重載函數的形參個數或類型必須至少有其中之一不同,不允許參數個數和類型都相同而只有返回值類型不同,這是由于系統無法從函數的調用形式判斷與哪一個重載函數相匹配。//函數重載#include<iostream>//-------------------------------------intabs(inta){return(a>0)?a:-a;}//------------------------------------doubleabs(doublea){return(a>0)?a:-a;}//------------------------------------intmain(){std::cout<<abs(-10)<<"\n";std::cout<<abs(-12.23)<<"\n";}//=======================重載函數匹配只要參數個數不同,參數類型不同,參數順序不同,函數就可以重載。然而,返回類型不同那么不允許函數重載。如:voidfunc(inta);//okvoidfunc(chara);//okvoidfunc(chara,intb);//okvoidfunc(inta,charb);//okcharfunc(inta);//error因為:func(23);//錯:voidfunc(inta);還是charfunc(inta);匹配規那么:尋找一個嚴格匹配,如果找到了,就用那個函數;通過相容類型的隱式轉換尋找一個匹配,如果找到了,就用那個函數通過用戶定義的轉換尋找一個匹配,假設能查出有唯一的一組轉換,就用那個函數;例如:voidprint(double);voidprint(int);voidmain(){print(1);//匹配voidprint(int);規那么1print(1.0);//匹配voidprint(double);規那么1print(‘a’);//匹配voidprint(int);規那么2print(3.14159);//匹配voidprint(double);規那么2}在使用重載函數時需要注意下面三點:(1)編譯器不以形式參數的標識符區分重載函數。例intmax(inta,intb);intmax(intx,inty);編譯器認為這是同一個函數聲明兩次,編譯時出錯。(2)編譯器不以函數類型區分重載函數。floatfun(intx,inty);intfun(intx,inty);如果函數名和形式參數表相同,只是函數類型不同,編譯器同樣認為它們是同一個函數聲明兩次,編譯出錯。(3)不應該將完成不同功能的函數寫成重載函數,破壞程序的可讀性。例1.4求2個數中最小值〔分別考慮整數、浮點數的情況〕。intMin(inta,intb) //求2個整數的最小值{ returna<b?a:b; //返回a,b的最小值 }floatMin(floata,floatb) //求2個浮點數的最小值{ returna<b?a:b; //返回a,b的最小值 }intmain() //主函數main(){ inta,b; //定義整型變量 floatx,y; //定義浮點型變量 cout<<"輸入整數a,b:"; //輸入提示 cin>>a>>b; //輸入a,b cout<<a<<","<<b<<"的最小值為"<<Min(a,b)<<endl; //輸出a,b的最小值,調用“intMin(inta,intb)” cout<<“輸入浮點數x,y:"; //輸入提示 cin>>x>>y; //輸入x,y cout<<x<<","<<y<<"的最小值為"<<Min(x,y)<<endl; //輸出x,y的最小值,調用“floatMin(floata,floatb)” system("PAUSE"); //調用庫函數system(),輸出系統提示信息 return0; //返回值0,返回操作系統}例1.5用重載函數實現分別求2個整數或3個整數中的最小者。intMin(inta,intb) //求2個整數的最小值{ returna<b?a:b; //返回a,b的最小值 }intMin(inta,intb,intc) //求3個整數的最小值{ intt=a<b?a:b; //a,b的最小值

t=t<c?t:c; //t,c的最小值 returnt; //返回a,b,c的最小值 }intmain() //主函數main(){ inta,b,c; //定義整型變量 cout<<"輸入整數a,b,c:"; //輸入提示 cin>>a>>b>>c; //輸入a,b,c cout<<a<<“,”<<b<<“的最小值為”<<Min(a,b)<<endl; //輸出a,b的最小值,調用“intMin(inta,intb)” cout<<a<<","<<b<<","<<c<<"的最小值為"<<Min(a,b,c) <<endl;//輸出a,b,c的最小值,調用“intMin(inta,intb,intc)” system("PAUSE"); //輸出系統提示信息 return0; //返回值0,返回操作系統}1.3.4有默認參數的函數在C語言中,在函數調用時形參從實參獲得參數值,所以實參的個數應與形參相同。有時屢次調用同一函數時使用相同的實參值,C++允許給形參提供默認值,這樣形參就不一定要從實參取值了。如有一函數聲明: floatArea(floatr=1.6); //有默認值的函數聲明 上面的函數聲明指定參數r的默認值為1.6,如果在調用此函數時無實參,那么參數r的值為1.6,例如: s=Area(); //等價于Area(1.6)有默認參數的函數默認參數應在函數名第一次出現時指定。默認參數必須是函數參數表中最右邊(尾部)的參數。例如: floatVolume(floatl=10.0,floatw=8.0,floath);//錯誤 floatVolume(floatl=10.0,floatw=8.0,floath=6.0);//正確 對于上面正確的函數聲明,可采用如下形式的函數調用:v=Volume(10.1,8.2,6.8); //形參值全從實參得到,l=10.1,w=8.2,h=6.8v=Volume(10.1,8.2); //最后1個形參的值取默認值,l=10.1,w=8.2,h=6.0v=Volume(10.1); //最后2個形參的值取默認值,l=10.1,w=8.0,h=6.0v=Volume(); //形參的值全取默認值,l=10.0,w=8.0,h=6.0例1.6函數默認參數例如。voidShow(charstr1[],charstr2[]="",charstr3[]=""); //在聲明函數時給出默認值intmain() //主函數main(){ Show("你好!"); //str1值取"你好!",str2與str3取默認值 Show("你好,","歡送學習C++!"); //str1值"你好,",str2取"歡送學習C++!",str3取默認值 Show("你好",",","歡送學習C++!"); //str1值"你好,",str2取",",str3取值"歡送學習C++!" system("PAUSE"); //輸出系統提示信息 return0; //返回值0,返回操作系統}voidShow(charstr1[],charstr2[],charstr3[]){ cout<<str1<<str2<<str3<<endl; //輸出str1,str2,str3}1.3.5引用的概念建立“引用”的作用是為一個變量起另一個名字,對一個變量的“引用”的所有操作,實際上都是對其所代表的〔原來的〕變量的操作設有一個變量x,要給它起一個別名y,可以這樣寫:floatx; //定義變量x float&y=x;//聲明y是一個浮點型變量的引用變量,它被初始化為x 聲明后,使用x或y代表同一變量。在上述聲明中,&是“引用聲明符”對變量聲明一個引用,并不另開辟內存單元,x和y都代表相同一變量存儲單元。引用的概念在聲明一個引用時,必須同時使之初始化在函數中聲明一個變量的引用后,在函數執行期間,該引用一直與其代表的變量相聯系,不能再作為其他變量的別名。例如:inta,b; //定義整型變量a,bint&c=a; //使c成為變量a的引用〔別名〕int&c=b; //又使c成為變量b的引用〔別名〕是錯誤的例1.7變量的引用使用例如。intmain() //主函數main(){ inta=10; //定義變量 int&b=a; //b為a的引用,a與b代表相同變量存儲單元 b=b+2; //b的值自加2,a與b的值都為12 cout<<"a的地址:"<<&a<<endl; //輸出a的地址 cout<<"b的地址:"<<&b<<endl; //輸出b的地址 cout<<"a的值:"<<a<<endl; //輸出a的值 cout<<"b的值:"<<b<<endl; //輸出a的值 system("PAUSE"); //輸出系統提示信息 return0; //返回值0,返回操作系統}程序運行時屏幕輸出參考如下:a的地址:0013FF7Cb的地址:0013FF7Ca的值:12b的值:12請按任意鍵繼續...將引用作為函數參數C++增加“引用”的主要目的是利用它作為函數參數,以便擴充函數傳遞數據的功能。在C語言中,將變量名作為實參。這時將變量的值傳遞給形參。傳遞是單向的,在調用函數時,形參和實參不是同一個存儲單元。在執行函數期間形參值發生變化并不傳回給實參。例1.8以變量為實參不能實現交換變量的值的。voidSwap(inta,intb) //不能實現交換實參變量的值{ intt=a;a=b;b=t; //循環賦值交換a,b的值}intmain() //主函數main(){ intm=6,n=8; //定義整型變量 Swap(m,n); //調用函數Swap() cout<<m<<""<<n<<endl; //輸出m,n的值 system("PAUSE"); //輸出系統提示信息 return0; //返回值0,返回操作系統}在C程序中可以用指針傳遞變量地址的方法。使形參得到一個變量的地址,這時形參指針變量指向實參變量單元。例1.9用指針變量作形參,實現兩個變量的值互換。voidSwap(int*p,int*q) //實現交換*p與*q的值{ intt=*p;*p=*q;*q=t; //循環賦值交換*p與*q的值}intmain() //主函數main(){ intm=6,n=8; //定義整型變量 Swap(&m,&n); //調用函數Swap() cout<<m<<""<<n<<endl; //輸出m,n的值 system("PAUSE"); //輸出系統提示信息 return0; //返回值0,返回操作系統}在C++中,把變量的引用作為函數形參,由于形參是實參的引用,也就是形參是實參的別名,這樣對形參的操作等價于對實參的操作。例1.10利用引用形參實現交換兩個變量的值。voidSwap(int&a,int&b) //實現交換實參變量的值{ intt=a;a=b;b=t; //循環賦值交換a與b的值}intmain() //主函數main(){ intm=6,n=8; //定義整型變量 Swap(m,n); //調用函數Swap() cout<<m<<""<<n<<endl; //輸出m,n的值 system("PAUSE"); //輸出系統提示信息 return0; //返回值0,返回操作系統}常引用常引用就是用const對引用加以限定,表示不允許改變該引用的值。例如:inta=6; //定義整型變量a,初值為6constint&b=a; //聲明常引用,不允許改變b的值b=8; //改變常引用b的值,錯誤a=8; //改變a的值,正確常引用通常用作函數形參,這樣能保證形參的值不被改變例1.11常引用形參例如。structPerson{ charname[20]; //姓名 charsex[3]; //性別};voidShow(constPerson&p){ cout<<"姓名:"<<<<endl; //輸出姓名 cout<<"性別:"<<p.sex<<endl; //輸出性別}intmain() //主函數main(){ Personp={"李倩","女"}; //定義結構體變量 Show(p); //輸出p system("PAUSE"); //輸出系統提示信息 return0; //返回值0,返回操作系統}在程序中,用結構名Person作為類型來定義變量p,在C語言中,不能用結構名來定義結構變量名,必須在結構名前加struct才能定義結構變量,即應采用如下形式定義:struct Personp={"李倩","女"};//定義結構體變量常引用可以用常量或表達式對常引用進行初始化,例如:inta=6; //定義變量constint&b=a+3;//正確,可以用表達式對常引用進行初始化int&c=a+3; //錯誤,對非常引用只能用變量進行初始化用表達式對常引用進行初始化時,系統將生成一個臨時變量,用于存儲表達式的值,引用是臨時變量的別名。例如將“constint&b=a+3;”變換為:inttem=a+4; //將表達式的值存放在臨時變量tem中constint&b=tem;//聲明b是tem的引用(別名)1.3.6動態分配運算符newC++語言使用能完成動態內存分配和初始化工作的運算符new,以及一個能完成清理與釋放內存工作的運算符delete來管理動態內存。例如:newint; //分配一個存放整數的空間,返回一個指向整型數據的指針newint(6); //分配一

溫馨提示

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

評論

0/150

提交評論