




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第十二章C與C++12.1C轉(zhuǎn)入C++時(shí)不需改變的內(nèi)容12.2C轉(zhuǎn)入C++的一些與類無關(guān)的新特性
12.3C++的核心新特性——類12.4面向?qū)ο蟪绦蛟O(shè)計(jì)12.1C轉(zhuǎn)入C++時(shí)不需改變的內(nèi)容(1)各種數(shù)據(jù)類型變量的定義與使用,函數(shù)、數(shù)組、指針、文件等基本知識(shí)。
(2)許多有效的算法。
(3)程序的基本調(diào)試思想方法。
(4)程序設(shè)計(jì)中的自頂向下的總體思想:
(5)程序段中具體的最小模塊仍然由順序、分支、循環(huán)三種基本模塊組成。12.2C轉(zhuǎn)入C++的一些與類無關(guān)的新特性12.2.1C轉(zhuǎn)入C++時(shí)需改變的內(nèi)容C++中不能再作為標(biāo)識(shí)符的關(guān)鍵字2.函數(shù)聲明3.函數(shù)聲明的形式12.2.2C++中獨(dú)有的與類無關(guān)的部分新特性1.局部變量說明語句的位置如:voidmain(){……/*程序的其它部分(包括執(zhí)行語句)*/intcount=0;//變量count說明
while(++count<=100)//變量count使用
{……}
……/*后續(xù)程序*/}2.注釋符
C++中可以使用兩種注釋符(如上例),比C多一種注釋符“//”,其功能是其后至行末為注釋部分。程序中可靈活選用。
3.范圍分解符::
C中,當(dāng)全局變量和某函數(shù)內(nèi)的局部變量同名時(shí),該函數(shù)對(duì)全局變量起屏蔽作用,即在該函數(shù)內(nèi)無法訪問此全局變量,而在C++中,只要在其前使用范圍分解符即可訪問同名的全局變量。例如:
floatn;voidmain(){intn;n=5;//給局部變量n賦值::n=5.53;//給全局變量n賦值
……
}4.內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)的特性類似于宏。
C中,在定義了宏#defineABS(n)((n)<0?-(n):(n))之后,程序每調(diào)用一次宏ABS,替換宏名的字符串就展開并插入在調(diào)用處一次。C中的函數(shù)調(diào)用就不是這種展開方式,而是程序轉(zhuǎn)入子函數(shù)執(zhí)行,執(zhí)行完后再返回主調(diào)函數(shù),每個(gè)函數(shù)只有一段代碼。在C++中,可以定義類似于宏的內(nèi)聯(lián)函數(shù),關(guān)鍵字是inline,如定義求絕對(duì)值的內(nèi)聯(lián)函數(shù)如下:inlineintAbs(intn){returnn<0?-n:n;}5.重載函數(shù)
C++中可以在同一程序中多次定義同名函數(shù),只要各函數(shù)間的參數(shù)個(gè)數(shù)或類型不同,例如:intAbs(intn){returnn<0?-n:n;}floatAbs(floatn){returnn<0?-n:n;}
在同一范圍內(nèi)定義同名函數(shù)稱為重載函數(shù)。編譯器根據(jù)函數(shù)調(diào)用時(shí)具體的實(shí)參的個(gè)數(shù)和類型自動(dòng)調(diào)用匹配的重載函數(shù)版本。例如:intAbs(intn);floatAbs(floatn);voidmain(){inti;floatf;i=Abs(5);//調(diào)整型的求絕對(duì)值函數(shù)
f=Abs(-2.5);//調(diào)實(shí)型的求絕對(duì)值函數(shù)
……
}6.new和delete操作符以下為動(dòng)態(tài)開辟內(nèi)存塊的例子:structnode{char*name;intsalary;node*next;};
char*pchar;//定義三種類型的指針變量
int*pint;structnode*pnode;pchar=newchar;//開辟了三塊內(nèi)存區(qū)pint=newint;pnode=newnode;*pchar=′a′;//為內(nèi)存單元賦值*pint=6;pnode->name="hello";pnode->salary=1000;12.3C++的核心新特性——類12.3.1類以下是一個(gè)有關(guān)“人”的類的定義classCHuman//class——類定義關(guān)鍵字
{charname[20];//類的數(shù)據(jù)成員
intage;
voidGetInfo()//類的成員函數(shù)
{……
}voidOutInfo(){……
}};12.3.2類實(shí)例
類的定義格式與結(jié)構(gòu)體類型定義格式類似,其含義也類似,均是定義了一種新的數(shù)據(jù)類型,要作為程序處理的對(duì)象。對(duì)于結(jié)構(gòu)體類型,接著要定義結(jié)構(gòu)體型變量以便在程序中引用(如第九章中的structstaffworker1,worker2;);對(duì)于類,則要生成類實(shí)例,又稱為類對(duì)象。其地位如同變量。如在上述的CHuman類定義之后,語句:
CHumanhuman;(類名前不需加關(guān)鍵字class)就生成了類CHuman的實(shí)例human,即為類對(duì)象human分配了一塊可以存放數(shù)據(jù)和對(duì)數(shù)據(jù)進(jìn)行處理的程序代碼的內(nèi)存塊,又稱為類的實(shí)例化。
和內(nèi)部變量一樣,類對(duì)象在定義范圍內(nèi)有效(如在函數(shù)內(nèi)定義的類對(duì)象,在函數(shù)返回時(shí)銷毀)。一個(gè)類可以生成多個(gè)實(shí)例。也可以用C++的new操作符生成類的實(shí)例如下:CHuman*PHuman=newCHuman;這個(gè)語句分配足以放置類對(duì)象的內(nèi)存塊并返回其首地址給這個(gè)對(duì)象的指針。對(duì)象所占內(nèi)存保持到用delete操作符釋放:
deletePHuman;
C++中多用這種分配、銷毀模式。12.3.3類成員的訪問
例12.1
使用C語言全局變量實(shí)現(xiàn)有關(guān)一個(gè)人的信息的輸出操作。#include<string.h>#include<stdio.h>charname[20];/*兩個(gè)全局變量*/intage;voidGetInfo(){strcpy(name,"Li-Li");age=22;}voidOutInfo(){count<<"name:"<<name<<end;/*<<為輸出顯示符*/count<<"age:"<<age<<end;}/*下面是一些其它的函數(shù)*/function1(){……//此函數(shù)內(nèi)可調(diào)用GetInfo()和OutInfo()及全局變量name[]和age}Function2(){……//此函數(shù)內(nèi)可調(diào)用GetInfo()和OutInfo()及全局變量name[]和age}main(){charch;
GetInfo();OutInfo();
……
}圖12.1C程序中全局變量不安全性例12.2
用C++語言定義一個(gè)有關(guān)人的“類”classCHuman//class——類的定義符
{private://以下為私有變量,可以也只能由該類的成員函數(shù)調(diào)用
charname[20];
intage;
public://以下為公有函數(shù),此類內(nèi)外的函數(shù)均可以調(diào)用它們
intGetInfo(){……
}intOutInfo(){……
}};//類定義結(jié)束圖12.2類對(duì)私有數(shù)據(jù)成員的封裝怎樣正確地調(diào)用類成員:main(){CHumanhuman;//定義了一個(gè)CHuman類的對(duì)象
strcpy(,"Li-Li");//錯(cuò)誤:不能訪問私有數(shù)據(jù)成員
human.age=22;//錯(cuò)誤:同上
human.GetInfo();//正確:可以訪問公有成員函數(shù)
human.OutInfo();//正確:同上
}12.3.4構(gòu)造函數(shù)
在定義一個(gè)類時(shí),直接初始化數(shù)據(jù)成員是不允許的。下列類的定義的初始化會(huì)產(chǎn)生錯(cuò)誤:classC{private:
intn=0;//出錯(cuò)
int*pi=&n;//出錯(cuò)
……
};
其實(shí),在類的定義中初始化是沒有意義的,它只是創(chuàng)建了一個(gè)模板,類似于C語言中的結(jié)構(gòu)體類型的定義,而程序是不可以直接對(duì)類型操作的,只能對(duì)定義在其上的變量操作。所以想要初始化成員,就必須生成一個(gè)類的實(shí)例。例如:……//其它程序voidCHuman::initial(charname[20],intage)//定義一初始化函數(shù){strcpy(name,"");age=0;}……//其它程序CHumanhuman;//生成了一個(gè)CHuman類的實(shí)例humanhuman.initial(name,age);//初始化類實(shí)例human
初始化成員變量的更好辦法是定義一個(gè)特殊的成員函數(shù):“構(gòu)造函數(shù)”。classCHuman{private:
charname[20];
intage;
public:
CHuman()//定義構(gòu)造函數(shù),它的名稱與類的名稱一樣{strcpy(name,"");age=0;}voidGetInfo(){……
}voidOutInfo(){……
};}12.3.5析構(gòu)函數(shù)
析構(gòu)函數(shù)也是自動(dòng)執(zhí)行的,但它與構(gòu)造函數(shù)相反,是在程序結(jié)束時(shí)執(zhí)行,它負(fù)責(zé)在程序撤消類的對(duì)象時(shí),釋放所占資源。例如:
~CHuman()//定義析構(gòu)函數(shù)
{deletename;//釋放name所占內(nèi)存
}
析構(gòu)函數(shù)的名稱為構(gòu)造函數(shù)名稱前加“~”例12.3CHuman類的完整定義classCHuman{private:
charname[20];intage;
public:
CHuman()//定義構(gòu)造函數(shù)
{strcpy(name,"");age=0;}voidGetInfo(){……}voidOutInfo(){……}~CHuman()//定義析構(gòu)函數(shù)
{deletename;}};12.3.6類的繼承
類的最重要的特性是繼承性,它很貼近現(xiàn)實(shí)世界,如:兒子繼承父親的一些特征,并且擁有自己的特征。孫子又繼承了兒子的一些特征,并且擁有自己的特征……。類也一樣,它的一些特性是可以繼承的。下面我們將前面的有關(guān)人的類增加一些數(shù)據(jù)成員,并派生出一個(gè)“學(xué)生”的類:classCHuman//重新定義一表示人的類CHuman{private:char*m-name;intm-age;char*m-sex;floatm-height;public:CHuman()//定義構(gòu)造函數(shù)
{m-name="";m-age=0;m-sex="";m-height=0.0;}voidGetInfo(char*name,intage,char*sex,floatheight){m-name=newchar[strlen(name)+1];m-name=name;m-age=age;m-sex=sex;m-height=height;}voidprint(){cout<<"Name:"<<m-name;cout<<"Age:"<<m-age;cout<<"Sex:"<<m-sex;cout<<"High:"<<m-height;}~CHuman()//定義析構(gòu)函數(shù)
{deletem-name;deletem-sex;}};
以上是一個(gè)“人”的類,現(xiàn)在,我們需要描述一個(gè)學(xué)生的一些特征。當(dāng)然,學(xué)生是屬于“人”的,所以,有關(guān)人的特性我們不應(yīng)該重復(fù),可以從“人”的類中“派生”出我們所要定義的“學(xué)生類”,繼承“人”類中所有的屬性,再增加些學(xué)生特有的屬性,定義“學(xué)生類”如下:classCStudents:publicCHuman//表示類CStudents是從類Chuman 中公有派生的
{private://學(xué)生類所具有的新的屬性
char*m-schoolname;//校名
intm-grade;//年級(jí)public:voidprintstu(){cout<<"Schoolname:"<<m-schoolname;cout<<"Grade:"<<m-grade;}voidGetStuInfo(char*schoolname,intgrade){m-schoolname=newchar[strlen(schoolname)+1];m-schoolname=schoolname;m-grade=grade;}CStudents()//定義構(gòu)造函數(shù)
{m-schoolname="";m-grade=0;}~CStudents()//定義析構(gòu)函數(shù)
{deletem-schoolname;}};圖12.3基類及其派生類的成員可訪問圖12.4面向?qū)ο蟪绦蛟O(shè)計(jì)12.4.1從面向過程到面向?qū)ο?2.4.2什么是面向?qū)ο?/p>
面向?qū)ο蟪绦蛟O(shè)計(jì)是面向?qū)ο罄碚撛诔绦蛟O(shè)計(jì)中的應(yīng)用,面向?qū)ο罄碚摰膽?yīng)用范圍則更廣。面向?qū)ο笙到y(tǒng)有三大特性:封裝性、繼承性和多態(tài)性。面向?qū)ο蟮母拍羁梢杂扇缦鹿奖硎荆好嫦驅(qū)ο?對(duì)象+類+繼承+通信1.對(duì)象在面向?qū)ο蟮南到y(tǒng)中,對(duì)象是基本的、運(yùn)行時(shí)的實(shí)體,它既包括數(shù)據(jù)(屬性),也包括作用于數(shù)據(jù)的操作(行為)。所以一個(gè)對(duì)象把屬性和行為密封成一個(gè)整體。從程序設(shè)計(jì)者來看,對(duì)象是一個(gè)程序模塊;從用戶來看,對(duì)象為他們提供了所希望的行為。2.類
一個(gè)類定義了一組大體上相似的對(duì)象。一個(gè)類所包含的方法和數(shù)據(jù)描述了一組對(duì)象的共同行為和屬性。把一組對(duì)象的共同特性加以抽象并存貯在一個(gè)類中的能力,是面向?qū)ο蠹夹g(shù)最重要的一點(diǎn)。類是在對(duì)象之上的抽象。有了類以后,對(duì)象則是類的具體化,是類的實(shí)例。類可以有子類,同樣也可以有父類,形成層次結(jié)構(gòu)。3.繼承性繼承性是父類和子類之間共享數(shù)據(jù)和操作的機(jī)制。這是類之間的一種關(guān)系,在定義和實(shí)現(xiàn)一個(gè)類的時(shí)候,可以在一個(gè)已經(jīng)存在的類的基礎(chǔ)上進(jìn)行,把這個(gè)已經(jīng)存在的類所定義的內(nèi)容做為自己的內(nèi)容,并加入若干新的內(nèi)容。繼承性是面向?qū)ο蟪绦蛟O(shè)計(jì)語言的標(biāo)志。它使程序的可重用性大大提高。因?yàn)槌绦騿T只要對(duì)已有的類加以整
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建福州鼓山中學(xué)2024~2025學(xué)年高一下冊(cè)期末考試數(shù)學(xué)試題學(xué)生卷
- 2024~2025學(xué)年山東日照九年級(jí)數(shù)學(xué)試題【帶答案】
- 冷鏈物流行業(yè)投資與融資模式分析考核試卷
- 冷庫節(jié)能照明解決方案考核試卷
- 云母裝飾壁畫在高端酒店室內(nèi)設(shè)計(jì)中的應(yīng)用考核試卷
- 企業(yè)內(nèi)部數(shù)字技能導(dǎo)師制度建立考核試卷
- 教育技術(shù)支持下的項(xiàng)目式學(xué)習(xí)考核試卷
- 信用評(píng)估與貸款違約風(fēng)險(xiǎn)預(yù)測(cè)研究考核試卷
- 信息系統(tǒng)移動(dòng)應(yīng)用開發(fā)考核試卷
- 2025年中國(guó)PUR膠粘劑數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 0號(hào)柴油安全技術(shù)說明書SDS
- GB/T 17530.4-1998工業(yè)丙烯酸酯酸度的測(cè)定
- GB/T 16106-1995車間空氣中氫氧化鈉的酸堿滴定測(cè)定方法
- GB/T 10095.1-2008圓柱齒輪精度制第1部分:輪齒同側(cè)齒面偏差的定義和允許值
- GA/T 1454-2018信息安全技術(shù)網(wǎng)絡(luò)型流量控制產(chǎn)品安全技術(shù)要求
- 湖北省荊州市商投資區(qū)國(guó)有企業(yè)招聘考試《綜合基礎(chǔ)知識(shí)》國(guó)考真題
- midas系列培訓(xùn)之橋梁檢測(cè)專題
- 易制毒企業(yè)崗位職責(zé)(共19篇)
- 中小學(xué)生防溺水安全教育PPT課件【愛生命防溺水】
- 礦山開采承包合同參考
- GA∕T 743-2016 閃光警告信號(hào)燈
評(píng)論
0/150
提交評(píng)論