面向?qū)ο蟪绦蛟O(shè)計的概念_第1頁
已閱讀1頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第二章 面向?qū)ο蟪绦蛟O(shè)計的概念,C與C++的差別引用類和對象構(gòu)造函數(shù)和析構(gòu)函數(shù),C++對C的改進(jìn),一般語法的改進(jìn)指針和引用函數(shù)的改進(jìn),C++的輸入和輸出,#include “stdio.h”printf(“hello c”);scanf(“%d”,&sum);printf(“sum is %d”,sum);,#include”iostream.h”cout >sum;cout <<“su

2、m is ” << sum <<endl;,一般語法的改進(jìn),注釋,/*.......*///,一般語法的改進(jìn),變量定義,變量定義可以位于程序中的任何地方,下面的語句有問題嗎?for( int i=0; i<10; i++){int c; c*=2; int s; ……},一般語法的改進(jìn),符號常量的定義,#define NULL 0#define Length 100#define PI

3、3.1415926const int NULL=0const int Length =100const double PI=3.1415926,一般語法的改進(jìn),強(qiáng)制轉(zhuǎn)換類型,C的強(qiáng)制類型轉(zhuǎn)換法 (類型名)表達(dá)式函數(shù)表示法(僅限簡單類型) 類型名(表達(dá)式)int i=int(1.35);,一般語法的改進(jìn),結(jié)構(gòu)體與枚舉類型的用戶標(biāo)識名,enum traffic {red,green,yellow};struct s

4、tudent{ int num; char name[20];};traffic Light;student stu1;,!不必在一個結(jié)構(gòu)體名之前加struct,不用在一個枚舉類型名之前加關(guān)鍵字enum。,一般語法的改進(jìn),動態(tài)內(nèi)存分配,newint*p,*q,*s;p=new int; s=new int(200);q=new int[10]; delete

5、 delete p;delete[] q;,一般語法的改進(jìn),#include “iostream.h” void main() { int *p; p=new int; *p=10; cout<<*p; delete p; },引用類型的概念,引用是指給對象的地址取個別名,對引用的改動則是對目標(biāo)的改動?!?int int1;

6、 int &rint=int1;引用不是值,不占有存儲空間引用必須初始化,并且不再指向其他不同的變量,指針和引用,什么能被引用,double &rr=1; double temp; temp=double(1); double& rr=temp;指針變量的引用

7、 int *a; int*&p=a; int b=8; p=&b;,指針和引用,什么不能被引用,void &a=3;int a[10]; int&ra[10]=a;int&ra=int;int&am

8、p;ri=NULL;,指針和引用,引用作為函數(shù)參數(shù)--地址傳遞,指針的代碼可讀性差,指針作為參數(shù)傳遞,用戶調(diào)用知道函數(shù)是如何工作的。解決大對象值傳遞會產(chǎn)生副本的問題程序清單2-3,指針和引用,引用作為函數(shù)參數(shù)--地址傳遞,存在的問題引用隱藏了函數(shù)所使用的參數(shù)傳遞的類型,應(yīng)避免重載匹配錯誤void fn(int s);void fn(int&t);用const 限定引用double fn(const double

9、&pd),指針和引用,函數(shù)原型,例: int func(int,int);C++ 要求所有函數(shù)都有函數(shù)原型程序的頂部頭文件C++提供更強(qiáng)的類型檢查,允許編譯程序?qū)ο铝星闆r報錯誤信息:被調(diào)用函數(shù)參數(shù)類型定義和類型轉(zhuǎn)換非法函數(shù)的參數(shù)個數(shù)不相符函數(shù)不能返回預(yù)定的數(shù)據(jù)類型,函數(shù)的改進(jìn),內(nèi)置函數(shù)inline,#include void main() {

10、 int a(8),b(16),c; inline int max(int,int); c=max(a,b); cout<<”c=”<<c<<endl; }int max(int x,int y); { cout<<”c=

11、”<<c<<endl;},內(nèi)置函數(shù)inline,實質(zhì):編譯器為inline 函數(shù)創(chuàng)建代碼,在每次碰到該函數(shù)的調(diào)用都用相應(yīng)的一段代碼替換說明:關(guān)鍵字inline一般放在函數(shù)聲明的前面inline放在函數(shù)定義的前面時,函數(shù)定義要在調(diào)用函數(shù)的前面限制:不能含有switch,while等復(fù)雜的結(jié)構(gòu)控制語句,遞歸函數(shù)不能被用作inline函數(shù),函數(shù)的改進(jìn),inline 與宏定義,宏所作的是機(jī)械代換,在參數(shù)為表

12、達(dá)式時會產(chǎn)生不可預(yù)知的錯誤宏不能作類型檢查 #define f(m) m*m 宏定義調(diào)用:f(5+5) 5+5*5+5,函數(shù)的改進(jìn),函數(shù)的默認(rèn)參數(shù),可以在函數(shù)聲明時,對參數(shù)賦與默認(rèn)值,調(diào)用沒有給出實參時,就使用默認(rèn)值。void delay(int loops=1000);void delay(int loops){if (loops==0) return;

13、for(int i=0;i<loops;i++);}delay();delay(5000);,函數(shù)的改進(jìn),默認(rèn)參數(shù)的使用說明,默認(rèn)參數(shù)只能在函數(shù)聲明中提供若一個函數(shù)有多個默認(rèn)參數(shù),則在形參分布中從右到左逐個定義,在調(diào)用函數(shù)時,自左向右逐分配實參。默認(rèn)值可以是全局變量,常量,甚至一個函數(shù),但不能是局部變量。,分析下面語句的正確性:void func(int a=1,int b,int c=3,int d=4);void

