C語言試題、學習、考試大全34課件_第1頁
C語言試題、學習、考試大全34課件_第2頁
C語言試題、學習、考試大全34課件_第3頁
C語言試題、學習、考試大全34課件_第4頁
C語言試題、學習、考試大全34課件_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C+程序設計基礎福州大學數(shù)學與計算機科學學院吳英杰7/27/20221福州大學數(shù)學與計算機科學學院C+語言概述面向?qū)ο蟮某绦蛟O計語言 C+支持數(shù)據(jù)封裝 C+類中包含私有、公有和保護成員 C+通過發(fā)送消息來處理對象 C+中允許友元破壞封裝性 C+允許函數(shù)名和運算符重載 C+支持繼承性 C+支持動態(tài)聯(lián)編在C+中,結構可作為一種特殊的類,它雖然可以包含函數(shù),但它沒有私有或保護的成員。在C+中,類是支持數(shù)據(jù)封裝的工具,對象則是數(shù)據(jù)封裝的實現(xiàn)。類是類型,是對象的抽象,對象是類的具體實例。一個類可以有多個對象,每個對象都有自己的存儲單元,而類不占存儲單元。C+中類是數(shù)據(jù)和函數(shù)的封裝體,它提供一種數(shù)據(jù)訪問嚴

2、格控制的機制,數(shù)據(jù)被隱藏在封裝體中,該封裝體通過操作接口與外界交換信息。友元可以是在類外定義的函數(shù),也可以是在類外定義的整個類。友元可以訪問類的私有成員。面向?qū)ο蟮某绦蛟O計的四大特征: 抽象、封裝、 繼承 、 多態(tài) 。7/27/20222福州大學數(shù)學與計算機科學學院C+與C語言的關系:C語言是C+的一個子集,C+包含了C語言的全部內(nèi)容。 C+保持與C語言的兼容 C+對C語言作了很多改進 C+與C語言的本質(zhì)差別在于C+是面向?qū)ο蟮?,而C語言是面向過程的。(1) 增加了一些新的運算符,如 :, new, delete, -* 等;(2) 改進了類型系統(tǒng),增加了安全性;(3) 引進了引用的概念,使用

3、引用作函數(shù)參數(shù)帶來了很大方便;(4) 允許函數(shù)重載,允許設置缺省參數(shù),提高了編程的靈活性;(5) 引進內(nèi)聯(lián)函數(shù),提高了程序效率;(6) 可根據(jù)需要隨時對變量進行說明。面向過程的程序設計將數(shù)據(jù)和對數(shù)據(jù)的操作分離,程序是由一個個的函數(shù)組成的,面向?qū)ο蟮某绦蛟O計將數(shù)據(jù)和操作封裝在一起,程序是由一個個對象組成的,對象之間通過接口進行通信,它能夠較好地支持程序代碼的復用。 7/27/20223福州大學數(shù)學與計算機科學學院C+數(shù)據(jù)操作基礎2.1 C+程序進行輸入和輸出的操作方法 #include int main( ) int x, y; /定義兩個整型變量 cin x y ; /鍵盤輸入變量值 cout

4、 “x =” x endl “y =” y ”和輸出操作符“= 0 ) ? a : -a 注意:表達式1、2、3的數(shù)據(jù)類型不能是 void 類型。7/27/20228福州大學數(shù)學與計算機科學學院switch ( 變量名 ) case 值1 : 語句序列1 ; break ; case 值 2 : 語句序列2 ; break ; default : 語句序列 n ;7/27/20229福州大學數(shù)學與計算機科學學院2.2.2 循環(huán)語句for 循環(huán):for ( exp1; exp2; exp3) statement;.while 循環(huán):while ( expression) do while 循環(huán):

5、do statement; .while (expression);三種循環(huán)都可以嵌套。7/27/202210福州大學數(shù)學與計算機科學學院 for ( exp1; exp2; exp3) statement;.等價于: exp1 ; while ( exp2 ) statement ; exp3 ; 例: int sum = 0 ;for ( int i = 1 ; i = 10 ; i + ) sum += i;7/27/202211福州大學數(shù)學與計算機科學學院2.2.3 轉移語句break 語句:強制退出循環(huán)及中斷case語句,直接執(zhí)行循環(huán)體后的語句。continue 語句:不完全退出循環(huán)

