C語言程序設(shè)計(jì)課件:從C到C++_第1頁
C語言程序設(shè)計(jì)課件:從C到C++_第2頁
C語言程序設(shè)計(jì)課件:從C到C++_第3頁
C語言程序設(shè)計(jì)課件:從C到C++_第4頁
C語言程序設(shè)計(jì)課件:從C到C++_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

從C到C++C語言程序設(shè)計(jì)目錄content對象的思想1從C到C++的過渡2OOP設(shè)計(jì)思路311.1對象的思想

“面向過程”(ProcedureOriented)是一種以過程為中心的編程思想,把系統(tǒng)看成一個(gè)過程的集合體,分析出解決問題所需要的步驟。

特點(diǎn):自頂而下;逐步求精;模塊化設(shè)計(jì)。面向過程化的編程方式11.1.1從面向過程到面向?qū)ο竺嫦蜻^程的程序設(shè)計(jì)定義為:程序=(算法)+(數(shù)據(jù)結(jié)構(gòu))優(yōu)點(diǎn):很好地解決諸如工業(yè)過程控制、設(shè)備控制、計(jì)算機(jī)底層硬件驅(qū)動(dòng)等問題,這類程序往往有很清晰的流程邏輯。缺點(diǎn):函數(shù)能夠不受限制地訪問全局?jǐn)?shù)據(jù),函數(shù)與數(shù)據(jù)之間分離,缺乏聯(lián)系,項(xiàng)目難理解和維護(hù)、代碼重用性差。11.1.1從面向過程到面向?qū)ο蟆懊嫦驅(qū)ο蟆保∣bjectOriented)是一種以對象為中心的編程思想,把系統(tǒng)看成一個(gè)相互作用的對象集,對象之間通過發(fā)送和響應(yīng)消息進(jìn)行交互。對象即現(xiàn)實(shí)世界中客觀存在的事物,面向過程的編程方式是將問題分解為過程,而面向?qū)ο蟮木幊谭绞揭詥栴}中的對象為中心思考問題。例如問題是下一局圍棋。面向過程將問題分解為解決問題的步驟:1、擺棋盤2、放下一個(gè)棋子3、規(guī)則判斷4、放下第二個(gè)棋子5、規(guī)則判斷……面向?qū)ο髮栴}看成不同對象的相互作用:1、棋盤:狀態(tài)、行為;2、棋子:狀態(tài)、行為;……面向?qū)ο筮\(yùn)用人類的自然思維方式,強(qiáng)調(diào)以現(xiàn)實(shí)世界中的事物為中心,思考問題、認(rèn)識(shí)問題,以更好地看清事物的本質(zhì)特點(diǎn)。11.1.1從面向過程到面向?qū)ο?/p>

C++中的對象是將數(shù)據(jù)和對數(shù)據(jù)的操作封裝在一起的實(shí)體,即一種抽象數(shù)據(jù)類型——“類”類型的實(shí)體。classStudent{private:charname[20];charid[15];intage;public:voidshow(){

}};例如

數(shù)據(jù)

對數(shù)據(jù)的操作1)對象的屬性:用數(shù)據(jù)集合描

述對象的狀態(tài)2)對象的方法:用函數(shù)來實(shí)現(xiàn)

對象的行為3)對象之間通過消息通信,實(shí)現(xiàn)動(dòng)態(tài)聯(lián)系11.1.1從面向過程到面向?qū)ο竺嫦驅(qū)ο蟮木幊谭绞矫嫦驅(qū)ο蟮某绦蛟O(shè)計(jì)定義為:程序=(對象1)+(對象2)+…11.1.2類的說明class類名{

數(shù)據(jù)成員 ...

成員函數(shù) ...};類:與int、char相似,是一種數(shù)據(jù)類型。類的構(gòu)成包括數(shù)據(jù)成員和成員函數(shù):數(shù)據(jù)成員對應(yīng)類的屬性;成員函數(shù)對應(yīng)類的方法,用于操作類的屬性。類的定義格式classStudent{private:charname[20];charid[15];intage;public:voidselectCourse(){

}};例如對現(xiàn)實(shí)世界中的對象進(jìn)行抽象,從而得到了類的概念。

