




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
教案2023~2023學(xué)年第一學(xué)期學(xué)院、系室計(jì)算機(jī)科學(xué)系課程名稱(chēng)面向?qū)ο蟪绦蛟O(shè)計(jì)專(zhuān)業(yè)、年級(jí)、班級(jí)12計(jì)算機(jī)嵌入式系統(tǒng)、網(wǎng)絡(luò)和信息安全班主講教師蔣琳瓊梧州學(xué)院面向?qū)ο蟪绦蛟O(shè)計(jì)教案課時(shí)分派:理論課39學(xué)時(shí),實(shí)驗(yàn)課12學(xué)時(shí),共51學(xué)時(shí)第1章C++初步知識(shí)一、教學(xué)目的:熟悉如何編緝、編譯、連接和運(yùn)營(yíng)一個(gè)C++程序,了解在面向過(guò)程程序設(shè)計(jì)中C++對(duì)C功能的擴(kuò)充與增強(qiáng),并善于在編寫(xiě)程序過(guò)程中應(yīng)用這些新的功能。學(xué)時(shí)分派:9學(xué)時(shí)二、教學(xué)重點(diǎn):了解軟件設(shè)計(jì)、開(kāi)發(fā)思想的演變,面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的發(fā)展;理解面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想;熟悉如何編緝、編譯、連接和運(yùn)營(yíng)一個(gè)C++程序,熟悉C++程序的結(jié)構(gòu)和編程方法。三、教學(xué)難點(diǎn):善于在編寫(xiě)程序過(guò)程中應(yīng)用這些新的C++對(duì)C功能的擴(kuò)充與增強(qiáng)功能四、教學(xué)方法:課題講授及面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)例演示五、教學(xué)過(guò)程設(shè)計(jì):(9學(xué)時(shí))1.C++語(yǔ)言的發(fā)展,最簡(jiǎn)樸的C++程序1-1程序設(shè)計(jì)方法的發(fā)展和演變大多數(shù)系統(tǒng)軟件和許多應(yīng)用軟件都是用C語(yǔ)言編寫(xiě)的?但是隨著軟件規(guī)模的增大,用C語(yǔ)言編寫(xiě)程序漸漸顯得有些吃力了?C++是由AT&TBell(貝爾)實(shí)驗(yàn)室的BjarneStroustrup博士及其同事于20世紀(jì)80年代初在C語(yǔ)言的基礎(chǔ)上開(kāi)發(fā)成功的?C++保存了C語(yǔ)言原有的所有優(yōu)點(diǎn),增長(zhǎng)了面向?qū)ο蟮臋C(jī)制?C++是由C發(fā)展而來(lái)的,與C兼容?用C語(yǔ)言寫(xiě)的程序基本上可以不加修改地用于C++?從C++的名字可以看出它是C的超集?C++既可用于面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì),又可用于面向?qū)ο蟮某绦蛟O(shè)計(jì),是一種功能強(qiáng)大的混合型的程序設(shè)計(jì)語(yǔ)言?C++對(duì)C的“增強(qiáng)”,表現(xiàn)在兩個(gè)方面:(1)在本來(lái)面向過(guò)程的機(jī)制基礎(chǔ)上,對(duì)C語(yǔ)言的功能做了不少擴(kuò)充?(2)增長(zhǎng)了面向?qū)ο蟮臋C(jī)制?當(dāng)前用得較為廣泛的C++有:VC++(VisualCPlusPlus)、BC++(BorlandCPlusPlus)、GCC、AT&TC++等。假如選擇了<win32-release>項(xiàng),就會(huì)在工程所在的目錄下產(chǎn)生一個(gè)新的目錄’release’,在’release’目錄下生成的可執(zhí)行程序代碼規(guī)模小,執(zhí)行效率高,是我們最后的產(chǎn)品.至此,即已生成了一個(gè)完整的程序.但要說(shuō)明一點(diǎn),我們現(xiàn)在VC++所編制的程序是運(yùn)營(yíng)于Windows中的DOS仿真環(huán)境下,至于編制真正的Windows程序尚有很長(zhǎng)的一段路要走.1-2面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思想下面舉一個(gè)包含類(lèi)(class)和對(duì)象(object)的C++程序,目的是使讀者初步了解C++是如何體現(xiàn)面向?qū)ο蟪绦蛟O(shè)計(jì)方法的?例1.4包含類(lèi)的C++程序?#include<iostream>//預(yù)解決命令usingnamespacestd;classStudent//聲明一個(gè)類(lèi),類(lèi)名為Student{privat(yī)e://以下為類(lèi)中的私有部分intnum;//私有變量numintscore;//私有變量scorepublic://以下為類(lèi)中的公用部分voidsetdata()//定義公用函數(shù)setdata{cin>>num;//輸入num的值cin>>score;//輸入score的值}??voiddisplay()//定義公用函數(shù)display{cout<<″num=″<<num<<endl;//輸出num的值cout<<″score=″<<score<<endl;//輸出score的值};};//類(lèi)的聲明結(jié)束Studentstud1,stud2;//定義stud1和stud2為Student類(lèi)的變量,稱(chēng)為對(duì)象intmain()//主函數(shù)首部{stud1.setdat(yī)a();//調(diào)用對(duì)象stud1的setdat(yī)a函數(shù)stud2.setdata();//調(diào)用對(duì)象stud2的setdat(yī)a函數(shù)stud1.display();//調(diào)用對(duì)象stud1的display函數(shù)stud2.display();//調(diào)用對(duì)象stud2的display函數(shù)return0;}1-3最簡(jiǎn)樸的C++程序最簡(jiǎn)樸的C++程序例1.1輸出一行字符:“ThisisaC++program.”?程序如下:#include<iostream>//包含頭文獻(xiàn)iostreamusingnamespacestd;//使用命名空間stdintmain(){cout<<″ThisisaC++program.″;return0;}在運(yùn)營(yíng)時(shí)會(huì)在屏幕上輸出以下一行信息:ThisisaC++program.例1.2求a和b兩個(gè)數(shù)之和?可以寫(xiě)出以下程序://求兩數(shù)之和(本行是注釋行)#include<iostream>//預(yù)解決命令usingnamespacestd;//使用命名空間stdintmain()//主函數(shù)首部{//函數(shù)體開(kāi)始inta,b,sum;//定義變量cin>>a>>b;//輸入語(yǔ)句sum=a+b;//賦值語(yǔ)句cout<<″a+b=″<<sum<<endl;//輸出語(yǔ)句return0;//如程序正常結(jié)束,向操作系統(tǒng)返回一個(gè)零值}//函數(shù)結(jié)束例1.3給兩個(gè)數(shù)x和y,求兩數(shù)中的大者?在本例中包含兩個(gè)函數(shù)?#include<iostream>//預(yù)解決命令usingnamespacestd;intmax(intx,inty)//定義max函數(shù),函數(shù)值為整型,形式參數(shù)x,y為整型{//max函數(shù)體開(kāi)始intz;//變量聲明,定義本函數(shù)中用到的變量z為整型if(x>y)z=x;//if語(yǔ)句,假如x>y,則將x的值賦給zelsez=y(tǒng);//否則,將y的值賦給zreturn(z);//將z的值返回,通過(guò)max帶回調(diào)用處}//max函數(shù)結(jié)束intmain()//主函數(shù){//主函數(shù)體開(kāi)始inta,b,m;//變量聲明cin>>a>>b;//輸入變量a和b的值m=max(a,b);//調(diào)用max函數(shù),將得到的值賦給mcout<<″max=″<<m<<’\n’;//輸出大數(shù)m的值return0;//如程序正常結(jié)束,向操作系統(tǒng)返回一個(gè)零值}//主函數(shù)結(jié)束例1.4是一個(gè)包含類(lèi)的(class)和對(duì)象(object)的簡(jiǎn)樸程序,目的是初步了解C++是如何體現(xiàn)面向?qū)ο蟪绦蛟O(shè)計(jì)方法的.由于尚未系統(tǒng)介紹面向?qū)ο蟪绦蛟O(shè)計(jì)的概念,對(duì)程序理解不深,有一個(gè)初步的印象.下章具體介紹.2.C++對(duì)C的擴(kuò)充上機(jī)暴露的問(wèn)題:1.語(yǔ)句cin>>a>>b>>endl;有什么問(wèn)題?2.關(guān)系運(yùn)算符將表達(dá)式連接起來(lái)稱(chēng)為關(guān)系表達(dá)式。其值非真即假。在C++語(yǔ)言中,用非0代表真,用0表達(dá)假。關(guān)系表達(dá)式的結(jié)果只有兩個(gè),真為1,假為0。3.語(yǔ)句cout<<a<<b,c<<“A”;有什么問(wèn)題?4、C++控制結(jié)構(gòu)。2-1C++的輸入輸出——I/O流控制1.用cout進(jìn)行輸出2.用cin進(jìn)行輸入2-2用const定義常變量一般把程序中不允許改變值的變量定義為常變量.C中#definePI3.14159實(shí)際只是在預(yù)編譯時(shí)進(jìn)行字符置換,PI不是變量,沒(méi)有類(lèi)型,不占用存儲(chǔ)單元,并且容易犯錯(cuò).C++ConstfloatPI=3.14159常變量PI具有變量的屬性,有數(shù)據(jù)類(lèi)型,占用存儲(chǔ)單元,有地址,可用指針指向它.舉例:Inta=1;b=2;#definePI3.14159#defineRa+bCout<<PI*R*R<<endl;輸出的并不是3.14159*(a+b)*(a+b),而是3.14159*a+b*a+b,2-3函數(shù)——原型聲明、重載、模板及默認(rèn)參數(shù)函數(shù)、內(nèi)聯(lián)函數(shù)在C++中,假如函數(shù)調(diào)用的位置在函數(shù)定義之前,則規(guī)定在函數(shù)調(diào)用之前必須對(duì)調(diào)用的函數(shù)作函數(shù)原型聲明(強(qiáng)制性).下面兩種寫(xiě)法等價(jià)Intmax(intx,inty);Intmax(int,int);//編譯時(shí)只檢查參數(shù)類(lèi)型,不檢查參數(shù)名.函數(shù)的重載(一個(gè)函數(shù)名多用)是指C++允許在同一作用域(例如同一個(gè)文獻(xiàn)模塊)中用同一函數(shù)名定義多個(gè)函數(shù),這些函數(shù)的參數(shù)個(gè)數(shù)和參數(shù)類(lèi)型可以都不相同,也可實(shí)現(xiàn)功能不同.例1.6求3個(gè)數(shù)中的最大的數(shù)(分別考慮整數(shù)\實(shí)數(shù)\長(zhǎng)整數(shù)的情況)例1.7用一個(gè)函數(shù)求2個(gè)整數(shù)或3個(gè)整數(shù)中的最大者.注意:重載函數(shù)的參數(shù)個(gè)數(shù)或類(lèi)型必須至少有其中之一不同,函數(shù)返回值類(lèi)型可以相同也可以不同.但不允許參數(shù)個(gè)數(shù)和類(lèi)型都相同而只有返回值不同,由于系統(tǒng)無(wú)法從函數(shù)的調(diào)用形式上判斷哪一個(gè)函數(shù)與之匹配.重載函數(shù)的參數(shù)個(gè)數(shù)或類(lèi)型必須至少有其中之一不同,函數(shù)返回值類(lèi)型可以相同也可以不同.但不允許參數(shù)個(gè)數(shù)和類(lèi)型都相同而只有返回值不同,由于系統(tǒng)無(wú)法從函數(shù)的調(diào)用形式上判斷哪一個(gè)函數(shù)與之匹配.#include<iostream>usingnamespacestd;intmax(inta,intb,intc)//求3個(gè)整數(shù)中的最大者{if(b>a)a=b;if(c>a)a=c;returna;}float(yī)max(floata,float(yī)b,float(yī)c)//求3個(gè)實(shí)數(shù)中的最大者{if(b>a)a=b;if(c>a)a=c;returna;}longmax(longa,longb,longc)//求3個(gè)長(zhǎng)整數(shù)中的最大者{if(b>a)a=b;if(c>a)a=c;returna;}intmain(){inta,b,c;floatd,e,f;longg,h,i;cin>>a>>b>>c;cin>>d>>e>>f;cin>>g>>h>>i;intm;m=max(a,b,c);//函數(shù)值為整型cout<<"max_i="<<m<<endl;floatn;n=max(d,e,f);//函數(shù)值為實(shí)型cout<<"max_f="<<n<<endl;longintp;p=max(g,h,i);//函數(shù)值為長(zhǎng)整型cout<<"max_l="<<p<<endl;return0;}例1.8將例1.6中的程序改為通過(guò)函數(shù)模板來(lái)實(shí)現(xiàn).#include<iostream>usingnamespacestd;template<typenameT>Tmax(Ta,Tb,Tc)//模板聲明,其中T為類(lèi)型參數(shù){if(b>a)a=b;//定義一個(gè)通用函數(shù),用T用虛擬的類(lèi)型名if(c>a)a=c;returna;}intmain(){inti1=8,i2=5,i3=6,i;doubled1=56.9,d2=90.765,d3=43.1,d;longg1=67843,g2=-456,g3=78123,g;i=max(i1,i2,i3);//調(diào)用模板函數(shù),此時(shí)T被int取代d=max(d1,d2,d3);//調(diào)用模板函數(shù),此時(shí)T被double取代g=max(g1,g2,g3);//調(diào)用模板函數(shù),此時(shí)T被long取代cout<<"i_max="<<i<<endl;cout<<"d_max="<<d<<endl;cout<<"g_max="<<g<<endl;return0;}1.3.6有默認(rèn)參數(shù)的函數(shù)#include<iostream>//例1.7此程序?yàn)椴捎貌粠J(rèn)參數(shù)的函數(shù)usingnamespacestd;intmax(inta,intb,intc)//求3個(gè)整數(shù)中的最大者{if(b>a)a=b;if(c>a)a=c;returna;}intmax(inta,intb)//求兩個(gè)整數(shù)中的最大者{if(a>b)returna;elsereturnb;}intmain(){inta=7,b=-4,c=9;cout<<max(a,b,c)<<endl;//輸出3個(gè)整數(shù)中的最大者cout<<max(a,b)<<endl;//輸出兩個(gè)整數(shù)中的最大者return0;}#include<iostream>//習(xí)題1.11,此程序?yàn)椴捎脦J(rèn)參數(shù)的函數(shù)usingnamespacestd;intmain(){intmax(inta,intb,intc=0);inta,b,c;cin>>a>>b>>c;cout<<"max(a,b,c)="<<max(a,b,c)<<endl;cout<<"max(a,b)="<<max(a,b)<<endl;return0;}intmax(inta,intb,intc){if(b>a)a=b;if(c>a)a=c;returna;}注意:實(shí)參與形參的結(jié)合是從左至右進(jìn)行的,指定默認(rèn)值的參數(shù)必須放在形參表列中的最右端.最佳在函數(shù)聲明時(shí)指定默認(rèn)值.(必須在函數(shù)調(diào)用之前將默認(rèn)值的信息告知編譯系統(tǒng))一個(gè)函數(shù)不能既作為重載函數(shù),又作為有默認(rèn)參數(shù)的函數(shù).(二義性)2-4變量的引用、作用域運(yùn)算符和字符串變量1.3.7變量的引用(別名)1.引用的概念變量的”引用”就是變量的別名,對(duì)一個(gè)變量的”引用”的所有操作,事實(shí)上都是對(duì)其所代表的(本來(lái)的)變量的操作.Inta;Int&b=a;//聲明b是一個(gè)整型變量的引用變量,它被初始化為a注意:在上述聲明中&是”引用聲明符”,此時(shí)它并不代表地址.對(duì)變量聲明一個(gè)引用,并不另開(kāi)辟內(nèi)存單元,b和a都代表同一變量單元.在聲明一個(gè)引用時(shí),必須同時(shí)使之初始化,即聲明它代表哪一個(gè)變量.2.引用的簡(jiǎn)樸使用#include<iostream>usingnamespacestd;intmain(){inta=10;int&b=a;//聲明b是a的引用a=a*a;//a的值變化了,b的值也應(yīng)一起變化cout<<a<<""<<b<<endl;b=b/5;//b的值變化了,a的值也應(yīng)一起變化cout<<b<<""<<a<<endl;return0;}3.關(guān)于引用的簡(jiǎn)樸說(shuō)明當(dāng)&a的前面有類(lèi)型符時(shí)(如int&a),它必然是對(duì)引用的聲明,假如前面沒(méi)有類(lèi)型符(如p=&a),此時(shí)的&是取地址運(yùn)算符.4.將引用作為函數(shù)參數(shù)1.將變量名作為實(shí)參.#include<iostream>//例1.10無(wú)法實(shí)現(xiàn)兩個(gè)變量的值互換的程序usingnamespacestd;voidswap(inta,intb){inttemp;temp=a;a=b;b=temp;//實(shí)現(xiàn)a和b的值互換}intmain(){inti=3,j=5;swap(i,j);cout<<i<<","<<j<<endl;//i和j的值未互換return0;}2傳遞變量的指針//例1.11使用指針變量作形參,實(shí)現(xiàn)兩個(gè)變量的值互換#include<iostream>usingnamespacestd;voidswap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}intmain(){inti=3,j=5;swap(&i,&j);cout<<i<<","<<j<<endl;return0;}2.傳送變量的別名例1.12運(yùn)用”引用形參”實(shí)現(xiàn)兩個(gè)變量的值互換.#include<iostream>usingnamespacestd;voidswap(int&a,int&b){inttemp;temp=a;a=b;b=temp;}intmain(){inti=3,j=5;swap(i,j);cout<<"i="<<i<<""<<"j="<<j<<endl;return0;}C++調(diào)用函數(shù)時(shí)有兩種傳遞數(shù)據(jù)的方式1、傳值方式調(diào)用2、引用方式調(diào)用對(duì)比例1.12與例1.11,分析使用引用和使用指針變量用函數(shù)形參有什么不同?C++提供的引用機(jī)制是非常有用的,特別用作函數(shù)參數(shù)時(shí),比用指針簡(jiǎn)樸,易于理解,并且可以減少犯錯(cuò)機(jī)會(huì),提高程序的執(zhí)行效率,在許多情況下能代替指針.5.對(duì)引用的進(jìn)一步說(shuō)明1.3.8內(nèi)置函數(shù)調(diào)用函數(shù)需要一定的時(shí)間,假如有的函數(shù)需要頻繁使用,則累計(jì)所用時(shí)間會(huì)很長(zhǎng),從而減少程序的執(zhí)行效率.C++提供一種提高效率的方法,在編譯時(shí)將所調(diào)用函數(shù)的代碼嵌入到主函數(shù)中.例1.13#include<iostream>usingnamespacestd;inlineintmax(inta,intb,intc)//這是一個(gè)內(nèi)置函數(shù),求3個(gè)整數(shù)中的最大者{if(b>a)a=b;if(c>a)a=c;returna;}intmain(){inti=7,j=10,k=25,m;m=max(i,j,k);cout<<"max="<<m<<endl;return0;}使用內(nèi)置函數(shù)可以節(jié)省運(yùn)營(yíng)時(shí)間,但卻增長(zhǎng)了目的程序的長(zhǎng)度.因此只用于規(guī)模很小而使用頻繁的函數(shù).1.3.9作用域運(yùn)算符每一個(gè)變量都有其有效的作用域,只能在變量的作用域內(nèi)使用該變量,不能直接使用其它作用域中的變量.例子1.16局部變量和全局變量同名#include<iostream>usingnamespacestd;floata=13.5;intmain(){inta=5;cout<<a<<endl;//輸出局部變量a的值cout<<::a<<endl;//輸出全局變量a的值return0;}//::a表達(dá)全局作用域中的變量,不能用::訪問(wèn)函數(shù)中的局部變量1.3.10字符串變量1.定義字符串變量Stringstring1;Stringstring2=“China”;將頭文獻(xiàn)”string”頭文獻(xiàn)包含進(jìn)來(lái)2.對(duì)字符串變量的賦值String1=“’Camada”;String2=string1;在定義字符串變量時(shí)不需指定長(zhǎng)度,它的長(zhǎng)度隨其中的字符串長(zhǎng)度而改變.3.字符串變量的輸入輸出Cin>>string1;Cout>>string2;4.字符串變量的運(yùn)算在用字符組存放字符串時(shí),字符串的運(yùn)算要用字符串函數(shù).如strcat(存放),strcmp(比較),strcpy(復(fù)制),而對(duì)string類(lèi)對(duì)象,可以不用這些函數(shù),直接用簡(jiǎn)樸的運(yùn)算符.5.字符串?dāng)?shù)組Stringname[5];//定義一字符串?dāng)?shù)組,它包含5個(gè)字符串元素Stringname[5]={“Zhang”,”Li”,”Fun”,”Wang”,”Tan”}//定義一個(gè)字符串?dāng)?shù)組并初始化編譯系統(tǒng)為每一個(gè)字符串變量分派固定的字節(jié)數(shù),在這個(gè)存儲(chǔ)單元中,并不是直接存放字符串自身,而是存放字符串的地址.例子1.17輸入3個(gè)字符串,規(guī)定按字母由小到大順序輸出#include<iostream>#include<string>usingnamespacestd;intmain(){stringstring1,string2,string3,temp;cout<<"pleaseinputthreestrings:";//這是對(duì)用戶輸入的提醒cin>>string1>>string2>>string3;//輸入3個(gè)字符串if(string2>string3){temp=string2;string2=string3;string3=temp;}//使串2≤串3if(string1<=string2)cout<<string1<<""<<string2<<""<<string3<<endl;//假如串1≤串2,則串1≤串2≤串3elseif(string1<=string3)cout<<string2<<""<<string1<<""<<string3<<endl;//假如串1>串2,且串1≤串3,則串2<串1≤串3elsecout<<string2<<""<<string3<<""<<string1<<endl;//假如串1>串2,且串1>串3,則串2≤串3<串3return0;}2-5動(dòng)態(tài)內(nèi)存分派/撤消——new和delete運(yùn)算符1.3.11動(dòng)態(tài)分派/撤消內(nèi)存的運(yùn)算符new和deleteNewint;//開(kāi)辟一個(gè)存放整數(shù)的空間,返回一個(gè)指向整型數(shù)據(jù)的指針Newint(100);//開(kāi)辟一個(gè)存放整數(shù)的空間,并指定該整數(shù)的初值為100Newchar[10];//開(kāi)辟一個(gè)存放字符數(shù)組的空間,該數(shù)組有10個(gè)元素,返回一個(gè)指向字符數(shù)組的指針Newint[5][4];//開(kāi)辟一個(gè)存放二維整型數(shù)組的空間,該數(shù)組大小為5*4,Float(yī)*p=newfloat(3.14159)//開(kāi)辟一個(gè)存放實(shí)數(shù)的空間,并指定該實(shí)數(shù)的初值為3.14159,將返回的指向?qū)嵭蛿?shù)據(jù)的指針賦給指針變量p例子1.18開(kāi)辟空間以存放一個(gè)結(jié)構(gòu)體變量.#include<iostream>#include<string.h>usingnamespacestd;structStudent{charname[10];intnum;charsex;};intmain(){Student*p;p=newStudent;strcpy(p->name,"WangFun");p->num=10123;p->sex='M';cout<<p->name<<""<<p->num<<""<<p->sex<<endl;deletep;return0;}假如由于內(nèi)存局限性等因素而無(wú)法正常分派空間,則new會(huì)返回一個(gè)空指針NULL,用戶可以根據(jù)該指針的值判斷分派空間是否成功.注意,new和delete是運(yùn)算符,不是函數(shù),因此執(zhí)行效率高.new和delete配合使用,不要混合使用.3.C++程序的編寫(xiě)和實(shí)現(xiàn)在課中通過(guò)截圖和示意圖來(lái)演示。六、作業(yè)第2章類(lèi)和對(duì)象一、教學(xué)目的:掌握聲明類(lèi)的方法,類(lèi)和類(lèi)的成員的概念以及定義對(duì)象的方法;初步掌握用類(lèi)和對(duì)象編制基于對(duì)象的程序;學(xué)習(xí)檢查和調(diào)試基于對(duì)象的程序。學(xué)時(shí)分派:9學(xué)時(shí)二、教學(xué)重點(diǎn):初步掌握用類(lèi)和對(duì)象編制基于對(duì)象的程序三、教學(xué)難點(diǎn):初步掌握用類(lèi)和對(duì)象編制基于對(duì)象的程序,學(xué)習(xí)檢查和調(diào)試基于對(duì)象的程序。四、教學(xué)方法:課題講授及實(shí)例演示,采用多媒體教學(xué)方法,運(yùn)用Powerpoint將本節(jié)課的關(guān)鍵內(nèi)容歸類(lèi),并通過(guò)Internet收集相關(guān)的資料融入教學(xué)內(nèi)容中。五、教學(xué)過(guò)程設(shè)計(jì):(9學(xué)時(shí))1.面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述2.1面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述當(dāng)程序規(guī)模較大時(shí),編程者直接編寫(xiě)出一個(gè)面向過(guò)程的程序就會(huì)力不從心,C++就是為了解決編寫(xiě)大程序過(guò)程中的困難而產(chǎn)生的。2.1.1什么是面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)的思緒和人們平常生活中解決問(wèn)題的思緒是相似的。在自然界和社會(huì)生活中,一個(gè)復(fù)雜的事物總是由許多部分組成的,各部分之間有一定的聯(lián)系,協(xié)調(diào)發(fā)揮功用。相關(guān)概念1.對(duì)象客觀世界中任何一個(gè)事物都可以當(dāng)作一個(gè)對(duì)象(object)?;蛘哒f(shuō),客觀世界是由千千萬(wàn)萬(wàn)個(gè)對(duì)象組成的。對(duì)象是構(gòu)成系統(tǒng)的基本單位。班級(jí)對(duì)象:班級(jí)的靜態(tài)特性,所屬的系和專(zhuān)業(yè)、班級(jí)的人數(shù),所在的教室等。這種靜態(tài)特性稱(chēng)為屬性;班級(jí)的動(dòng)態(tài)特性,如學(xué)習(xí)、開(kāi)會(huì)、體育比賽等,這種動(dòng)態(tài)特性稱(chēng)為行為。假如想從外部控制班級(jí)中學(xué)生的活動(dòng),可以從外界向班級(jí)發(fā)一個(gè)信息(如聽(tīng)到打鈴就下課等),一般稱(chēng)它為消息。任何一個(gè)對(duì)象都應(yīng)當(dāng)具有這兩個(gè)要素,一是屬性(attribute);二是行為(behavior),它能根據(jù)外界給的信息進(jìn)行相應(yīng)的操作。對(duì)象是由一組屬性和一組行為構(gòu)成的。面向?qū)ο蟮某绦蛟O(shè)計(jì)采用了以上人們所熟悉的這種思緒。使用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法設(shè)計(jì)一個(gè)復(fù)雜的軟件系統(tǒng)時(shí),首要的問(wèn)題是擬定該系統(tǒng)是由哪些對(duì)象組成的,并且設(shè)計(jì)這些對(duì)象。在C++中,每個(gè)對(duì)象都是由數(shù)據(jù)和函數(shù)(即操作代碼)這兩部分組成的。調(diào)用對(duì)象中的函數(shù)就是向該對(duì)象傳送一個(gè)消息(message),規(guī)定該對(duì)象實(shí)現(xiàn)某一行為(功能)。2、封裝與信息隱蔽我們可以對(duì)一個(gè)對(duì)象進(jìn)行封裝解決,把它的一部分屬性和功能對(duì)外界屏蔽,也就是說(shuō)從外界是看不到的、甚至是不可知的。使用對(duì)象的人完全可以不必知道對(duì)象內(nèi)部的具體細(xì)節(jié),只需了解其外部功能即可自如地操作對(duì)象。把對(duì)象的內(nèi)部實(shí)現(xiàn)和外部行為分隔開(kāi)來(lái)。數(shù)據(jù)封裝將對(duì)象內(nèi)部的信息進(jìn)行屏蔽,人們只能通過(guò)對(duì)象界面上的允許操作對(duì)對(duì)象進(jìn)行動(dòng)作,改變對(duì)象的屬性及狀態(tài)。信息隱蔽是指對(duì)象中的某些部分對(duì)外隱蔽,即隱蔽其內(nèi)部細(xì)節(jié),只留下少量接口,以便與外界聯(lián)系,接受外界消息。它尚有助于數(shù)據(jù)安全,防止無(wú)關(guān)的人了解和修改數(shù)據(jù)。C++的對(duì)象中的函數(shù)名就是對(duì)象對(duì)外接口。3、抽象抽象的過(guò)程是將有關(guān)事物的共性歸納、集中的過(guò)程。抽象的作用是表達(dá)同一類(lèi)事物的本質(zhì)。對(duì)象是具體存在的。類(lèi)是對(duì)象的抽象,而對(duì)象則是類(lèi)的實(shí)例,或者說(shuō)是類(lèi)的具體表現(xiàn)形式。類(lèi)類(lèi)是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對(duì)象的集合。類(lèi)的定義涉及一組數(shù)據(jù)屬性和在數(shù)據(jù)上的一組合法操作。類(lèi)定義可以視為一個(gè)具有類(lèi)似特性與共同行為的對(duì)象的模板,可用來(lái)產(chǎn)生對(duì)象。對(duì)象實(shí)例在一個(gè)類(lèi)中,每個(gè)對(duì)象都是類(lèi)的實(shí)例(Instance),它們都可使用類(lèi)中提供的函數(shù)。對(duì)象的狀態(tài)則包含在它的實(shí)例變量,即實(shí)例的屬性中。4、繼承與重用面向?qū)ο蟮某绦蚪M成:對(duì)象=算法+數(shù)據(jù)結(jié)構(gòu)程序=(對(duì)象+對(duì)象+對(duì)象+……)+消息消息的作用就是對(duì)對(duì)象的控制。程序設(shè)計(jì)的關(guān)鍵是設(shè)計(jì)好每一個(gè)對(duì)象以及擬定向這些對(duì)象發(fā)出的命令,使各對(duì)象完畢相應(yīng)的操作。1-1什么是面向?qū)ο蟪绦蛟O(shè)計(jì)及特點(diǎn)1-2類(lèi)和對(duì)象的作用2.類(lèi)和對(duì)象2-1類(lèi)的定義類(lèi)的聲明格式:class類(lèi)名{private:成員數(shù)據(jù); 成員函數(shù);public:成員數(shù)據(jù); 成員函數(shù);protected:?成員數(shù)據(jù);?成員函數(shù);};用關(guān)鍵字private限定的成員稱(chēng)為私有成員,對(duì)私有成員限定在該類(lèi)的內(nèi)部使用,即只允許該類(lèi)中的成員函數(shù)使用私有的成員數(shù)據(jù),對(duì)于私有的成員函數(shù),只能被該類(lèi)內(nèi)的成員函數(shù)調(diào)用;類(lèi)就相稱(chēng)于私有成員的作用域。而用關(guān)鍵字protected所限定的成員稱(chēng)為受保護(hù)成員,只允許在類(lèi)內(nèi)及該類(lèi)的派生類(lèi)中使用受保護(hù)的數(shù)據(jù)或函數(shù)。即受保護(hù)成員的作用域是該類(lèi)及該類(lèi)的派生類(lèi)。用關(guān)鍵字public限定的成員稱(chēng)為公用成員,公用成員的數(shù)據(jù)或函數(shù)不受類(lèi)的限制,可以在類(lèi)內(nèi)或類(lèi)外自由使用;對(duì)類(lèi)而言是透明的。每一個(gè)限制詞(private等)在類(lèi)體中可使用多次,即一個(gè)類(lèi)體中可以包含多個(gè)privat(yī)e和public部分。一旦使用了限制詞,該限制詞一直有效,直到下一個(gè)限制詞開(kāi)始為止。但為了程序清楚,養(yǎng)成這樣的習(xí)慣:使每一種成員訪問(wèn)限定符在類(lèi)定義體中只出現(xiàn)一次。假如未加說(shuō)明,類(lèi)中成員默認(rèn)的訪問(wèn)權(quán)限是private,即私有的。classStudent{?charName[20]; floatMat(yī)h; floatChiese;?public: floataverage;voidSetName(char*name);?voidSetMath(floatmath); voidSetChinese(floatch);?floatGetAverage(void);};classA{floatx,y;public:voidSetxy(floata,float(yī)b){x=a;y=b;}voidPrint(void){cout<<x<<‘\t’<<y<<endl;}}; 在類(lèi)外不能直接使用x或y,必須通過(guò)Setxy()給x或y賦值,通過(guò)Print()輸出x或y。成員函數(shù)與成員數(shù)據(jù)的定義不分先后,可以先說(shuō)明函數(shù)原型,再在類(lèi)體外定義函數(shù)體。classA{float(yī)x,y;public:voidSetxy(floata,floatb){x=a;y=b;}voidPrint(void){cout<<x<<‘\t’<<y<<endl;}};?classA{floatx,y;public:voidSetxy(floata,floatb);voidPrint(void);}; voidA::Setxy(floata,float(yī)b){x=a;y=b;}voidA::Print(void){cout<<x<<‘\t’<<y<<endl;}在定義一個(gè)類(lèi)時(shí),要注意如下幾點(diǎn):1、類(lèi)具有封裝性,并且類(lèi)只是定義了一種結(jié)構(gòu)(樣板),所以類(lèi)中的任何成員數(shù)據(jù)均不能使用關(guān)鍵字extern,auto或register限定其存儲(chǔ)類(lèi)型。2、在定義類(lèi)時(shí),只是定義了一種導(dǎo)出的數(shù)據(jù)類(lèi)型,并不為類(lèi)分派存儲(chǔ)空間,所以,在定義類(lèi)中的數(shù)據(jù)成員時(shí),不能對(duì)其初始化。如:classTest{intx=5,y=6;//是不允許的externfloatx; //是不允許的}在C++語(yǔ)言中,結(jié)構(gòu)體類(lèi)型只是類(lèi)的一個(gè)特例。結(jié)構(gòu)體類(lèi)型與類(lèi)的唯一的區(qū)別在于:在類(lèi)中,其成員的缺省的存取權(quán)限是私有的;而在結(jié)構(gòu)體類(lèi)型中,其成員的缺省的存取權(quán)限是公有的。內(nèi)聯(lián)成員函數(shù)對(duì)象在定義類(lèi)時(shí),只是定義了一種數(shù)據(jù)類(lèi)型,即說(shuō)明程序中也許會(huì)出現(xiàn)該類(lèi)型的數(shù)據(jù),并不為類(lèi)分派存儲(chǔ)空間。只有在定義了屬于類(lèi)的變量后,系統(tǒng)才會(huì)為類(lèi)的變量分派空間。類(lèi)的變量我們稱(chēng)之為類(lèi)的變量我們稱(chēng)之為對(duì)象。2-2成員函數(shù):成員函數(shù)定義;使用對(duì)象指針;常成員函數(shù);重載成員函數(shù)對(duì)象是類(lèi)的實(shí)例,定義對(duì)象之前,一定要先說(shuō)明該對(duì)象的類(lèi)。不同對(duì)象占據(jù)內(nèi)存中的不同區(qū)域,它們所保存的數(shù)據(jù)各不相同,但對(duì)成員數(shù)據(jù)進(jìn)行操作的成員函數(shù)的程序代碼均是同樣的。在建立對(duì)象時(shí),只為對(duì)象分派用于保存數(shù)據(jù)成員的內(nèi)存空間,而成員函數(shù)的代碼為該類(lèi)的每一個(gè)對(duì)象所共享。對(duì)象的定義方法同結(jié)構(gòu)體定義變量的方法同樣,也分三種,當(dāng)類(lèi)中有數(shù)據(jù)成員的訪問(wèn)權(quán)限為私有時(shí),不允許對(duì)對(duì)象進(jìn)行初始化。classA{floatx,y;public:voidSetxy(floata,floatb){x=a;y=b;}voidPrint(void){cout<<x<<‘\t’<<y<<endl;}}a1,a2;voidmain(void){Aa3,a4;}對(duì)象的使用一個(gè)對(duì)象的成員就是該對(duì)象的類(lèi)所定義的成員,有成員數(shù)據(jù)和成員函數(shù),引用時(shí)同結(jié)構(gòu)體變量類(lèi)似,用“.”運(yùn)算符。classA{floatx,y;public:float(yī)m,n;voidSetxy(floata,float(yī)b){x=a;y=b;}voidPrint(void){cout<<x<<‘\t’<<y<<endl;}};voidmain(void){Aa1,a2;//定義對(duì)象a1.m=10;a1.n=20;//為公有成員數(shù)據(jù)賦值a1.Setxy(2.0,5.0);//為私有成員數(shù)據(jù)賦值a1.Print();}用成員選擇運(yùn)算符“.”只能訪問(wèn)對(duì)象的公有成員,而不能訪問(wèn)對(duì)象的私有成員或保護(hù)成員。若要訪問(wèn)對(duì)象的私有的數(shù)據(jù)成員,只能通過(guò)對(duì)象的公有成員函數(shù)來(lái)獲取。2-3程序結(jié)構(gòu):訪問(wèn)控制;類(lèi)的程序結(jié)構(gòu);類(lèi)作用域3.類(lèi)的封裝性和信息隱蔽六、作業(yè)第3章關(guān)于類(lèi)和對(duì)象的進(jìn)一步討論一、教學(xué)目的:進(jìn)一步加深對(duì)類(lèi)和對(duì)象的理解;掌握類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù)的概念和使用方法。掌握對(duì)對(duì)象數(shù)組、對(duì)象的指針及其使用方法;掌握友元的概念和使用;了解類(lèi)模板的使用方法。學(xué)時(shí)分派:10學(xué)時(shí)二、教學(xué)重點(diǎn):掌握類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù)的概念和使用方法三、教學(xué)難點(diǎn):理解和掌握對(duì)象數(shù)組、對(duì)象的指針及其使用方法四、教學(xué)方法:課題講授及例程解析,采用多媒體教學(xué)方法,運(yùn)用Powerpoint將本節(jié)課的關(guān)鍵內(nèi)容歸類(lèi),并通過(guò)Internet收集相關(guān)的資料融入教學(xué)內(nèi)容中。五、教學(xué)過(guò)程設(shè)計(jì):1.構(gòu)造函數(shù)和析構(gòu)函數(shù)及調(diào)用順序1-1構(gòu)造函數(shù)設(shè)計(jì),構(gòu)造函數(shù)的重載,類(lèi)成員初始化,構(gòu)造順序,復(fù)制構(gòu)造函數(shù)對(duì)象數(shù)組、對(duì)象的指針及其使用方法構(gòu)造函數(shù)和析構(gòu)函數(shù)是在類(lèi)體中說(shuō)明的兩種特殊的成員函數(shù)。構(gòu)造函數(shù)是在創(chuàng)建對(duì)象時(shí),使用給定的值來(lái)將對(duì)象初始化。析構(gòu)函數(shù)的功能正好相反,是在系統(tǒng)釋放對(duì)象前,對(duì)對(duì)象做一些善后工作。構(gòu)造函數(shù)可以帶參數(shù)、可以重載,同時(shí)沒(méi)有返回值。構(gòu)造函數(shù)是類(lèi)的成員函數(shù),系統(tǒng)約定構(gòu)造函數(shù)名必須與類(lèi)名相同。構(gòu)造函數(shù)提供了初始化對(duì)象的一種簡(jiǎn)樸的方法。classA{?float(yī)x,y;public:A(floata,floatb){x=a;y=b;}//構(gòu)造函數(shù),初始化對(duì)象floatSum(void){returnx+y;}voidSet(floata,floatb){x=a;?y=b;}Print(void){cout<<"x="<<x<<'\t'<<"y="<<y<<endl;}};voidmain(void){?Aa1(2.0,3.0);//定義時(shí)調(diào)用構(gòu)造函數(shù)初始化 Aa2(1.0,2.0); a2.Set(10.0,20.0);//運(yùn)用成員函數(shù)重新為對(duì)象賦值a1.Print(); a2.Print();}對(duì)構(gòu)造函數(shù),說(shuō)明以下幾點(diǎn):1.構(gòu)造函數(shù)的函數(shù)名必須與類(lèi)名相同。構(gòu)造函數(shù)的重要作用是完畢初始化對(duì)象的數(shù)據(jù)成員以及其它的初始化工作。2.在定義構(gòu)造函數(shù)時(shí),不能指定函數(shù)返回值的類(lèi)型,也不能指定為void類(lèi)型。3.一個(gè)類(lèi)可以定義若干個(gè)構(gòu)造函數(shù)。當(dāng)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)書(shū)丟了咋辦
- 英語(yǔ)教改課題申報(bào)書(shū)
- 國(guó)家課題項(xiàng)目申報(bào)書(shū)
- 新課標(biāo)相關(guān)課題申報(bào)書(shū)
- 合同范本號(hào)和合同編號(hào)
- 加工承攬合同范本格式
- 青年生育意愿課題申報(bào)書(shū)
- 員工店鋪勞務(wù)合同范本
- 化工用消泡劑采購(gòu)合同范例
- 低價(jià)出售二手叉車(chē)合同范本
- 2025人教版一年級(jí)下冊(cè)數(shù)學(xué)教學(xué)進(jìn)度表
- DeepSeek教案寫(xiě)作指令
- 2025年安徽省合肥熱電集團(tuán)招聘50人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 休學(xué)復(fù)學(xué)申請(qǐng)書(shū)
- 北京2025年02月北京市地質(zhì)礦產(chǎn)勘查院所屬事業(yè)單位公開(kāi)招考工作人員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- DeepSeek零基礎(chǔ)到精通手冊(cè)(保姆級(jí)教程)
- 煤礦監(jiān)測(cè)監(jiān)控培訓(xùn)
- 瓷磚鋪貼勞務(wù)承包協(xié)議書(shū)
- 2025年四川司法警官職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年常考版參考題庫(kù)含答案解析
- 新建污水處理廠工程EPC總承包投標(biāo)方案(技術(shù)標(biāo))
- 柔性電路板自動(dòng)化制造-深度研究
評(píng)論
0/150
提交評(píng)論