6、,而是使循環(huán)重新回到測試位置,并忽略此語句至循環(huán)結束前的語句序列。goto 語句:無條件轉移,只限在同一程序段內(nèi)轉換,不能跳到另一函數(shù)或程序內(nèi)。7/27/202212福州大學數(shù)學與計算機科學學院2.3 指針 1. 定義:包含另一變量內(nèi)存地址的變量。 3. 指針與數(shù)組的關系 數(shù)組是指針的另一種表示法。數(shù)組的名字實際就是數(shù)組的起始地址。int arr2 = 0,1;arr1 和 *(arr + 1)是完全一致的。2. 聲明 指針在使用前需進行聲明,聲明格式為: 數(shù)據(jù)類型 *變量; 或 數(shù)據(jù)類型* 變量;7/27/202213福州大學數(shù)學與計算機科學學院4. “&” 與 “*” “&”是一個一元操作

7、符,它操作一個對象,得到該對象的存儲單元的地址值; 例: int i; int *p; p = &i ; *p = *p + 5; “* ”也是一個一元操作符,用于表達被指針指向的對象。 7/27/202214福州大學數(shù)學與計算機科學學院5. new 與 delete new 用于為指針分配內(nèi)存空間;delete 用于釋放指針所占有的內(nèi)存空間。 標準C用malloc 和 free 函數(shù)分配內(nèi)存塊和釋放內(nèi)存塊。7/27/202215福州大學數(shù)學與計算機科學學院(5.1) 運算符new :運算符new用于動態(tài)存儲分配。 new返回一個指向所分配空間的指針。例:int y;y=new int;y=1

8、0;也可將上述各語句作適當合并如下:int y=new int;y=10;或 int y=new int(10);或 int y;y=new int(10);7/27/202216福州大學數(shù)學與計算機科學學院(5.2) 一維數(shù)組 :為了在運行時創(chuàng)建一個大小可動態(tài)變化的一維浮點數(shù)組x,可先將x聲明為一個float類型的指針。然后用new為數(shù)組動態(tài)地分配存儲空間。例:float x=new floatn;創(chuàng)建一個大小為n的一維浮點數(shù)組。運算符new分配n個浮點數(shù)所需的空間,并返回指向第一個浮點數(shù)的指針。然后可用x0,x1,xn-1來訪問每個數(shù)組元素。7/27/202217福州大學數(shù)學與計算機科學學

9、院(5.3) 運算符delete :當動態(tài)分配的存儲空間已不再需要時應及時釋放所占用的空間。用運算符delete來釋放由new分配的空間。例:delete y;delete x;分別釋放分配給y的空間和分配給一維數(shù)組x的空間。7/27/202218福州大學數(shù)學與計算機科學學院(5.4) 動態(tài)二維數(shù)組 :創(chuàng)建類型為Type的動態(tài)工作數(shù)組,這個數(shù)組有rows行和cols列。template void Make2DArray(Type* &x,int rows, int cols) x=new Type*rows; for (int i=0;irows;i+) xi=new Typecols;7/2

10、7/202219福州大學數(shù)學與計算機科學學院當不再需要一個動態(tài)分配的二維數(shù)組時,可按以下步驟釋放它所占用的空間。首先釋放在for循環(huán)中為每一行所分配的空間。然后釋放為行指針分配的空間。釋放空間后將x置為0,以防繼續(xù)訪問已被釋放的空間。template void Delete2DArray(Type* &x,int rows) for (int i=0;irows;i+) delete xi; delete x; x=0;7/27/202220福州大學數(shù)學與計算機科學學院2.4 函數(shù)與參數(shù)傳遞 當一個函數(shù)定義有形參時,在進行函數(shù)調(diào)用時,必須提供與形參個數(shù)、類型相同的實參。 在C+中,有兩種參數(shù)傳

11、遞機制將實參的值傳遞給形參:值傳遞( 值調(diào)用 )和引用傳遞( 引用調(diào)用 )。1. 值傳遞 在這種機制中,實參的值被拷貝到由相應形參名字所標識的對象中。在函數(shù)內(nèi)部對形參的訪問或更新都是是對這個對象的訪問或更新。實參本身的值在調(diào)用前后和調(diào)用過程中都不發(fā)生變化。7/27/202221福州大學數(shù)學與計算機科學學院int double( int a ) a *= 2 ; cout“a=“aendl; return a; #include void main() int b = 10; double(b); cout“b=“ 數(shù)據(jù)成員 指針名 - 成員函數(shù)例:CPerson *pWang; pWang -

12、 age = 30 ; pWang -PrintAge( );類和對象的關系就如同整型 int 與整型變量 i 之間的關系。7/27/202232福州大學數(shù)學與計算機科學學院3.3 類的成員3.3.1 構造函數(shù) 構造函數(shù)是一個特殊的類成員函數(shù),用于初始化類變量或分配內(nèi)存空間。當用類定義一個對象時,自動調(diào)用構造函數(shù),使對象保持一個確定的狀態(tài)。1. 構造函數(shù)的聲明class CExample int I ;public: CExample( ) ; ;7/27/202233福州大學數(shù)學與計算機科學學院2. 構造函數(shù)的特點 (1) 構造函數(shù)與類必須具有相同的名字。 例:class CExample