但是對每個(gè)對象抽象成類會(huì)非常繁瑣,根據(jù)不同對象的共性,將類按照:“父類”(“基類”)“子類”(“派生類“)構(gòu)成“類層次結(jié)構(gòu)”。11.2從C到C++的過渡例11.2C語言的輸入輸出由庫函數(shù)實(shí)現(xiàn),主要包括:scanf(),printf(),getc(),gets(),putc(),puts()等,它們包含在文件stdio.h中。C++語言的輸入輸出利用運(yùn)算符>>和<<,以及cin和cout,,它們包含在文件iostream.h中#include<iostream.h>intmain(void){doublea,b,c;cout<<“Inputtwofloatnumbers:”;//插入符cin>>a>>b;//提取符,用空格或回車間隔c=a+b;cout<<“a+b=”<<c<<endl;//endl表示輸出一個(gè)換行符,等同于轉(zhuǎn)義字符’\n’return0;}11.2.1C++的I/O幾點(diǎn)說明:(1)C++中沒有專門的輸入/輸出語句,可以利用輸入流和輸出流來進(jìn)行數(shù)據(jù)的輸入和輸出,此時(shí),程序開頭要包含頭文件iostream.h;(2)運(yùn)算符“>>”稱為提取運(yùn)算符,表示將暫停程序的執(zhí)行,等待用戶從鍵盤上輸入相應(yīng)的數(shù)據(jù)。一個(gè)提取運(yùn)算符只能跟一個(gè)變量名;(3)cin輸入流的一般語法格式:cin>><變量名1>[>><變量名2>>>…>><變量名n>];(4)運(yùn)算符“<<”稱為插入運(yùn)算符,它將緊跟其后的表達(dá)式的值輸出到顯示器當(dāng)前光標(biāo)的位置,也可以輸出轉(zhuǎn)義字符;(5)cout輸入流的一般語法格式:cout<<<表達(dá)式1>《<<<表達(dá)式2><<…<<<表達(dá)式n>》;11.2.2const和volatile訪問修飾符1、const的基本概念幾點(diǎn)說明:const用于凍結(jié)變量,使其值在程序中不能被修改(1)使用const修飾變量時(shí),必須對該變量進(jìn)行初始化。(2)使用const修飾的變量存放在編譯器的符號(hào)表中,計(jì)算時(shí)編譯器直接從表中取值。(3)在C++中用const替代C中define定義的宏,因?yàn)閏onst定義的常量有數(shù)據(jù)類型信息,是真正的數(shù)據(jù),它被登記在namespace中,具有名字、類型和值,便于類型檢查和debug調(diào)試。C語言中:“#define變量名變量值”定義一個(gè)值替代,存在致命的缺點(diǎn):缺乏類型檢測機(jī)制。(4)使用const修飾函數(shù)的參數(shù)時(shí),編譯器將阻止該函數(shù)代碼修改參數(shù)值。11.2.2const和volatile訪問修飾符2、const與指針例11.4下面的聲明都是什么意思?inta;constintca=10;//等同intconstca=10;定義時(shí)必須對該變量進(jìn)行初始化constint*pca;//等同intconst*pca;int*constcpa=&a;//常指針需要定義時(shí)初始化intconst*constcpca=&a;pca=&a;//正確pca=&ca;//正確*pca=20;//錯(cuò)誤

整數(shù)型變量

整數(shù)型變量pca是一個(gè)指向常整型數(shù)的指針,整型數(shù)是不可修改的,但指針pca是可變的cpa是一個(gè)指向整型數(shù)的常指針(常量指針),指針cpa指向的整型數(shù)是可以修改的,但指針cpa是常量指針,是不可修改的。常量指針cpa可以指向讀寫型變量a,但不能指向const量(只讀型)cacpca是一個(gè)指向常整型數(shù)的常指針,指針指向的整型數(shù)是不可修改的,同時(shí)指針也是不可修改的11.2.2const和volatile訪問修飾符3、volatile的作用volatile

