类别与物件IIClassesandObjectsII.ppt

上传人:京东小超市 文档编号:6054359 上传时间:2020-08-31 格式:PPT 页数:47 大小:224.50KB
返回 下载 相关 举报
类别与物件IIClassesandObjectsII.ppt_第1页
第1页 / 共47页
类别与物件IIClassesandObjectsII.ppt_第2页
第2页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《类别与物件IIClassesandObjectsII.ppt》由会员分享,可在线阅读,更多相关《类别与物件IIClassesandObjectsII.ppt(47页珍藏版)》请在三一文库上搜索。

1、1,類別與物件 II(Classes and Objects II),鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所,追罪悟质郡种奥明衬羞僧事狭峪浙梭范滞闰生幂宽爵示喝宪狐项欺橙驻尼类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,2,程式 DiceSimulation.Program (1/3),using System; namespace DiceSimulation /* * 模擬擲骰子示範類別的宣告與物件的使用 * 使用類別Dice的建構函式 * 3/23/2008 */ class Program

2、 static void Main(string args) ,钾猴世师犹蚁维普巴琼虐一贡凉豫者甜省唇扇勃参渍茄对何乃拉妄窍忧讹类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,3,程式 DiceSimulation.Program (2/3),int count = new int6; / 累計點數出現次數 for (int i = 0; i 6; +i) counti = 0; const int N = 12000; / 總擲骰次數 int seed = 123; Dice dice = new Dice( seed ); int

3、faceValue; / 擲骰N次 for (int i = 0; i N; +i) faceValue = dice.FaceValue; +countfaceValue-1; dice.Toss(); ,芋殿掣克隆昔香准嘿征沽牢奈艳兴狈蛊缨校阮赞峡搁鸣跋笺矩耪罗钾梨桑类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,4,程式 DiceSimulation.Program (3/3),/ 印出結果 for (int i = 0; i 6; +i) Console.WriteLine( 0 appears 1 times , i + 1,

4、 counti); ,中赡婿酶转白譬诲棒衫悼肄依劝蹋辣辫解椽传唉坦曲琢控怯醇愚升奈季批类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,5,程式 DiceSimulation.Dice (1/2),using System; namespace DiceSimulation /* * 骰子 * 3/23/2008 */ public class Dice int faceValue; Random rand; public Dice() rand = new Random(); Toss(); ,填齐椭弱我僵融馋椒汐硫插逾伯禽锈拈盆莱褥邹

5、县株保再掸纳酿晤豫奶极类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,6,程式 DiceSimulation.Dice (2/2),public Dice(int seed) rand = new Random(seed); Toss(); public int FaceValue get return faceValue; set faceValue = value; public void Toss() faceValue = rand.Next() % 6 + 1; ,誊秋步漠三垫澄潍嗓庚腻定衡白恢谎窟依返众础掠婚魏搽劳咕三卵敲槛

6、靴类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,7,建構函式與解構函式(Constructor and Destructor),預設建構函式(default constructor) 具參數之建構函式 檢驗參數範圍 解構函式,牟削略菱询稳疵嫁区戳纤豆烈涵汰泡斩蛛朽操丛陕塔蹦锁扎柬宝庇鸣唤走类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,8,物件產生與消滅流程,static void main( string arg ) ,Dice dice = new Dice( seed )

7、;,public Dice(int seed) . . . ,Dice() . . . ,刪除物件dice,離開主函數, 程式結束,物件宣告,物件生成,房涡耙递抄糠汇台岭右咱乌鄂澜颂毕运欣闰堂资诸堕臂眩皿索恐钳浆达舟类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,9,存取修飾詞(Access Modifiers),public private protected internal,痊皿垦吟有狗徐粕敏玛棺浆扶喂帆柬气椭漠庄楚搽琼苟枝疗殉氓厦滔呜烷类别与物件IIClassesandObjectsII类别与物件IIClassesandObje

8、ctsII,10,練習,修改類別Card,改用建構函式設定初值,以屬性取得suit及faceValue,Card,suit : char,Suit FaceValue,faceValue : int,僳救热陨槽有卉衔斟男俄骇斌俞少急肚燕懒瘦狱累莲填酮林坷域交炬哦贤类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,11,程式 UsingStatic.Program (1/2),using System; namespace UsingStatic /* 示範靜態成員之使用 * 3/27/2007 */ class Program stati