13、CExample ( ) ; CExample ( int i ) ; CExample ( int x , int y ) ; private : int member1, member2 ; ; (2) 創(chuàng)建對象時自動執(zhí)行構造函數(shù),構造函數(shù)不能在程 序中被顯式調(diào)用。(3)構造函數(shù)不需要函數(shù)類型,不能被繼承。 (4)構造函數(shù)可以接受參數(shù)并能夠重載。7/27/202234福州大學數(shù)學與計算機科學學院CExample : CExample ( int i ) member1 = i ; member2 = 0 ;int main( ) CExample ex1; CExample ex2(1);

14、 CExample ex3( 2, 3 ); CExample : CExample ( ) member1 = 0; member2 = 0;CExample : CExample ( int x , int y ) member1 = x ; member2 = y ;7/27/202235福州大學數(shù)學與計算機科學學院 (5) 若程序沒有為一個類定義任何構造函數(shù),則編譯器 生成一個不帶參數(shù)的公有構造函數(shù),這個構造函數(shù) 什么也不做,稱為缺省構造函數(shù)。 例:CExample : CExample3.3.2 析構函數(shù) 析構函數(shù)與構造函數(shù)功能相反,也是類成員函數(shù),通常用于釋放已分配的內(nèi)存空間或完成

15、對象被清除前的一些清理工作。7/27/202236福州大學數(shù)學與計算機科學學院 class CExample public:CExample( );void Print ( );CExample( ); ;析構函數(shù)的特點:1.與構造函數(shù)具有相同的名字,前面必須加上“”符號。2.析構函數(shù)沒有函數(shù)類型,不能被繼承。7/27/202237福州大學數(shù)學與計算機科學學院3.3.3 內(nèi)聯(lián)函數(shù) 在函數(shù)定義前加上一個inline前綴,該函數(shù)就被定義成一個內(nèi)聯(lián)函數(shù)。3.析構函數(shù)不能帶有參數(shù),而且不可以重載。4.析構函數(shù)在 結束時被自動調(diào)用。 對于內(nèi)聯(lián)函數(shù),編譯時在所有調(diào)用該函數(shù)的地方將裝入實際的函數(shù)代碼。 內(nèi)聯(lián)

16、函數(shù)的聲明必須出現(xiàn)在對它的每個調(diào)用之前。7/27/202238福州大學數(shù)學與計算機科學學院3.3.5 對象與成員函數(shù)成員函數(shù)的參數(shù)和返回值不僅可以是整型、字符型、指針類型等,也可以把對象作為參數(shù)和返回值。class CPoint float x, y ;public: CPoint ( float a, float b ); CPoint Add ( CPoint A ); 7/27/202239福州大學數(shù)學與計算機科學學院CPoint : CPoint ( float a, float b )x = a ;y = b ;CPoint CPoint : Add ( CPoint A )CPoi

17、nt B;B.x = x + A.x ;B.y = y + A.y;return B;7/27/202240福州大學數(shù)學與計算機科學學院3.4 this指針 this指針是一個隱含于每個類的成員函數(shù)中的特殊指針。 this用于指向以該成員函數(shù)所屬類定義的對象。 當某個對象調(diào)用成員函數(shù)時,成員函數(shù)的this指針便指向該對象。因此,當不同的對象引用同一個成員函數(shù)時,編譯器就依據(jù)成員函數(shù) this 指針指向的不同對象來確定引用哪一個對象的數(shù)據(jù)成員。 7/27/202241福州大學數(shù)學與計算機科學學院例:#include class A public:A( ) a=b=0; A(int i, int

18、j ) a=i;b=j;void copy(A &aa);void print( ) couta“,”bendl; private:int a, b;void A : copy(A &aa) if(this = &aa) return; *this = aa;void main( ) A a1,a2(3,4); a1.copy(a2); a1.print();7/27/202242福州大學數(shù)學與計算機科學學院3.5 const關鍵字3.5.2 const 的特點及使用注意事項 3.5.1 聲明語法 const 是一個類型修飾符,語法是: T const 其中,T是一個類型表達式。 const

19、與 T 之間的關系是左結合的。1. 使用const 聲明的對象不能被更新。2. 由于這種對象不能被更新,因此必須進行初始化。 int const a = 2 ; a = 1 ;/ error7/27/202243福州大學數(shù)學與計算機科學學院3. const 常被用于聲明函數(shù)的形參。指針類型或引用類型的形參使函數(shù)可以更新調(diào)用者中的對象,但若函數(shù)并不更新指針所指向的對象或引用所引用的對象,那么最好將這樣的參數(shù)使用 const 關鍵字進行聲明。4. 當T是一個簡單的類型名時,習慣上寫作 const T 。 例: const int x = 0 ;void Print( ) const; /類的常成員