意為“易失的、易變的”,它告訴編譯器,即使程序中沒有明顯地改變這個(gè)變量的值,該變量的值也會(huì)由于程序外部的原因(中斷、事件)而被潛在改變。準(zhǔn)確地說就是,編譯器優(yōu)化時(shí),在用到這個(gè)變量時(shí)必須每次都重新讀取這個(gè)變量的值,即每次讀寫都必須訪問實(shí)際地址存儲(chǔ)器的內(nèi)容,而不是使用保存在寄存器、或cache中的副本。【幾點(diǎn)說明】(1)volatile修飾變量時(shí),即使用戶進(jìn)程不修改該變量,仍要求編譯器按照該變量值會(huì)因?yàn)橥獠窟M(jìn)程的操作而改變來進(jìn)行編譯。(2)中斷服務(wù)例程中使用的非自動(dòng)變量或者多線程應(yīng)用程序中多個(gè)任務(wù)共享的變量必須使用volatile進(jìn)行限定。11.2.2const和volatile訪問修飾符3、volatile的作用例如

intflag=0;voidfun(){while(1){if(flag)some_action();}}voidisr_fun()//中斷函數(shù){flag=1;}fun()函數(shù)中并沒有修改flag,可能只執(zhí)行一次flag讀操作并將flag的值緩存在寄存器中,以后每次訪問flag(讀操作)都使用寄存器中的緩存值而不進(jìn)行存儲(chǔ)器絕對地址訪問,導(dǎo)致some_action函數(shù)永遠(yuǎn)無法執(zhí)行,即使中斷函數(shù)isr_fun()執(zhí)行了將flag置1。11.2.3引用1、

引用的基本概念在一個(gè)程序中用不同的變量名指向同一地址的同一內(nèi)容的數(shù)據(jù)類型描述稱為引用。<類型名>

&引用型函數(shù)名或變量名=前已聲明的(常)變量名引用的一般格式為:intnum=50;int&ref=num;例如

ref是對num的引用,即ref是num的別名,它們共用一個(gè)存儲(chǔ)空間,對ref的任何操作等同于對num的任何操作。11.2.3引用幾點(diǎn)說明1、引用的目標(biāo)變量類型要與引用變量的類型一致,即ref的類型為int&,num的

類型為int。2、指針和引用的區(qū)別

①指針變量存儲(chǔ)空間中保存了目標(biāo)變量存儲(chǔ)空間的地址值,而引用不分配空

間,引用必須初始化。

②指針可以修改它的指向,但引用和對象綁定后,將無法修改11.2.3引用2、

引用參數(shù)

引用的真正目的就是在不同的作用域中分別使用引用名和被引用的目標(biāo)變量名,比如:調(diào)用函數(shù)和被調(diào)用函數(shù)。11.2.3引用例11.7SwapInt()函數(shù)利用指針參數(shù)來實(shí)現(xiàn)互換它的兩個(gè)參數(shù)

#include<iostream.h>voidSwapInt(int*a,int*b){inttemp;temp=*a;*a=*b;*b=temp;}voidmain(){intnum1,num2;num1=5,num2=10;SwapInt(&num1,&num2);cout<<“num1=”<<num1<<“,num2=”<<num2<<endl;return0;}

運(yùn)行情況如下:num1=10,num2=5

由于指針本身的靈活性,允許指針重新建立新的指向,對指針變量不小心的修改其值,可能導(dǎo)致程序異常。11.2.3引用例11.8SwapInt()函數(shù)利用指針參數(shù)來實(shí)現(xiàn)互換它的兩個(gè)參數(shù)#include<iostream.h>voidSwapInt(int&a,int&b){inttemp;temp=a;a=b;b=temp;}intmain(void){intnum1=5,num2=10;SwapInt(num1,num2);cout<<“num1=”<<num1<<“,num2=”<<num2<<endl;return0;}運(yùn)行情況如下:num1=10,num2=5

在整個(gè)SwapInt函數(shù)執(zhí)行期間,對a的讀寫實(shí)際上是通過對main函數(shù)的num1變量的讀寫來完成的。