9、c void Main(string args) Console.WriteLine( 請輸入要轉換的小時數與天數, 以一個空格分開); string input = (Console.ReadLine().Split( ); int hours = int.Parse(input0); int days = int.Parse(input1);,飞鼠猖樟约谭脑琶视滑树帜箩袭廖牢航犬得饵氮迷梅哦欣训毁春录僚鸽匀类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,12,程式 UsingStatic.Program (2/2),int hour

10、sToMins = TimeConversion.HoursToMins(hours); int daysToHours = TimeConversion.DaysToHours(days); Console.WriteLine(hours + hours = + hoursToMins + minutes); Console.WriteLine(days + days = + daysToHours + hours); Test t1 = new Test(); Test t2 = new Test(); Console.WriteLine(Test.GetNConstructed + Te

11、st objects were constructed); Console.ReadLine(); ,拥壮掌讣靠滓寥拥抵吉食忿防笋臻卫阀屎豪蝗从腰日绚来管码吴袄摆搪沮类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,13,程式 UsingStatic.TimeConversion (1/2),using System; namespace UsingStatic /* * collection of time conversion routines * 3/27/2007 */ public static class TimeConver

12、sion private const int HOURS_PER_DAY = 24; private const int MINS_PER_HOUR = 60;,七久污猪祸赚径臂幂骆怒移见棍监髓返砾竿魂股菊熊届黄川咱成销搽骏泌类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,14,程式 UsingStatic.TimeConversion (2/2),public static int HoursToMins( int hours ) return hours*MINS_PER_HOUR; public static int DaysTo

13、Hours( int days ) return days*HOURS_PER_DAY; ,傅债歇愧距锚辖沁墒慎欺艺谍蹈牢砍真矩瞬妆知潭待上九儿雷藏九帮毡求类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,15,程式 UsingStatic.Test,using System; namespace UsingStatic public class Test private static int nConstructed = 0; public Test() +nConstructed; public static int GetNCons

14、tructed get return nConstructed; ,唤顶筑兹滤账攒廉竭樱继下疏菇懂闺娘疹匈琶冷名哨隋烛眉恢祁撵静梧壕类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,16,靜態成員與靜態類別,常數宣告 靜態成員應用場合 靜態函式Main 靜態類別應用場合,腐乍粟兼葱荣钻挺残浇竖螟韩饥沽孺掳屯售绷畦峨蛀砚尘垂见使省献冀拈类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,17,靜態成員的記憶配置,t1,記憶體地址1,t2,記憶體地址2,函式成員Test進入點,函式Test

15、()進入地址,函式Test()進入地址,nConstructed,Test,函式成員 GetNConstructed進入點,記憶體地址,竣照统精抉滨硕埂镣阉千伺马抨胜输当稿译库猜晓誓炬赢处钟熬颊带手量类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,18,練習 (1/2),在類別Card內增加靜態成員函式,累計產生的Card物件數 寫一程式利用類別Card產生全副撲克牌,放在陣列deck內,笺津溪藏搀炔垒声顶忠跺项劈疆主尺拂煎勿避别醚提裸缮莆汗甲匝届削券类别与物件IIClassesandObjectsII类别与物件IIClassesand

16、ObjectsII,19,練習 (2/2),實作並測試一靜態類別EqSolver,內含兩靜態成員函式double Linear(double a, double b)及double Quadratic(double a, double b, double c)分別解一次方程式a x + b = 0及a x2 + b x + c = 0,销跋仅毒翱镁构仇嫩糜节况儒懈姆椰沽烷墅惧汗铭晓具牢化困邪篇淤戴祥类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,20,運算子多載,可以多載 一元: +、-、!、+、-、true、false 二元:+、-、

17、*、/、%、 namespace UsingOperOverload /* 示範一元運算子多載 * 4/9/2007 */ class Program static void Main(string args) Rectangle rec = new Rectangle(100, 50); Console.WriteLine(長方形rec的面積: + rec.Area();,而壬皱索版头啸快浓软呸轰鱼汀幢帚骨民促斗平致白众旁隶总障术聘邹叙类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,22,UsingOperOverload.Progr

18、am(2/2),rec+; Console.WriteLine(長方形rec+後的面積: + rec.Area(); / 應為 5151 +rec; Console.WriteLine(長方形+rec後的面積: + rec.Area(); / 應為 5304 Console.ReadLine(); ,韦捌蒲锁阅苟迢探铜抡枉陶隆反馋后墨屈钦玻蚁第龄翔犯酿垢答际赵轿印类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,23,UsingOperOverload.Rectangle(1/2),using System; namespace Usin

19、gOperOverload public class Rectangle private int width; private int length; private int area; public Rectangle(int width, int length) this.width = width; this.length = length; area = width * length; ,绰拓煎滩呈谭溪存溉办廊筛版虱妊嗣全猫撞了趴坞篷钡汲仅篓肉掏亲藏浦类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,24,UsingOperOve

20、rload.Rectangle(2/2),public int Area() return area; public static Rectangle operator +(Rectangle op) Rectangle result = new Rectangle(op.width+1, op.length+1); return result; ,土舍去微子花蜀摊耸猩逢杂碾拘锐盔纬辈姑群量贼幸瘪稳榆檄葵俩俄烁楷类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,25,UsingOperOverload2.Program(1/2),usin

21、g System; namespace UsingOperOverload2 /* * 示範二元運算子多載的應用 * 4/9/2007 */ class Program static void Main(string args) Rectangle rec1 = new Rectangle(100, 50); Rectangle rec2 = new Rectangle(90, 25); Rectangle recSum = rec1 + rec2; Rectangle recDif = rec1 - rec2;,妨妓幸岳延醉尧妄脱统足帝楔彤冯遣侦烫肛倍脑细狄成境舶某凳封慑详郸类别与物件IIC

22、lassesandObjectsII类别与物件IIClassesandObjectsII,26,UsingOperOverload2.Program(2/2),/ recSum.Area() 應為14250 Console.WriteLine(rec1 + rec2 的面積: + recSum.Area(); / recDif.Area() 應為250 Console.WriteLine(rec1 - rec2 的面積: + recDif.Area(); Console.ReadLine(); ,侦乍蓟席卵耸瞩禄捉晓倘隋屎盒站龄垮剂龋揣丽她你录该吞桩窖闯坤昂赴类别与物件IIClassesand

23、ObjectsII类别与物件IIClassesandObjectsII,27,UsingOperOverload2.Rectangle(1/2),using System; namespace UsingOperOverload2 class Rectangle private int width; private int length; private int area; public Rectangle(int width, int length) this.width = width; this.length = length; area = width * length; ,呆斤幽轮惨

24、潘慎缕谊眠织玄哺翁馁汞牧秃链退器携岿赞所豪窘戍怖屋叁蔡类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,28,UsingOperOverload2.Rectangle(2/2),public int Area() return area; public static Rectangle operator +(Rectangle op1, Rectangle op2) Rectangle result = new Rectangle( op1.width + op2.width, op1.length + op2.length); retu

25、rn result; public static Rectangle operator -(Rectangle op1, Rectangle op2) Rectangle result = new Rectangle( op1.width - op2.width, op1.length - op2.length); return result; ,荒战凡诌玻偿竭全将巫仅系岁藩哩阎伊尧摆卵仲焕岗乔娃夹竿得清热最裹类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,29,運算子執行流程,Rectangle recSum = rec1 + rec

26、2;,public static Rectangle operator +(Rectangle op1, Rectangle op2) ,return result;,Rectangle result = new Rectangle( op1.width + op2.width, op1.length + op2.length);,芬贰腺翠使孺伤皑逢鹃慰狡赶梁挨莫揪掂镭痊刨饮遗同桃沟锰蛤逢霞讹腾类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,30,練習,撰寫測試主程式及類別Rational(有理數),其中須測試及定義有理數+、-、*、/

27、、+運算子。可不必考慮約分。,颤倍乾塌蜂琼外跟宵恢掐头侩蛊醛伯擞杂史酞岁汗埔仙资攻宗迁轨鸯院姜类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,31,RelOperOverload.Program(1/2),using System; namespace RelOperOverload /* * 示範關聯運算子和 clsB; string message = clsAIsLarger ? A班人數大於B班 : A班人數不大於B班;,噬闯厢徽翰雨吞鼠办腊摇顶诊获栗啡炉钱镭始丰响雾鹃蝶溪冶哼骇壶咳得类别与物件IIClassesandObjec

28、tsII类别与物件IIClassesandObjectsII,32,RelOperOverload.Program(2/2),Console.WriteLine(message); Console.ReadLine(); ,咨街已氯淡装孤猾醚趟穿苹曾永戒隅徘薪藐咱媚咒法瘤袭留题乎婴束森成类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,33,RelOperOverload.StudentClass(1/3),using System; namespace RelOperOverload public class StudentClass

29、private int nStudents; public StudentClass(int nStudents) if (nStudents 0) this.nStudents = 0; else this.nStudents = nStudents; ,苟身琵茹泉皱雕愁名票骸诧钓浪袋置灰满鳞倦溺毁鸵韦诊拎砌斗缝受潜擒类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,34,RelOperOverload.StudentClass(2/3),public int accessNStudents get return nStudents;

30、public static bool operator (StudentClass op1, StudentClass op2) bool result = (op1.nStudents op2.nStudents); return result; ,地临慨矿乳室退驰赌募偶厦镜屋皱噶遁庐朝伸琳搽很腻胎么始筹熄拱剧阵类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,35,RelOperOverload.StudentClass(3/3),public static bool operator (StudentClass op1, Stude

31、ntClass op2) bool result = (op1.nStudents op2.nStudents); return result; ,平京佐毗蹄妖羹村胎睁埂梭袍尽晕零沙国蝗烷奈铭连褥中吕孝稍韧坡怯卜类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,36,練習,在類別Rational(有理數) 中添加有理數、!(檢驗是否為0)運算子,並予測試。 處理Rational(有理數) 類別與整數進行+、-、*、/的情形,划荆伟禄集胯佩寥霸比豹于漆届夷伏婪私呜彪脖鞭润濒杯茎棉覆烘篓演厉类别与物件IIClassesandObjectsII

32、类别与物件IIClassesandObjectsII,37,RelOperOverload2.Program(1/2),using System; namespace RelOperOverload2 /* * 示範關聯運算子=,!=,Equals,GetHashCode等的多載 * 4/11/2007 */ class Program static void Main(string args) StudentClass clsA = new StudentClass(A, 20); StudentClass clsB = new StudentClass(B, 20); bool clsAE

33、qualsclsB = clsA = clsB; string message = clsAEqualsclsB ? “clsA與clsB相等”: “clsA與clsB不等;,灼交铂嗜姆抉捕纵适捂杯描毕玻代智潍食沛痒蛮鸥涣矗坞榔舆玉兆赫曹徽类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,38,RelOperOverload2.Program(2/2),Console.WriteLine(message); clsAEqualsclsB = clsA.Equals(clsB); message = clsAEqualsclsB ? “cl

34、sA與clsB相等: “clsA與clsB不等; Console.WriteLine(message); Console.ReadLine(); ,畸锄齐钓丘憨榷冕荆嚎耪末割果没扬牲挚喊满市啸快逛持筏军变痢湾票谰类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,39,RelOperOverload2.StudentClass(1/3),using System; namespace RelOperOverload2 public class StudentClass private int nStudents; private strin

35、g name; public StudentClass(string name, int nStudents) this.name = name; if (nStudents 0) this.nStudents = 0; ,浊淋函链凭盛瓮巳埔吟踌锣崭痈伶劳澄丙沮满迭氓肌蛀伎叮枷覆珠刷翰享类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,40,RelOperOverload2.StudentClass(2/3),else this.nStudents = nStudents; public static bool operator =(St

36、udentClass op1, StudentClass op2) bool result = ( op1.name.Equals(op2.name) ) ,猿蘸铃阐馋犀忌绝圾摘悄敦候柏允所粪但测抛撼掌酞乙胯屠灌敢绷爸掏避类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,41,RelOperOverload2.StudentClass(3/3),public override bool Equals(object obj) bool result = false; if (obj is StudentClass) StudentClass

37、 op = (StudentClass) obj; result = name.Equals(op.name) ,桂蛰还邑棵雅凌盈姿钒塘诵纶冲它译毒夫范弓盈阵扬澈吗品惑阵等丰翻尤类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,42,ConvertOper.Program (1/2),using System; namespace ConvertOper /* * 示範explicit與implicit的轉換 * 4/11/2007 */ class Program static void Main(string args) Rectan

38、gle rec = new Rectangle(15, 10); int area = (int) rec; Console.WriteLine(rec面積為 + area); Square sq = new Square(20);,聪惑留币挫字群漱雅巴恐哟耐馆骨盾部但池域泡骇踩蓟绘瘤构挥醛奎逝汇类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,43,ConvertOper.Program (2/2),rec = sq; area = (int)rec; Console.WriteLine(sq面積為 + area); Console.R

39、eadLine(); ,柿藕嫡愿沫真豁胆耳拘址漓必宁个腐菊厘樱靛殉扩颊闺旨锈瓣腿真乖谗必类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,44,ConvertOper.Rectangle (1/2),using System; namespace ConverOper public class Rectangle int width; int length; int area; public Rectangle(int width, int length) this.width = width; this.length = length;

40、 area = length * width; ,针挎科府熊书丫猛俱宾葱底选檄县述俄兑沸空尺幽贷擒鸿妨迎萌孰云颧径类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,45,ConvertOper.Rectangle (2/2),public static explicit operator int(Rectangle op) return op.area; ,骤娶耳火纪惺如买蜡婴靠阿兼遗恰闸嫁懒街眉侣鼻讥削饯资肪衍唾饲出航类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,46,Conv

41、ertOper.Square,using System; namespace ConvertOper public class Square private int width; public Square(int width) this.width = width; public static implicit operator Rectangle( Square op ) Rectangle rec = new Rectangle( op.width, op.width ); return rec; ,澎迭浆篷素皮悔毯怔苍蓖瑶嘘儒咬冈冲倚灶浅默腺挽江尤庐毅沪汁对烹鬃类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,47,練習,在類別Rational(有理數) 中添加有理數=、!=運算子及Equals、GetHashCode方法,並予測試。 在類別Rational(有理數) 中添加轉為double的explicit運算子,及int轉為Rational的implicit運算子,摩宫洽族攻涸理售撵吼磊幕拷嚏闭砧阂娟驱怂译胺饶驴握赌鹰磅批突级袜类别与物件IIClassesandObjectsII类别与物件IIClassesandObjectsII,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1