20、函數(shù) 5. 對于類中不更新對象的數(shù)據(jù)成員的成員函數(shù),可以將其使用const進行聲明。 當一個成員函數(shù)使用const進行聲明后,就表明這個函數(shù)可以操作常對象。沒有使用const關鍵字進行聲明的成員函數(shù)則不能操作常對象。7/27/202244福州大學數(shù)學與計算機科學學院6. 由于const對象必須初始化且不能被更新,因此,當類中聲明了const數(shù)據(jù)成員時,只能通過成員初始化列表來構造該數(shù)據(jù)成員。例: class CExample public: CExample ( int x ) ; private: const int a ; ; CExample : CExample ( int x ) :

21、 a( x ) ; 在類中聲明靜態(tài)的const數(shù)據(jù)成員時,class A private: static const int SIZE ;const int A : SIZE = 10 ;7/27/202245福州大學數(shù)學與計算機科學學院3.6 友元函數(shù)3.6.1 定義 友元函數(shù)是一種特殊的函數(shù),它不是類的成員函數(shù), 但允許它訪問類的私有類型數(shù)據(jù)和保護類型數(shù)據(jù)。3.6.2 聲明方式class 類名稱/相關的類 type vars ; public: friend 函數(shù)類型 函數(shù)名稱( ) ;/聲明友元 函數(shù)類型 函數(shù)名稱( ) /定義友元 7/27/202246福州大學數(shù)學與計算機科學學院3.

22、6.3 特點1. 友元可以是一個一般的函數(shù) (友元函數(shù)),也可以是另一個類的成員函數(shù) (友元成員),還可以是整個的一個類 (友元類,這時類中的所有成員函數(shù)都是友元函數(shù))。2. 友元函數(shù)須在私有成員可被它訪問的類中聲明,而函數(shù)體則在類外聲明。3. 友元函數(shù)雖然在類中聲明,但它不是該類的成員函數(shù),而是獨立于任何類的一般的外界函數(shù),它被允許訪問該類的所有對象的私有成員。4. C+中使用友元是為了提高程序的運行效率。但為了確保數(shù)據(jù)的完整性及數(shù)據(jù)封裝與隱藏的原則,應盡可能不使用或少使用友元函數(shù)。7/27/202247福州大學數(shù)學與計算機科學學院3.7 引用 引用是給對象取一個別名,它引入了對象的一個同義

23、詞。error3.7.1 定義 定義引用的關鍵字:T & 例:int i ;int & j ; int & j = i ;j = i ; j = 6 ;注意:(1)引用不產(chǎn)生對象的副本,而是對象的同義詞,它們表示同一個對象。 (2)定義引用時,必須馬上對它進行初始化,不能定義完后再賦值。7/27/202248福州大學數(shù)學與計算機科學學院 (3)對對象或?qū)σ玫娜魏尾僮鞫紩绊懙剿鼈児餐膶ο蟆?3.7.2 引用的使用引用參數(shù)引用可以用在需要改變實參變量的函數(shù)中; #include void swap( int x, int y ) int temp ; temp = x ; x = y ; y

24、 = temp ; (4)引用一旦被初始化,就不能被改變,也不能更新引用, 使其標識另一個對象。7/27/202249福州大學數(shù)學與計算機科學學院運行結果: a = 1 b = 2 a = 1 b = 2 main ( ) int a = 1, b = 2 ; cout “a = ” a “b = ” b endl ; swap ( a , b) ; cout “a = ” a “b = ” b y ? x : y; double max(double x, double y) return xy ? x : y; template T max(T x, T y) return xy ? x

25、: y; int i=max(1,2);double x=max(1.0,2.0);7/27/202251福州大學數(shù)學與計算機科學學院3.9 運算符重載為用戶定義的數(shù)據(jù)類型重載運算符。 bool Rectangle : operator = (const Rectangle &s) if(this=&s) return true; if(x1=s.x1)&(y1=s.y1)&(h=s.h)&(w=s.w)return true; else return false; 經(jīng)重載運算符 = 后,即可用運算符 = 來判定2個Rectangle對象是否相同。7/27/202252福州大學數(shù)學與計算機科學學院3.10 繼承通過繼承機制,可以利用已有的數(shù)據(jù)類型來定義新的數(shù)據(jù)類型。

溫馨提示

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

最新文檔

評論

0/150

提交評論