傳引用與傳指針相比,在SwapInt函數(shù)內(nèi),無法修改a和b的綁定目標(biāo),而這一點(diǎn)在指針傳遞機(jī)制中往往需要程序員嚴(yán)格把關(guān)。由于引用和目標(biāo)的固定綁定關(guān)系,引用常被看做是安全的指針。

有時(shí),既為了使形參共享實(shí)參的存儲(chǔ)空間,又不希望通過形參改變實(shí)參的值,則應(yīng)當(dāng)把該形參說明為常量引用,例如:voidfun(constint&cra);11.2.3引用3、

返回引用

在C中,函數(shù)調(diào)用表達(dá)式不能放在賦值運(yùn)算符“=”的左邊作為左值。但在C++中,若函數(shù)返回類型為引用類型,則函數(shù)調(diào)用可以作為左值,實(shí)際上返回的是某個(gè)存儲(chǔ)單元。例如#include<iostream.h>intIndex=0;//此處定義為全局變量int&GetIndex(){returnIndex;}intmain(void){intn;n=GetIndex();//把Index的值拷貝給nGetIndex()=5;//給Index賦值5cout<<++GetIndex()<<endl;//Index自增1return0;}11.2.3引用幾點(diǎn)說明(1)GetIndex函數(shù)返回值本身相當(dāng)于Index的別名,所以可以出現(xiàn)在賦值運(yùn)算符左邊。(2)由于函數(shù)調(diào)用返回的引用是在函數(shù)運(yùn)行結(jié)束后,函數(shù)結(jié)束瞬間函數(shù)棧中的自動(dòng)變量(含形參變量)的空間將被回收釋放。因此,函數(shù)所引用的變量在函數(shù)調(diào)用返回后必須是存在,不能返回自動(dòng)變量和形參,可安全返回全局變量和靜態(tài)變量。(3)由于常量不分配空間,所以也不能返回常量,但用const聲明返回引用時(shí),返回常量是合法的,如:constint&fun(){return1;}編譯器會(huì)創(chuàng)建臨時(shí)的constint變量,去初始化fun()11.2.4作用域分辨符

在函數(shù)內(nèi)部作用域中定義一個(gè)變量,如果它的名字和外部作用域定義的某個(gè)變量同名,那么,在程序執(zhí)行到函數(shù)內(nèi)部作用域時(shí)對應(yīng)同名變量是內(nèi)部的同名變量,因?yàn)閮?nèi)部作用域變量覆蓋了外部作用域變量。這時(shí)如果要訪問外部作用域同名變量,則要通過作用域分辨符::來訪問全局變量.#include<iostream.h>doublea;intmain(void){inta;a=1;::a=40.5;cout<<“局部變量inta=“<<a<<endl;cout<<“全局變量doublea=“<<::a<<endl;return0;}例如11.2.5重載1、

函數(shù)重載

在C++中,函數(shù)可以共享同一個(gè)名字,只要這些同名函數(shù)的參數(shù)表有所區(qū)別,這就是函數(shù)重載的概念。同一作用域內(nèi)名字相同,但參數(shù)不同的函數(shù)稱為重載函數(shù)。 C中規(guī)定,每個(gè)函數(shù)都必須有唯一的名字,不允許有重名的函數(shù)。這樣就帶來很多不便。如C運(yùn)行庫中的求絕對值函數(shù)abs(),labs(),fabs()。盡管它們處理的幾乎是完全相同的工作,但在C中卻要用三個(gè)不同的函數(shù)名來區(qū)分。11.2.5重載例11.12重載abs函數(shù)

#include<iostream.h>//abs()函數(shù)按三種形式重載intabs(inti);longabs(longl);doubleabs(doubled);intmain(void){cout<<abs(-10)<<endl;cout<<abs(-9L)<<endl;cout<<abs(-11.5)<<endl;return0;}intabs(inti){returni<0?-i:i;}

longabs(longl){returnl<0?-l:l;}