14、 func(int a,int b=2,int c=3,int d=4);func(10,15,20,30);func();func(12,12);func(2,15,20);,函數(shù)的改進(jìn),重載函數(shù),函數(shù)具有相同的名字,但有不同的參數(shù),完成不同的操作int abs(int i);long abs(long g );double abs(double d);,函數(shù)的改進(jìn),重載函數(shù)說明,重載函數(shù)至少在參數(shù)的個數(shù)、參數(shù)的類型、或

15、參數(shù)的順序上有所不同不能用typedef 的類型名區(qū)分重載函數(shù)中的參數(shù) typedef int Length; void func(int ); void func(Length);讓重載函數(shù)執(zhí)行不同的功能,是不好的編程風(fēng)格。,函數(shù)的改進(jìn),避免二義性編譯錯誤,void print(long)void print(double)調(diào)用:  void func(int a)

16、{ print(a); },函數(shù)的改進(jìn),類和對象,類: 由用戶定義的,將一組具有相關(guān)性的數(shù)據(jù)和操作封裝在一起的抽象數(shù)據(jù)類型。數(shù)據(jù)稱為數(shù)據(jù)成員,操作稱為成員函數(shù)。對象: 用類定義的變量,類和對象,類的定義對象的定義構(gòu)造函數(shù)和析構(gòu)函數(shù)this指針,類的定義,class 類名{ private:   私有段數(shù)據(jù)及函數(shù) protected:   保護(hù)段數(shù)據(jù)及函數(shù)

17、 public:   公有段數(shù)據(jù)及函數(shù)};省略時默認(rèn)為private,成員訪問類型,Point類的設(shè)計,class Point {int x;int y; public:void set_x(int k){x=k;} void set_y(int k){y=k;} int get_x(){return x;} int get_y(){return y;} };,

18、成員函數(shù)的類型,構(gòu)造函數(shù)析構(gòu)函數(shù)普通成員函數(shù)虛函數(shù)注:除析構(gòu)函數(shù)不能重載外,其他成員函數(shù)都是可以重載的,成員函數(shù)的實現(xiàn),在類定義時實現(xiàn)在類定義的外面實現(xiàn) int Point::get_x() {return x;},對象的定義,對象的定義Point p1;Point *p;Point pa[100];Point *parray[100];,公有成員的使用,從類外訪問公有段的數(shù)據(jù)成員或成員函數(shù)對象名.公

19、有段數(shù)據(jù)成員對象名.公有段成員函數(shù)(實參表)類名::公有段數(shù)據(jù)成員類名::公有段成員函數(shù)(實參表)例p1.x p1.y p1.set_x(20); x=p1.get_x();p->x p->ypa[i].x pa[i].y,任務(wù)1,類和對象的定義詳見實驗1,構(gòu)造函數(shù),構(gòu)造函數(shù)的作用是構(gòu)造對象初始化形式在定義對象時,由應(yīng)用程序自動調(diào)用構(gòu)造函數(shù)是類的一個特殊成員函數(shù)它的函數(shù)名與類名相同, 沒有返

20、回類型它可以有任意類型的參數(shù)可以重載,默認(rèn)構(gòu)造函數(shù),當(dāng)類定義中沒有用戶定義的構(gòu)造函數(shù)時,系統(tǒng)自動產(chǎn)生一個無參數(shù)的構(gòu)造函數(shù),稱此構(gòu)造函數(shù)為默認(rèn)構(gòu)造函數(shù)當(dāng)定義一個對象時,默認(rèn)構(gòu)造函數(shù)只是簡單地把對象中的每個成員初始化為0或空.,構(gòu)造函數(shù)的類型,無參構(gòu)造函數(shù)Point();Point p1;帶參構(gòu)造函數(shù)Point(int ,int);Point p2(100,200);復(fù)制構(gòu)造函數(shù)Point(const Point&

21、;);Point p3(p2);,拷貝構(gòu)造函數(shù)示例,class A{…… public: A(int); A(const A&,int i=1);};main(){ A a(1); A b(a,0); A c=b;……},析構(gòu)函數(shù),析構(gòu)函數(shù)也是類的特殊成員函數(shù),它的函數(shù)名與類名相同,但它的名字前面有一個“~”.它沒有參數(shù),沒有返回類型,而且不能重載.,this 指針,this

22、是一個指向調(diào)用該函數(shù)的對象的常量指針。成員函數(shù)可通過this指針直接使用同類的其它成員this指針是隱含的int get_length(){return length;}int get_length(){return this->length;},,繼承,在已有類的基礎(chǔ)上定義新類的過程稱為繼承?;? base class)和派生類派生類的定義class : { ... ...},繼承的方式,例2-22 單

23、繼承示例,,多繼承,派生類從多個基類派生,派生類具有多個基類的特性派生方法:class 派生類名:繼承方式1 基類名1,繼承方式2 基類名2,...繼承方式n 基類名n{ ... ...};,例2-23 多繼承示例,,多態(tài)性,在 基類和派生類中使用同樣的函數(shù)名而定義不同的操作,從而實現(xiàn)“一種接口,多種方法”。類型靜態(tài)多態(tài)性: 編譯時實現(xiàn),通過重載動態(tài)多態(tài)性: 運(yùn)行時實現(xiàn),通過派生和虛函數(shù),虛函數(shù),在繼承體

溫馨提示

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

評論

0/150

提交評論