實(shí)驗(yàn)二C#類和多態(tài)編程_第1頁
實(shí)驗(yàn)二C#類和多態(tài)編程_第2頁
實(shí)驗(yàn)二C#類和多態(tài)編程_第3頁
實(shí)驗(yàn)二C#類和多態(tài)編程_第4頁
實(shí)驗(yàn)二C#類和多態(tài)編程_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

實(shí)驗(yàn)二類與對(duì)象編程練習(xí)【實(shí)驗(yàn)?zāi)康摹坷斫釩#語言是如何體現(xiàn)面向?qū)ο缶幊袒舅枷耄徽莆疹悓?duì)象的定義;了解類的封裝方法,以及如何創(chuàng)建類和對(duì)象;了解成員變量和成員方法的特性;掌握靜態(tài)成員的用法;掌握構(gòu)造函數(shù)和析構(gòu)函數(shù)的含義與作用、定義方式和實(shí)現(xiàn),能夠根據(jù)要求正確定義和重載構(gòu)造函數(shù)。能夠根據(jù)給定的要求定義類并實(shí)現(xiàn)類的成員函數(shù);理解類的成員的訪問控制的含義,公有、私有和保護(hù)成員的區(qū)別;掌握參數(shù)傳遞的用法;掌握屬性的作用和使用?!緦?shí)驗(yàn)要求】編寫一個(gè)包含類和類方法的程序;編寫一個(gè)創(chuàng)建對(duì)象和使用對(duì)象的方法程序;編寫不同成員變量、方法修飾方法的程序;。編寫含有構(gòu)造方法的類的程序;編寫重載構(gòu)造方法的程序;編寫類含有靜態(tài)變量的程序;編寫通過ref、out修飾符傳遞參數(shù)的類程序;編寫含有屬性的類程序?!緦?shí)驗(yàn)內(nèi)容】一、定義一個(gè)圓類,計(jì)算圓的面積和周長(zhǎng)publicclasscircle{publicstaticvoidMain(){doubleradium,delimeter,square;constdoublepai=3.1415926;radium=Convert.ToInt32(Console.ReadLine());delimeter=2*pai*radium;square=pai*pai*radium;Console.WriteLine("delimeter={0},square={1}",delimeter,square);Console.ReadLine();}}或者:publicclasscircle{doubledelimeter,square;constdoublepai=3.1415926;publicvoidcalculate(doublerad){delimeter=2*pai*rad;square=pai*pai*rad;Console.WriteLine("delimeter={0},square={1}",delimeter,square);}publicstaticvoidMain(){doubleradium;circlecir=newcircle();radium=Convert.ToInt32(Console.ReadLine());cir.calculate(radium);Console.ReadLine();}}請(qǐng)比較以上兩個(gè)程序,看起來后一個(gè)程序把問題復(fù)雜化了,是不是不如第一個(gè)程序好,它從設(shè)計(jì)思想上有什么優(yōu)勢(shì)么?答:增強(qiáng)了可讀性,模塊式的編程有利于程序員編程間的交流。二、實(shí)現(xiàn)一個(gè)學(xué)生類程序要求如下:其中有3個(gè)數(shù)據(jù)成員有學(xué)號(hào)、姓名、年齡,以及若干成員函數(shù)。同時(shí)編寫主函數(shù)使用這個(gè)類,實(shí)現(xiàn)對(duì)學(xué)生數(shù)據(jù)的賦值和輸出。要求:使用成員函數(shù)實(shí)現(xiàn)對(duì)數(shù)據(jù)的輸出;使用構(gòu)造函數(shù)實(shí)現(xiàn)對(duì)數(shù)據(jù)的輸入。參考代碼如下:publicclassstudents{stringid,name;intage;publicstudents(stringid,stringname,intage){this.id=id;=name;this.age=age;}publicvoidDisplay(){Console.WriteLine("id={0},name={1},age={2}",id,name,age);}publicstaticvoidMain(){//stringid,name;//intage;studentsstu=newstudents("0001","zhangsan",16);stu.Display();Console.ReadLine();}}以上程序使用了構(gòu)造方法,請(qǐng)回答關(guān)鍵字this有何作用,你能將成員函數(shù)Display修改成別的代碼也實(shí)現(xiàn)響應(yīng)的功能么?答:this表示當(dāng)前對(duì)象的引用,即哪個(gè)對(duì)象調(diào)用了this的方法、屬性、索引器,this就代表那個(gè)對(duì)象,所以this一般不能出現(xiàn)在靜態(tài)方法里面。修改Display函數(shù)見Lab_2代碼三、實(shí)現(xiàn)一個(gè)日期類型程序要求如下:定義日期類型Date。要求有以下面成員:年、月、日變量,重載的構(gòu)造方法,一個(gè)實(shí)現(xiàn)年、月、日單獨(dú)的輸入,一個(gè)實(shí)現(xiàn)從系統(tǒng)時(shí)間里讀出年月日,并實(shí)現(xiàn)打印方法成員,該方法要按照“XXXX年XX月XX日”格式輸出日期。參考代碼如下:publicclassDate{privateintYear,Month,Day;publicDate(intYear,intMonth,intDay){this.Year=Year;this.Month=Month;this.Day=Day;}publicDate(System.DateTimedt){Year=dt.Year;Month=dt.Month;Day=dt.Day;}publicvoidDisplayDate(){Console.WriteLine("{0}年{1}月{2}日",Year,Month,Day);}}publicclassTester{publicstaticvoidMain(){System.DateTimecurrentTime=System.DateTime.Now;Datedt=newDate(2008,7,18);dt.DisplayDate();Datedt2=newDate(currentTime);dt2.DisplayDate();Console.ReadLine();}}請(qǐng)練習(xí)System.Datetime類型及其各屬性的應(yīng)用。列出System.Datetime主要包含哪些屬性,并思考重載構(gòu)造方法的作用。答:屬性包括了YearMonthDay,對(duì)于多個(gè)重復(fù)操作行為可以用重載構(gòu)造方法來表達(dá)對(duì)象的多種初始化行為。四、實(shí)現(xiàn)一個(gè)包含類屬性方法的簡(jiǎn)單加法程序見Lab_4程序要求如下:建立一個(gè)類,使其可以進(jìn)行簡(jiǎn)單的加法運(yùn)算。該程序要包含類、屬性、方法等面向?qū)ο蟮幕驹?。publicclassPropertyTest{doublexVal,yVal;doublezVal,sVal;publicPropertyTest(doublex){xVal=x;}publicdoubleYVAL{get{returnyVal;}set{yVal=value;}}publicvoidDisplay(){//Console.WriteLine("xVal={0},yVal={1}",xVal,yVal);zVal=Math.Sqrt(Math.Pow(xVal,2)-Math.Pow(yVal,3));sVal=Math.Log(yVal);//zVal=xVal*xVal-yVal;//sVal=yVal+5;Console.WriteLine("xVal={0},yVal={1},zVal={2},sVal={3}",xVal,yVal,zVal,sVal);}}publicclassTester{publicstaticvoidMain(){PropertyTestpt=newPropertyTest(4);pt.YVAL=2;pt.Display();Console.ReadLine();}}作以下修改分析程序輸出的原因:將"xVal={0},yVal={1},zVal={2},sVal={3}"改成"xVal={0},yVal={1},zVal={0},sVal={1}"查看區(qū)別,寫出原因;未修改之前:修改之后:答:通過修改之前和修改之后的結(jié)果可以看出,結(jié)果是不相同的,根本原因是由于輸出的時(shí)候設(shè)置的參數(shù)問題,zVal={0},sVal={1}大括號(hào)里的序號(hào)改成了0,1輸出結(jié)果就會(huì)直接輸出相對(duì)應(yīng)的xVal,yVal的值了解Math類下主要的靜態(tài)數(shù)學(xué)方法,掌握求冪,求平方和對(duì)數(shù)等靜態(tài)方法的使用規(guī)則。五、通過類程序說明靜態(tài)變量/方法與實(shí)例變量/方法的區(qū)別見Lab_5static聲明的成員變量/方法被視為類的成員變量/方法,而不把它當(dāng)作實(shí)例對(duì)象的成員變量/方法。換句話說,靜態(tài)變量/方法是類固有的,可以直接引用,其它成員變量/方法僅僅被聲明,生成實(shí)例對(duì)象后才存在,才可以被引用。基于這樣的事實(shí),也把靜態(tài)變量/方法稱為類變量/方法,非靜態(tài)變量稱為實(shí)例變量/方法。1.程序功能要求編寫帳戶類,對(duì)每一賬號(hào)賦值帳戶并設(shè)置初始化存款為0.00元,設(shè)計(jì)一變量統(tǒng)計(jì)賬號(hào)生成的數(shù)目。publicclassBankAccount{staticinttotalAccountNumber=0;stringBankAccountId;doubleinitialDepositAmount=0.00;publicBankAccount(stringmyId){this.BankAccountId=myId;this.initialDepositAmount=0.00;totalAccountNumber++;}publicvoiddisplayid(){ Console.WriteLine("mbaid={0},initialDepositAmount={1}",this.BankAccountId,this.initialDepositAmount);}publicstaticvoiddisplay(){ Console.WriteLine("totalAccountNumber={0}",totalAccountNumber);}}publicclassTester{publicstaticvoidMain(){BankAccountmba=newBankAccount("37000001");BankAccountmba2=newBankAccount("3700002");BankAccountmba3=newBankAccount("");BankAccountmba4=newBankAccount("3700004");//Console.WriteLine("mba2ID={0}",mba2.BankAccountId);mba2.displayid();BankAccount.display();Console.ReadLine();}}請(qǐng)回答問題:按你自己的算法修改以上程序,比如可只輸出生成的賬戶數(shù)。把注釋去掉后會(huì)怎樣,為什么?說明BankAccountId是不可訪問的,因?yàn)槟J(rèn)為私有成員為什么display用類名直接引用,可以用對(duì)象來引用么?嘗試輸出結(jié)果。答:靜態(tài)變量/方法是類固有的,可以直接引用,其它成員變量/方法僅僅被聲明,生成實(shí)例對(duì)象后才存在,才可以被引用。實(shí)驗(yàn)結(jié)果表明不能用實(shí)例對(duì)象直接引用(4)類的靜態(tài)變量和非靜態(tài)變量的引用區(qū)別。判斷一下語句的正確性:靜態(tài)方法只能使用靜態(tài)變量,不能使用實(shí)例變量。因?yàn)閷?duì)象實(shí)例化之前,實(shí)例變量不可用。這個(gè)觀點(diǎn)真確么?(正確)類的靜態(tài)變量只有一個(gè)版本,所有實(shí)例對(duì)象引用的都是同一個(gè)版本。(正確)對(duì)象實(shí)例化后,每個(gè)實(shí)例變量都被制作了一個(gè)副本,它們之間互不影響。(正確)六、方法中參數(shù)傳遞的練習(xí)見Lab_6在其它語言中,函數(shù)調(diào)用或過程調(diào)用時(shí)參數(shù)有傳值調(diào)用和傳地址調(diào)用之分。在C#中,方法中的參數(shù)傳遞可以分為傳值調(diào)用或?qū)ο蠓椒ㄕ{(diào)用等方式。傳值調(diào)用即傳遞的參數(shù)是基本數(shù)據(jù)類型,調(diào)用方法時(shí)在方法中將不能改變參數(shù)的值,這意味著只能使用它們。對(duì)象調(diào)用是指先調(diào)用對(duì)象,再調(diào)用對(duì)象的方法,這種方式可以修改允許存取的成員變量。所以,如果不想改變參數(shù)的值,可以采用傳值調(diào)用的方法。如果想改變參數(shù)的值,可采用對(duì)象調(diào)用的方法,間接修改參數(shù)的值。1.編寫一個(gè)傳值調(diào)用的程序程序功能要求:程序首先給整型變量x和y賦初值3,5,然后使用傳值調(diào)用方式調(diào)用方法對(duì)x和y做乘方并及輸出x和y的乘方值,最后輸出x和y得值。再將此方法給為對(duì)象調(diào)用加ref修飾查看輸出結(jié)果差異。參考代碼如下:publicclassPower{//publicvoidMyPower(refintx,refinty)publicvoidMyPower(intx,inty){x=1;y=2;Console.WriteLine("x={0},y={1}",x,y);Console.WriteLine("x*x={0},y*y=

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論