doubleabs(doubled){returnd<0?–d:d;}運(yùn)行情況如下:10911.5重載函數(shù)的參數(shù)差別:參數(shù)類型、參數(shù)個(gè)數(shù)、參數(shù)類型的次序。11.2.5重載(1)編譯器在選擇使用哪一個(gè)重載函數(shù)時(shí),有時(shí)不得不處理一些模糊問題。處理這些模糊問題的原則是:就近匹配,即就近調(diào)用最便于進(jìn)行類型轉(zhuǎn)換的重載函數(shù)。比如:abs(‘a(chǎn)’),就被處理成就近調(diào)用intabs(inti);這種數(shù)據(jù)類型轉(zhuǎn)換包括:char->int、int->long、float->double。如果類型無法轉(zhuǎn)換,編譯器將給出錯(cuò)誤信息。幾點(diǎn)說明(2)對于函數(shù)重載,若函數(shù)調(diào)用(界面)與哪一個(gè)函數(shù)體(函數(shù)實(shí)現(xiàn))相匹配,是在編譯時(shí)確定的,稱為早期匹配(earlybinding);如果函數(shù)調(diào)用與哪一個(gè)函數(shù)體的匹配是在運(yùn)行時(shí)動(dòng)態(tài)進(jìn)行的,稱之為晚期匹配(latelybinding)。一般來說,早期匹配執(zhí)行速度比較快,晚期匹配提供靈活性和高度的問題抽象。C++語言的函數(shù)重載屬于早期匹配,后面章節(jié)介紹的多態(tài)特性屬于晚期匹配。11.2.5重載 C++中,函數(shù)的參數(shù)可以定義一個(gè)缺省值,當(dāng)調(diào)用時(shí)沒給出參數(shù)值,就自動(dòng)使用這個(gè)缺省參數(shù)值。因此,參數(shù)帶缺省值的函數(shù)也是一種重載函數(shù)。2、函數(shù)的缺省參數(shù)例如voiddelay(intloops=500);……voiddelay(intloops){…//delay的函數(shù)體}(1)可以明確給出實(shí)參值,調(diào)用delay函數(shù);也可以不給出實(shí)參值,調(diào)用delay函數(shù)。對于后一種情況,delay會(huì)自動(dòng)認(rèn)為參數(shù)loops的值為500。(2)如果對函數(shù)原型中指定了缺省參數(shù),而在實(shí)際的函數(shù)定義中就不必再給出參數(shù)的缺省值了。如果程序中沒有給出函數(shù)原型,就只能在函數(shù)定義時(shí)給出參數(shù)的缺省值了。11.2.5重載doubledistance(doublex1,doubley1,doublex2=0,doubley2=0);……

以下是正確調(diào)用方式:distance(1,2);distance(1,2,3);distance(1,2,3,4);

以下調(diào)用方式錯(cuò)誤:distance(1,2,,4);//出錯(cuò),調(diào)用函數(shù)時(shí),參數(shù)應(yīng)該連續(xù)給出,不能間斷。(3)一個(gè)函數(shù)可以有多個(gè)缺省參數(shù),所有的缺省參數(shù)必須集中列在參數(shù)表的最后。調(diào)用時(shí)對提供了缺省值的參數(shù)可以不給出實(shí)際數(shù)據(jù),但是從那個(gè)參數(shù)開始后面所有參數(shù)都要有缺省值,否則出錯(cuò)。例11.2.5重載voiddisplay(char*str);voiddisplay(char*str,intlength=12);…display(“Hello,C++”);//編譯錯(cuò)誤,因?yàn)檫@

個(gè)調(diào)用和兩個(gè)重載形式都匹配,所以出錯(cuò)(4)在重載函數(shù)中使用缺省參數(shù)時(shí),有時(shí)會(huì)產(chǎn)生具有歧義的重載函數(shù)調(diào)用。例11.2.6內(nèi)聯(lián)函數(shù) C語言中,可以用#define來進(jìn)行常量宏,也可以定義帶參數(shù)表達(dá)式的宏。預(yù)處理器會(huì)在編譯之前把宏名展開成相應(yīng)的字符串或表達(dá)式。#include<iostream.h>#definemax(x,y)((x)>(y)?(x):(y))//定義宏max(x,y)為x和y中的較大者intmain(){inta,b,c,t;a=1,b=2,c=3;t=max(a+b,c);//編譯預(yù)處理器對表達(dá)式進(jìn)行宏展開:t=((a+b)>(c)?(a+b):(c));return0;}例11.2.6內(nèi)聯(lián)函數(shù)

在C++中,可以利用內(nèi)聯(lián)函數(shù)達(dá)到類似的效果。內(nèi)聯(lián)函數(shù)用關(guān)鍵字inline。和帶參數(shù)的宏定義相比,內(nèi)聯(lián)函數(shù)的形式更像普通函數(shù),可讀性強(qiáng),因此,建議在C++中使用內(nèi)聯(lián)函數(shù)代替帶參數(shù)的宏定義。#include<iostream.h>inlineintmax(inta,intb){returna>b?a:b;}intmain(){intt;t=max(10,20);//被max相應(yīng)的函數(shù)體所替換(代碼擴(kuò)展):t=10>20?10:20;cout<<t<<endl;return0;}例11.2.6內(nèi)聯(lián)函數(shù)(1)在函數(shù)定義前使用關(guān)鍵字inline時(shí),原則上,該函數(shù)不被編譯為單獨(dú)的一段可調(diào)用的代碼,而是將函數(shù)體內(nèi)容插入到對該函數(shù)的每一個(gè)調(diào)用處。幾點(diǎn)說明(2)調(diào)用函數(shù)時(shí),參數(shù)要進(jìn)棧,CPU寄存器狀態(tài)值需要保存;函數(shù)返回時(shí),要還原CPU的狀態(tài)。所以,函數(shù)調(diào)用需要一定的時(shí)間和空間開銷。使用內(nèi)聯(lián)函數(shù)提高了運(yùn)行效率。(3)內(nèi)聯(lián)函數(shù)的內(nèi)聯(lián)擴(kuò)展,增加了目標(biāo)程序的代碼量,增加了空間開銷,但比使用函數(shù)節(jié)約了時(shí)間開銷。因此,內(nèi)聯(lián)函數(shù)是以增加目標(biāo)代碼的尺寸來節(jié)省時(shí)間,即“以空間換時(shí)間”。因此,最好只內(nèi)聯(lián)那些體積非常小,明顯影響程序性能的函數(shù)。11.2.6內(nèi)聯(lián)函數(shù)(4)inline對編譯器來說只是一個(gè)請求,而不是命令。編譯器自由決定要不要忽略inline命令,如果含有循環(huán)、Switch、遞歸調(diào)用,則編譯器視之為普通函數(shù)(通過編譯,不會(huì)報(bào)錯(cuò)),將其作為普通函數(shù)處理。幾點(diǎn)說明(5)不同的編譯器對內(nèi)聯(lián)請求的態(tài)度不同。有的編譯器不允許內(nèi)聯(lián)函數(shù)中包含循環(huán)語句;有的規(guī)定了內(nèi)聯(lián)函數(shù)的大小不能超過一個(gè)閾值。(6)在C++中常用const變量和內(nèi)聯(lián)函數(shù)來代替宏和帶參宏。11.3OOP設(shè)計(jì)思路

面向?qū)ο蟮脑O(shè)計(jì)思想將自然界所有事物都看成對象,每個(gè)對象有自己獨(dú)特的狀態(tài)和行為。對象之間彼此關(guān)聯(lián)和作用構(gòu)成了千變?nèi)f化的現(xiàn)實(shí)世界。

