




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C+基礎知識2信息學院李崇威ise_licwQQ: 58296786編輯課件C+基礎知識2C+語言的產生、特點及結構特性C+標準輸入輸出流引用類構造函數拷貝構造函數析構函數編輯課件C+語言的產生C+是從C語言發展演變而來的,首先是一個更好的C引入了類的機制,最初的C+被稱為“帶類的C”1983年正式取名為C+從1989年開始C+語言的標準化工作于1994年制定了ANSI C+標準草案于1998年11月被國際標準化組織(ISO)批準為國際標準,成為目前的C+編輯課件C+的特點全面兼容C它保持了C的簡潔、高效和接近匯編語言等特點。對C的類型系統進行了改革和擴充,比C更安全,其編譯系統能檢查出更多的
2、類型錯誤。C+也支持面向過程的程序設計,不是一個純正的面向對象的語言。支持面向對象的機制,可方便地構造出模擬現實問題的實體和操作。 編輯課件C+程序的結構特性#include void main( ) coutHello!n; coutWelcome to c+!n;運行結果:Hello!Welcome to c+!C+示例程序1:#include using namespace std;編輯課件C+示例程序2: 兩數相加#include using namespace std;int add(int a, int b); / 函數原型說明void main( ) / 主函數 int x, y
3、, sum; / 定義三個整型變量 coutx; / 從鍵盤輸入變量x的值 ciny; / 從鍵盤輸入變量y的值 sum = add(x, y); / 調用函數add,將得到的值賦給變量sum cout“The sum is:”sum; / 輸出兩個數的和 int add (int a, int b)int c;c = a + b;return c;編輯課件C+程序的編輯、編譯和運行 C源程序文件擴展名為.C,而C+源程序文件擴展名為.CPP。在Windows下,常用Visual C+開發環境來編輯、編譯和運行C+程序。編輯課件C + 標準輸入輸出流在C+中,語言本身并不包含輸入和輸出功能,但
4、C+標準庫提供了一套用于輸入和輸出的類庫。在C+的輸入、輸出系統中,最核心的對象是流(stream),一個流就是一個字節序列。流的操作包括對流的讀和寫。C+輸入輸出流的思想:令標準I/O、文件和存儲塊看上去都一樣,只需記住一個接口就可以了。與標準C的輸入輸出庫中的各種函數相比,C+的輸入輸出流更容易、更安全、更有效。編輯課件cout輸出流cout是預定義的輸出流類對象。當程序需要在屏幕上顯示輸出時,可以使用插入符“”向cout輸出流中插入字符。 “”是預定義的插入運算符。格式如下: cout 表達式”從cin輸入流中抽取字符,“”是預定義的提取運算符。格式如下: cin表達式表達式編輯課件簡單
5、的I/O格式控制用cin、cout進行數據的輸入和輸出時,都自動按照默認格式處理。但我們經常需要設置特殊的格式。這里只介紹最簡單的格式控制。C+的I/O流類庫提供了一些控制符,可以直接嵌入到輸入/輸出語句中來實現I/O格式控制。使用格式控制符首先必須在源程序的開頭包含iomanip.h。下表中列出了幾個常用的I/O流類庫格式控制符。編輯課件控制符含義dec數值數據采用十進制表示hex數值數據采用十六進制表示oct數值數據采用八進制表示endl插入換行符,并刷新流setprecision(int)設置浮點數的小數位(包括小數點)setw(int)設置域寬常用的I/O流控制符編輯課件 例:控制符的
6、使用 #include #include using namespace std; void main() int x;cinx; couthexx octx decxendl; cout123setw(6)456endl; coutsetw(5)setprecision(3)3.14159endl; 編輯課件引用 概念:引用通常被認為是某個變量的別名。聲明格式:類型 &引用名 = 已定義的變量名;例如: int i=5; int &j=i;這里,j是一個整數類型的引用,用整型變量i對它進行初始化,這時j就可看作是變量i的別名 。編輯課件引用型變量是從指針型變量發展來的一種特殊類型的變量。引用
7、變量的實質仍然是指針,但采用了不同于指針的表示方法,可以簡化對函數有多個返回值時的處理,使得程序更加清晰可讀。引用型變量是C+的新增特性,是一種不具備自己的實際數據存儲空間的變量,它必須與另一個同類型的變量共用一個空間, 其本身不是一個獨立的變量。因此,引用只有聲明,沒有定義。編輯課件C+中的類類是具有相同屬性和行為的一組對象的集合。類是一種復雜的數據類型,它是將不同類型的數據(屬性)和與這些數據相關的運算(行為)封裝在一起的集合體,其內部包括屬性和行為兩個主要部分。它為屬于該類的全部對象提供了統一的抽象描述。利用類可以實現數據的封裝、隱藏、繼承與派生。利用類易于編寫大型復雜程序,其模塊化程度
8、比C中采用函數更高。因為類將一些數據及與數據相關的函數封裝在一起,使類中的數據得到很好的“保護”。在大型程序中不會被隨意修改。編輯課件class 類名 private: 私有成員;public: 公有成員; (外部接口)protected: 保護成員; ;分號不能少例:用一個類來描述日期,其形式如下:class Clock public: void SetTime(int h, int m, int s); void ShowTime( ); private: int hour; int minute; int second;類聲明的一般格式如下:成員數據成員函數成員包括:數據和函數編輯課件類
9、聲明中訪問權限關鍵字的說明private:用其限定的成員稱為私有成員。對私有數據成員:限定其在該類的內部使用,即只允許該類中的成員函數使用私有的數據成員對私有成員函數:限定其只能被該類內的成員函數調用類就相當于私有成員的作用域。 public:用其限定的成員稱為公有成員。公有成員的數據或函數不受類的限制,可以在類內或類外自由使用,它們是類與外部的接口protected:用其限定的成員稱為保護成員。只允許在類內及該類的派生類中使用保護的數據或函數保護成員的作用域是該類及該類的派生類編輯課件類聲明格式中的3個部分必須至少要有一個。三個關鍵字可以按任意次序出現任意次。一旦使用了關鍵字,該關鍵字一直有
10、效,直到下一個關鍵字開始為止。private若排第一時則可以省去。類中的數據成員可以是任何數據類型,但不能用auto,register,extern來進行說明。不能在類聲明中對數據成員進行初始化。class Date int hour, minute, second; public: void SetTime(int h, int m, int s); void ShowTime( );三個均為私有class Test int x=5, y=6; /是不允許的 extern float x; /是不允許的 編輯課件成員函數的聲明 1、將成員函數以普通函數的形式進行說明,這種成員函數在類外定義。
11、其一般形式是: 返回類型 類名成員函數名(參數表) / 函數體 2、將成員函數以內聯函數的形式進行說明。在C+中,可以用下面兩種格式將成員函數聲明為類的內聯函數:隱式聲明:直接將函數聲明在類內部。顯式聲明:這種成員函數在類外定義,其一般形式是:inline 返回類型 類名:成員函數名(參數表) / 函數體 成員函數的聲明通常采用以下兩種方式:為作用域標志符編輯課件void Date : SetTime(int h, int m, int s) hour=h; minute=m; second=s;void Clock : ShowTime() couthour:minute:second;以普
12、通函數的方式在類外定義成員函數:編輯課件class Point public: void Init(int initX, int initY) x = initX; y = initY; int GetX( ) return x; int GetY( ) return y; private: int x, y;以內聯函數的方式在類內隱式聲明成員函數:編輯課件class Point public: void Init(int initX,int initY); int GetX( ); int GetY( ); private: int x,y;以內聯函數的方式在類外顯式聲明成員函數:inlin
13、e void Point:Init(int initX, int initY) x = initX; y = initY;inline int Point:GetX() return x;inline int Point:GetY() return y;編輯課件說明說明內聯函數時, inline 必須和函數體放在一起, 而不是和函數原型。內聯函數是編譯時在該函數的調用處用函數體進行替換,這樣就節省了參數傳遞、控制轉移等開銷。內聯函數在第一次被使用之前必須進行聲明或定義。只有較短的函數才適用于內聯函數。內聯函數體內不能有循環語句和switch語句。使用內聯函數是一種空間換時間的措施。內聯函數具有
14、宏定義#define相同的作用和相似的機理,但消除了#define的不安全因素。編輯課件對象的定義和使用 通常我們把具有共同屬性和行為的事物所構成的集合叫做類。類是用戶自己定義的一種數據類型。類的對象就是該類的某一特定實體,即類類型的變量。對象的聲明形式:1、在聲明類的同時,直接定義對象,即在聲明類的右花括號“”后,直接寫出屬于該類的對象名表。2、聲明了類之后,在使用時再定義對象,定義的格式與一般變量的定義格式相同。編輯課件形式1:class Clock public: private: myClock1, myClock2;形式2:class Clock public: private:;m
15、ain( )Clock myClock1, myClock2;全局對象 編輯課件類中成員的訪問方式類中成員互訪直接使用成員名類外訪問通過類的對象訪問公有數據成員和成員函數訪問的一般形式是: 對象名.數據成員名或 對象名.成員函數名(參數表)“.”叫做對象選擇符,簡稱點運算符編輯課件#include using namespace std;class Clock ./類的聲明略/.類的實現略void main(void) Clock myClock; myClock.SetTime(8,30,30); myClock.ShowTime( );舉例說明:編輯課件構造函數構造函數是一種特殊的成員函數
16、,它的作用是在對象被創建時使用特定的值構造對象,或者說將對象初始化為一個特定的狀態。它有一些特殊的性質:構造函數的名字必須與類名相同。構造函數可以有任意類型的參數,但不能指定返回類型。它有隱含的返回值,該值由系統內部使用。如果程序中未聲明,則系統自動產生出一個默認形式的構造函數。構造函數的函數體可寫在類體內,也可寫在類體外。構造函數可以為內聯函數、重載函數、帶默認形參值的函數。構造函數被聲明為公有函數,但它不能像其他成員函數那樣被顯式地調用,它是在對象創建時被系統自動調用的。編輯課件class Clockpublic:Clock (int NewH, int NewM, int NewS);
17、/構造函數void SetTime(int NewH, int NewM, int NewS);void ShowTime( );private:int Hour, Minute, Second;例:編輯課件構造函數的實現:Clock:Clock(int NewH, int NewM, int NewS)Hour = NewH;Minute = NewM;Second = NewS;建立對象時構造函數的作用:void main( ) Clock c (0,0,0); /隱含調用構造函數,將初始值作為實參。 c.ShowTime( );編輯課件通常,利用構造函數創建對象有以下二種方法:利用構造函
18、數直接創建對象。其一般形式為: 類名 對象名(實參表);例: Clock c (0,0,0); 通過指針和new來實現。其一般形式為: 類名 *指針變量 = new 類名 (實參表);例:Clock c = new Clock(0, 0, 0);編輯課件拷貝構造函數如果想生成一個對象的副本怎么做?新建一個對象,然后將已有對象的數據成員一一賦給新對象。可行,但繁瑣。拷貝構造函數是一種特殊的構造函數,具有一般構造函數的所有特性,其形參為本類的對象引用。其作用是使用一個已經存在的對象(由拷貝構造函數的參數指定的對象)去初始化一個新的同類的對象。如果沒有定義類的拷貝構造函數,編譯器就會自動生成一個默認
19、的函數,這個默認拷貝構造函數的功能是把初始值對象的每個數據成員的值都復制到新建立的對象中。編輯課件一般形式:class 類名 public : 類名(形參); /構造函數 類名(類名 &對象名);/拷貝構造函數 .;類名: 類名(類名 &對象名) /拷貝構造函數的實現 函數體 編輯課件class Point public: Point(int xx=0, int yy=0) x=xx; y=yy; Point(Point &p); int GetX( ) return x; int GetY( ) return y; private: int x, y;Point:Point (Point &
20、p) x = p.x; y = p.y; cout拷貝構造函數被調用endl;例:編輯課件普通構造函數是在對象創建時被調用,而拷貝構造函數在以下三種情況下都會被調用:1、當用類的一個對象去初始化該類的另一個對象時系統自動調用拷貝構造函數實現拷貝賦值。例如: void main(void) Point A(1, 2); Point B(A); /拷貝構造函數被調用 coutB.GetX( )endl;拷貝構造函數的調用編輯課件2、若函數的形參為類對象,調用函數時,實參賦值給形參,系統自動調用拷貝構造函數。例如:void fun1(Point p) coutp.GetX( )endl; void
21、main( ) Point A(1, 2); fun1(A); /調用拷貝構造函數 編輯課件3、當函數的返回值是類對象時,系統自動調用拷貝構造函數。例如:Point fun2() Point A(1,2); return A; /調用拷貝構造函數void main( ) Point B; B = fun2( ); 編輯課件析構函數析構函數也是一種特殊的成員函數。它執行與構造函數相反的操作,通常用于撤消對象時的一些清理任務,如釋放分配給對象的內存空間等。析構函數有以下一些特點:析構函數與構造函數名字相同,但它前面必須加一個波浪號()。析構函數沒有參數,也沒有返回值,而且不能重載。因此在一個類中只能有一個析構函數。在對象的生存期結束時,編譯系統會自動地調用析構函數。 如果程序中未聲明析構函數,編譯器將自動產生一個默認的析構函數。編輯課件#include using namespace std;class Date public: Date(int y, int m, int d); / 構造函數 Date( ); / 析構函數 void setDate(int y, int m, int d); void showDate( ); private: int year, month, day; ;例:編輯課件Date:Date(int y, int m, int
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園衛生宣傳周活動計劃
- 四年級下冊音樂創作與表演計劃
- 二年級語文下冊閱讀理解專項計劃
- 2025部編版四年級下冊語文詞匯拓展計劃
- 中小學疫情防控措施實施計劃
- 北師大版八年級上冊物理課程評價體系計劃
- 五年級語文下冊第四單元知識點梳理計劃
- 2025年秋小學英語教研組師生互動計劃
- 職業院校勞動技術競賽計劃
- 2025年高校綜合治理工作計劃
- 水滸人物宋江介紹課件
- 人教版(PEP)小學英語五年級下冊第五單元作業設計
- 四川省大邑中學2024-2025學年高一新生上學期入學分班質量檢測數學試題
- DL∕T 5551-2018 架空輸電線路荷載規范
- JGJ202-2010 建筑施工工具式腳手架安全技術規范【清晰版】
- 高考語文各類題型及答題技巧
- 六、煤礦提升機操作作業人員題庫 答案(二)
- DL-T+617-2019氣體絕緣金屬封閉開關設備技術條件
- 全國交通運輸行政執法綜合管理信息系統考試題庫-中(多選題練習)
- 甘肅省蘭州市城七里河區-2023-2024學年六年級下學期小學期末畢業測試語文試卷
- 全新裝修合同電子版范本
評論
0/150
提交評論