面向?qū)ο蟮脑O(shè)計(jì)思想體系里,對象是共性和個(gè)性的對立統(tǒng)一體。一方面,它們因其存在的共性使得各自都屬于特定的某個(gè)類別,比如:發(fā)動(dòng)機(jī)、電視機(jī)、學(xué)生;另一方面,它們又是同一個(gè)類別中特有的一個(gè)個(gè)體,比如:汽車發(fā)動(dòng)機(jī)、彩色電視機(jī)、大學(xué)生。

在面向?qū)ο篌w系中,共性的內(nèi)容由類類型來聲明。用該類類型定義變量的方式,來創(chuàng)建的不同的對象,表示同一個(gè)類別下的不同個(gè)體。11.3.1面向?qū)ο蟮脑O(shè)計(jì)特征(1)抽象

抽象就是從同一個(gè)類別的多個(gè)個(gè)體中抽取出它們共性的東西,包括:狀態(tài)和行為。狀態(tài)就是數(shù)據(jù),行為是對這些數(shù)據(jù)進(jìn)行的操作。(2)封裝

面向?qū)ο笤O(shè)計(jì)思想最大的特點(diǎn)就是封裝——將所有的狀態(tài)數(shù)據(jù)及對這些數(shù)據(jù)進(jìn)行處理的函數(shù)(又叫做方法)封裝在同一個(gè)類類型中,然后設(shè)置訪問權(quán)限,有些私密的狀態(tài)數(shù)據(jù)不能直接訪問,只能通過事先設(shè)計(jì)好的方法來提供訪問,保證私密數(shù)據(jù)的安全性,避免非法操作和出錯(cuò)的可能性。11.3.1面向?qū)ο蟮脑O(shè)計(jì)特征(3)繼承

繼承的過程,就是從一般到特殊的過程。繼承產(chǎn)生的新類型中保留了基類的數(shù)據(jù)和方法,而不用在新類型中重新設(shè)計(jì)??梢钥闯?,繼承是一種按層分類的概念。繼承實(shí)現(xiàn)了父類和子類:子類可以使用父類的所有功能,并且對這些功能進(jìn)行擴(kuò)展。(4)多態(tài)

同一類型的不同個(gè)體在做相同的行為動(dòng)作時(shí)可能產(chǎn)生不同的結(jié)果。多態(tài)是與繼承有關(guān)的概念。同種事物,多種狀態(tài),即同一個(gè)接口名稱,但是體現(xiàn)為不同的功能。11.3.1面向?qū)ο蟮脑O(shè)計(jì)特征例如C語言中通過定義一個(gè)結(jié)構(gòu)體Student,來描述學(xué)生structStudent{charname[20];charid[15];intage;};voidshow(structStudent*s)//定義顯示學(xué)生基本信息的函數(shù){

…//具體實(shí)現(xiàn)}11.3.1面向?qū)ο蟮脑O(shè)計(jì)特征例如C++中通過定義一個(gè)類Studen,來描述學(xué)生classStudent{private:charname[20];charid[15];intage;public:voidshow(){

…//具體實(shí)現(xiàn)}};(1)作用域包括:全局作用域、文件作用域、函數(shù)作用域、復(fù)合語句作用域和這里提到的class類作用域。(2)在同一個(gè)class類作用域里可以直接不加作用域分辨符訪問自身的其他成員,包括成員數(shù)據(jù)和成員方法。(3)在class類作用域外的要想調(diào)用show方法必須加上類名和作用域分辨符——Student::show()。(4)空類沒有任何成員,包括數(shù)據(jù)和函數(shù)。例如classempty{};但空類對象大小不為零。11.3.2類設(shè)計(jì)實(shí)例例11.15針對上一節(jié)介紹的Student類,我們來給出該類的初步設(shè)計(jì)原型。classStudent{private://可以省略此行。如果不寫訪問權(quán)限,class默認(rèn)是privatecharname[20];charid[15];intage;public:voidregisterStudent(constchar*n,constchar*i,inta){strcpy(name,n);strcpy(id,i);age=a;}voidshow(){cout<<"name:"<<name<<endl;cout<<"id:"<<id<<endl;cout<<"age:"<<age<<endl;}};intmain(void){StudentTom;Tom.registerStudent(“tom”,”123456”,20);Tom.show();return0;}11.3.2類設(shè)計(jì)實(shí)例(1)關(guān)鍵字class表明一個(gè)類的聲明由此開始,Student是一個(gè)類名,它應(yīng)該是一個(gè)有效的標(biāo)識(shí)符;幾點(diǎn)說明(2)name、id、age是數(shù)據(jù)成員,又叫成員變量。registerStudent()、show()是成員函數(shù)。(3)關(guān)鍵字private和public是訪問權(quán)限說明符,用來定義成員的訪問權(quán)限。關(guān)鍵字private之后的成員是類的私有成員

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論