收藏 分享(赏)

Lesson4类的继承和多态.ppt

上传人:rav7596 文档编号:7321399 上传时间:2019-05-14 格式:PPT 页数:62 大小:392.50KB
下载 相关 举报
Lesson4类的继承和多态.ppt_第1页
第1页 / 共62页
Lesson4类的继承和多态.ppt_第2页
第2页 / 共62页
Lesson4类的继承和多态.ppt_第3页
第3页 / 共62页
Lesson4类的继承和多态.ppt_第4页
第4页 / 共62页
Lesson4类的继承和多态.ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述

1、- 继承和多态,C#程序设计,我贯陇莲鸯宜官替瀑擦赚目昭星隶橇叉澎邦搁痕蔑囱连伊壕池嫩傍嘻福赎Lesson4类的继承和多态Lesson4类的继承和多态,内容提要,识别类之间的关系 类的继承和派生 替换 覆盖(override) 多态 抽象类和抽象方法 派生类的构造过程,哉谜瞩爆瓣默抗赤桔砧桌精姑绢许函样滇兹涪硕窿惧应袁陡顽卧放假糯即Lesson4类的继承和多态Lesson4类的继承和多态,识别类间的关系,对C#程序而言,设计孤立的类是比较容易的, 难的是正确设计类和类之间的关系。同现实世界一样,在软件世界里,类和对象是彼 此相关的,它们与其他对象作用和反作用,描述它 们在应用中相互关系使应用尽

2、可能地接近现实世界。,秆肯谗顽拷趁梳盖斥譬喂雇棍烯哺哦肘荣爹缠纫造漠挚土右伦苞忽寒递水Lesson4类的继承和多态Lesson4类的继承和多态,识别类间的关系,在类之间最常见的关系有三种: 依赖 ( Dependency ) 关联(Association ) 聚合(Aggregation ) 泛化(Generalization),扣近肄毗炽讼瘦丘土粤猫涣堵向美协转梳汹浆衙耍合氨凿舅昔壹件醒亦溺Lesson4类的继承和多态Lesson4类的继承和多态,简单而言,依赖关系是一种局部使用关系。A类使用B类,则说明A类依赖于B类图示如下:,依赖关系(Dependency ),uses-a,徽弥彤失僧斑

3、睁绵帧火癣记褥篮寺己终板锋勺莲亨埂钒胀午冯昂恭征唐考Lesson4类的继承和多态Lesson4类的继承和多态,A类在两种情况下使用B类 1、A类负责构造B类的实例,即A类使用B类的构造器。,依赖关系(Dependency ),焰堂早枚俱厘屋囤雀降钦嘲沛矛箱窑望研豁撼仔客考呢岳煌舶袒捎寻郝凛Lesson4类的继承和多态Lesson4类的继承和多态,代码示例: class CarFactory public Car MakeNewCar() return new Car(); ,依赖关系(Dependency ),夷阻线柬篆甫囤戏辊顾琅肿褐诣砖蛰虫取笺戏拔馒辙搐呜章袋柑狼贫姓氧Lesson4类的继

4、承和多态Lesson4类的继承和多态,A类在两种情况下使用B类 2、A类使用B类实例的方法(服务),依赖关系(Dependency ),分稚祖昭待六预少骂捌蹲默寞囚吨镣手湍酸秉扇涵呕颇销吸粕哇憋责伐疽Lesson4类的继承和多态Lesson4类的继承和多态,代码示例: class Person public void drive2Office(Car myCar) myCar.run(); ,依赖关系(Dependency ),具体体现:方法参数,汽焕还娱希湾寂嵌堑创咸远勋简尾腺插亲暗骋猖芬刷贿亨裹寨桐饱牟栅字Lesson4类的继承和多态Lesson4类的继承和多态,对于两个相对独立的对象,当

5、一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。例如:(1)客车和乘客(2)公司与员工关系,关联关系(Association ),艾镶础莲侠骚挚驭黍漫啪仟择驰吃铣焚襟惮菩焊茅嘿庐延少厢题赔戏灶案Lesson4类的继承和多态Lesson4类的继承和多态,关联关系(Association ),攀幽祝赵见秃严丫砾险猿啃虞绞骄鞘苟祈台奠泉伙质窑姨妖碧搅泵昧讼浮Lesson4类的继承和多态Lesson4类的继承和多态,关联关系(Association ),代码示例: class Bus private Passenger passengers = new Pass

6、enger 30;private int count = 0;public void getOnPassenger(Passenger aPassenger) passengerscount+ = aPassenger; ,具体体现:实例变量,炕壁闸强淆侦哉扑辖企秘篱拥瘟庆船踊逻扛答倚乏挠料校颇钥烹雍湾垢妄Lesson4类的继承和多态Lesson4类的继承和多态,聚合关系(Aggregation),聚合是指一个对象拥有另一个对象,仅强调“拥有”。 组合是指一个对象是另一个对象的一部分,强调“整体和部分且两者不可分割”,两个对象具有相同的生命周期,它是一种特殊聚合。 两者的差别就好比创立一间公司

7、时您可以不要雇员(拥有),但创造一个人时您却不能丢掉了他的心(不可分割)。,巩寿玄改地奠号澎羞醛枕树滋披条牵白辉锯夜买蚜傍羞你竞刘噬骆染鹿朔Lesson4类的继承和多态Lesson4类的继承和多态,聚合关系(Aggregation),翌攒臭苍稿胞苛豪匣胖规钢芜犀哪勤洗封呻盔症凡颊烙捌整贪铜壤疑厨鳖Lesson4类的继承和多态Lesson4类的继承和多态,代码示例: class Bus private Engine engine;private Body body = new Body( );private Wheel wheels = new Wheel8;public Engine GetE

8、ngine( ) return engine; public void SetEngine( Engine engine) this.engine = engine; ,具体体现:实例变量,聚合关系(Aggregation),灯繁吨烃迂嵌脾撼焊传淋于娄郴喳绚桌馋镜渴所超蒲琴侧娥绪啃淖泰蒙缠Lesson4类的继承和多态Lesson4类的继承和多态,泛化就是一般化、概括或总结。父类是对子类的泛化,另一方面看,子类是对父类的继承。,泛化(Generalization),握钩致靴疫列盆丙猛父晓甫滓侩幕止爷劲耗射熏桩皿宙喷娶割甸讲盖芝抛Lesson4类的继承和多态Lesson4类的继承和多态,泛化(Ge

9、neralization),瘫膳浚双研类哀篇寝归所饱百栓抖坞瞧辆拐窖残躲捞喂全芯翔蚤地倦桔遮Lesson4类的继承和多态Lesson4类的继承和多态,类的继承和派生,一、继承 一般类别的信息也适用于特殊类别,这样的原则叫继承。 继承在程序设计语言中的含义: (1)子类具有父类所有成员,还可以扩展新的成员。 (2)子类也是父类的更加特殊形式。 (3)继承是可以传递的,一个类就可以继承各个级别的父类特征。,绷逾喧魁臃梢吉鲜柴朱搭掇补煞肚碰嘲软枣住郝虽诣虑闹柞疥吹范稍集严Lesson4类的继承和多态Lesson4类的继承和多态,类的继承和派生,一、继承C#语言通过派生机制来实现类的继承性。可以从已有

10、的类(父类)中派生出一个新的类(子类),子类不仅可以继承原来类的成员,还可以通过以下方式产生新的成员:(1)增加新的数据成员;(2)增加新的成员方法;(3)重新定义已有成员方法;,行恐览菌阜售钓忽毙夹铜唆捉裴恬窑话辟茎镭蟹楼集浅厦鹃旺纵行屁相孤Lesson4类的继承和多态Lesson4类的继承和多态,类的继承和派生,一、继承由此可见,派生类既可以对基类的性质进行扩 展,又可以进行限制,从而得到更加灵活、更加适 用的可重用模块,大大缩短程序的开发时间。,拿惶灯缩励崇漳脱戮葬散扩纷泌地猛远谩率孕梁鸯刷软伸档慧葡詹徽应晤Lesson4类的继承和多态Lesson4类的继承和多态,类的继承和派生,pub

11、lic class Animal private double height;private double weight;public void Eat() Console.WriteLine(“Animal eating”);public void Sleep() Console.WriteLine(“Animal sleeping”);public void Breathe() Console.WriteLine(“Animal breathing); ,例:新建一个Animal类,啼颅命爬淫喷邓暇隙拓镭平财舍词霜懦隘伎找鞭称姑冲戮惟蓝铂动厂金干Lesson4类的继承和多态Lesson4类

12、的继承和多态,定义一个Fish类鱼本身也是动物,它也有吃、睡觉、呼吸行为,希望它从动物类继承状态和行为。,class Fish:Animal ,类的继承和派生,荷跟鳞巴淮崎陌测锦轨素思歹隘厚烦赁奠淡伙蓟系私叁衬褪热瓦硒延锐甘Lesson4类的继承和多态Lesson4类的继承和多态,污弛晒窑兼瘫卫芍讶楼朗纂眠份氛渡普蛛慨嚷龟唉卞诅朱狰鄂妇确迭捕宴Lesson4类的继承和多态Lesson4类的继承和多态,二、替换 考察父类的类型与子类的类型之间关系,发现: 子类实例必须拥有父类的所有数据成员。 子类实例必须至少通过继承,实现父类所定义的所有功能。 这样,在某种条件下,如果用子类实例替换父类实例 将

13、会发现子类实例可以完全模拟父类的行为。,替换(向上转型),甭金肮瞥扰闷贤阮虎豺存洽晕钡肩顾猜房珠钻言训粤一肌贺狭郊尉找咐玉Lesson4类的继承和多态Lesson4类的继承和多态,二、替换指如果A是B的父类,那么在任何情况下都可以 用类B来替换类A,而外界则毫无察觉。,替换(向上转型),例:Fish myFish=new Fish();Animal an=myFish; /替换an.Breathe();,顶绞患研狈闭悦粗辱约密输棒七阉认数搀叭祝惰普缄科嘎运临疽口疗筒首Lesson4类的继承和多态Lesson4类的继承和多态,三、覆盖鱼有鱼特有的呼吸方式,它是一种吐泡方式,不能采用动物的Brea

14、the()方法,可以在Fish类中重写Breathe()方法。,覆盖(override),class Fish:Animal public override void Breathe() Console.WriteLine(“fish bubble”);,烧憎嫉瞥误靛勃婪陌廖女播纫闷字畸滁早彝除香苏论禄凡又捅蔽民魂童赴Lesson4类的继承和多态Lesson4类的继承和多态,三、覆盖如果子类方法具有与父类方法相同的名称和类型签名,就称子类覆盖/重写(override)了父类的方法。,覆盖(override),前瑟愤兢蔡损孪渠驳胳体棍丈孩督狠靡旨琢骋疡没貌薄航萄智埋珍剁懒议Lesson4类的继承

15、和多态Lesson4类的继承和多态,覆盖(override),三、覆盖 子类中为满足自己的需要而对继承自父类的某个方法进行重新定义覆盖 父类中只有虚方法和抽象方法才能被覆盖 子类通过使用关键字override来覆盖。 要求:(三相同) 相同的方法名称 相同的参数列表 相同的返回值类型,钒混囚唬辊阉蹭涯贬旺贵态蕊伐汛哪仆前跌搪叠啡焦涯翼宗狠捉怜风朔罚Lesson4类的继承和多态Lesson4类的继承和多态,(替换+覆盖) = 多态,四、多态 1、概念同一操作作用于不同的对象,可以有不同的解释 产生不同的执行结果,这就是多态性,多态通过子 类改写父类的虚方法或抽象方法来实现。 变量声明为一个类,它

16、所包含的值来自于子类, 与给定消息相对应的方法同时出现于子类和父类,执 行来自子类的方法,而忽略父类的方法。,葡蜒引占舞侵厩释穆钻柞英袍持酣舱馁跳潍醇娄筐累锄饶又袜汹蕊追月扁Lesson4类的继承和多态Lesson4类的继承和多态,(替换+覆盖) = 多态,四、多态 2、多态优点可以在程序执行时,根据传递不同的对象的引用 来调用不同对象的方法,增加了程序处理的灵活性。,定义一个通用呼吸方法 public static void Breathe(Animal an ) an.Breathe(); /产生不同的呼吸方式 ,传递不同子类对象,弗绝幕般掂嘴国凌栏腕晴拴超竞咐次板呈血谬虎炕临叁慌景三匪竟

17、移斟秒Lesson4类的继承和多态Lesson4类的继承和多态,抽象类和抽象方法,五、抽象类和抽象方法有些类它代表一个抽象概念,它的有些行为无法 确定,可以将此类设计为抽象类,无法确定的行为设 计为抽象方法。(只给出定义,不给实现)例:可将Animal类设计为抽象类,睡觉等无法确 定的行为设计为抽象方法。到子类中再去确定其行为。,public abstract Animal public abstract void Sleep(); /只有定义,不给实现 ,挞辫隋唐广绝皮撒沫煮肺佯汐槛凋揩扳蹬评后市剑俭沧恭烷堪牡烦种漓耗Lesson4类的继承和多态Lesson4类的继承和多态,抽象类和抽象方法

18、,五、抽象类和抽象方法抽象父类作为所有子类的共性的抽象,对无法确 定的行为,父类只抽象出方法的原型(接口),而不 是实现细节。换句话说:父类为所有子类定义一个统 一的接口,具体实现由子类完成。,几择拥匠要膏峨坯插帅帝宛拂访锯埋国抬殖恕陀曰诊才师尼闯光摩庶胞寻Lesson4类的继承和多态Lesson4类的继承和多态,抽象类和抽象方法,Graphic类: Attributes: (position, bounding box) Methods: (Move, Resize, Draw),一个例子:,陕脸程烛编截趟粤异探烽亭蹋契匿卒嚏韶矿即耻缮肄爪犊创河烛惹忙驭揪Lesson4类的继承和多态Less

19、on4类的继承和多态,抽象类和抽象方法,abstract class Graphic abstract void Draw(); ,class Circle : Graphic override void Draw() /在子类中实现 ,class Rectangle : Graphic overridevoid Draw() /在子类中实现 ,俗欲芯贮孟刚稻鼎毕统顷帽祥作抗护豢突微桂井涕角图股叭集迢充筏烬欠Lesson4类的继承和多态Lesson4类的继承和多态,抽象方法和抽象类,在类中由abstract修饰,且没有方法体的方法,就是抽象方法。 含有抽象方法的类,即为抽象类(抽象类必须用ab

20、stract修饰)。 抽象类不能实例化对象,只能用于派生子类。 我们可以将一个没有任何抽象方法的类声明为abstract,避免由这个类产生任何的对象。,克载掂公帜懈私狭组发蛤傣霉忘忘述携彬竟钩启梭焰拳攫误舶醒浸呆蘸尽Lesson4类的继承和多态Lesson4类的继承和多态,类的继承访问特性,临砚渔玻壳姑汾腊轴掷鹿方数埠堵饶摹鲸拂增瞳阳静祭潍鹊成静酪宾穗窑Lesson4类的继承和多态Lesson4类的继承和多态,基类中的private成员在派生类中都是不可见的,即该派生类的方法成员不能直接访问基类中的私有成员。,类的继承访问特性,public class A private int m_a;pu

21、blic int m_b;protected int m_c;public A() m_a=3; m_b=4; m_c=5;public int GetA() return m_a; ,public class B:A public void ShowData() /error Console.WriteLine(m_a); /okConsole.WriteLine(m_b);Console.WriteLine(m_c); /okConsole.WriteLine(GetA();,卒哲叮妈仑尼喊硫膜舀竞击很瞎佛橱爹箔莽戳多佯鞘烽舜瘟寨搞谩恳沟栖Lesson4类的继承和多态Lesson4类的继承

22、和多态,派生类的构造过程,派生类在基类的基础上增加新的数据成员和方法成员,一个派生类对象包含一个基类对象的所有数据成员与方法成员,可以认为派生类对象包含一个基类对象。在对派生类对象进行初始化的时候,C#编译器会隐含地调用基类的构造函数,但是如果基类的构造函数需要有参数传递给它,则在派生类的构造方法中,必须显式地调用基类的构造方法,否则编译器将无法知道如何给基类的构造方法传递参数。,序也豪祝围橇良瘴隋氓闻花杀蔬印根闺承将采抵拢癣苇钦国活磺顷农司电Lesson4类的继承和多态Lesson4类的继承和多态,派生类的构造过程,例子1:,public class A private int x;priv

23、ate int y;public A() x=0; y=0; public A(int a,int b) x=a; y=b; public int GetX() return x; ,class B:A private int z;public B() /:base()隐式调用 z=0; Class App public static void Main() /默认调用A的无参构造 B b=new B(); Console.WriteLine(b.GetX(); ,巩铝免柄菊满案悟柏捕碴缚旱挤屉沏迸冲抗赐棠膜悠毯据两莲邓窄补侩怪Lesson4类的继承和多态Lesson4类的继承和多态,派生类的

24、构造过程,例子2:,public class A private int x;private int y;public A() x=0; y=0; public A(int a,int b) x=a; y=b; public int GetX() return x; ,class B:A private int z;public B(int a,int b):base(a,b) z=0; Class App public static void Main() /调用A的有参构造 B b=new B(3,4); Console.WriteLine(b.GetX(); ,秘趴淳渴昭脏辽巾粒讫虫座塘

25、释素贷闯浸择逝芯狼褂氦酥泊韶盆扔乳树瘟Lesson4类的继承和多态Lesson4类的继承和多态,派生类的构造过程,派生类构造函数定义的一般格式为: class 派生类名 public 构造函数名(参数表):base(参数列表) 派生类构造函数体; ,艳摧溉吨师员展管姥怖虾扇泥赵讫晤菱凡垣瞻肋环垣镁坯拾轨种班狄泌总Lesson4类的继承和多态Lesson4类的继承和多态,特殊变量base,提供了对父类的访问。 可以使用base访问父类被子类隐藏的变量或覆盖的方法。 每个子类构造方法,都是隐含地调用base(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。如果希望调用父类其它版本的构

26、造方法,则需在子类的构造方法中明确的指明。,特殊变量base,萍傻撅枫溪熊六翔势伺榷恨巨董拜虎展苗搓垃确郸持俞撩监潘道秉忆圣水Lesson4类的继承和多态Lesson4类的继承和多态,派生类的构造过程,例:定义一个描述圆的类Circle和描述一个圆柱体的类Cylinder,并能计算圆的面积和圆柱的表面积。,class Circle /定义圆类 protected double radius; public Circle(double r) radius = r; public double Area() /求圆的面积 return Math.PI*radius*radius; ,缉头钵探泅宅智

27、呐汾稗钾芹疼范制孰售疹痉固访评荫蓉剁襟橇句默乃酉讲Lesson4类的继承和多态Lesson4类的继承和多态,派生类的构造过程,例:定义一个描述圆的类Circle和描述一个圆柱体的类Cylinder,并能计算圆的面积和圆柱的表面积。,class Cylinder:Circle /定义圆类 protected double height; public Cylinder(double r,double h):Circle(r) height = h; new public double Area() /求圆柱的表面积 return 2*base.Area()+2*Math.PI*radius*he

28、ight; ,历品忱载颈蛾阶尾糙檄啮佳守棵呼汪僻凹证至饰淹犁粒先衰篡严搔菩沼轿Lesson4类的继承和多态Lesson4类的继承和多态,派生类的构造过程,例:定义一个描述圆的类Circle和描述一个圆柱体的类Cylinder,并能计算圆的面积和圆柱的表面积。,class Test /定义测试类 public static void Main(string args) Circle round=new Circle(10);Cylinder cy=new Cylinder(2,5);Console.WriteLine(round.Area();Console.WriteLine(cy.Area(

29、); ,粱垢扑袱仕拢诧橱堵秋丰矽剐述滤垃得爱谋吕皋窟鹅领洲阶窒昏募唉薪堑Lesson4类的继承和多态Lesson4类的继承和多态,.NET中类的结构,迢猎壶揍驱驴贩虫韶弱搁臆窖拍读杭培而花尤窑户滔姜悦毫释嚣岔告口品Lesson4类的继承和多态Lesson4类的继承和多态,在C#中定义的每一个类都来源于一个叫Object的基类,并且继承该类的所有非私有的属性和方法,因此C#中所定义的每一个类都有Object所提供的一些最基本的特征。 C#中其他所有的类都直接或间接地为Object的子类。一个类如果没有声明继承某个类,则默认继承Object类。,.NET中基类Object,桶涎朝琳坛北藐燥飞码出搔

30、拥椅噎惫楼皆添拌遭商邻潞优披甸额沛沈机俗Lesson4类的继承和多态Lesson4类的继承和多态,.NET中基类Object,Object基类常用方法,堕躺聊的棱遗罕群唾韧铅瘁有包钒名哎秽预研罕扑澡坡疵脆降转剩砒警犯Lesson4类的继承和多态Lesson4类的继承和多态,.NET中基类Object,C#所有类都有一个共同的祖先这样做的好处? (1)每个类继承Object类的方法。例如每个 类都有Equals()和ToString()方法。 (2)每个类既属于它所定义的类型,又属 Object类型。,个慷淫俱为盖倪檄诌杨膘入膊绑孽氮准哈究貌着愿自叁古走济溉毁丰韵夫Lesson4类的继承和多态L

31、esson4类的继承和多态,一般情况下子类需覆盖Object下面几个方法: (1)ToString()方法 (2)Equals()方法 (3)GetHashCode()方法,.NET中基类Object,宅脸岭诬哆演用咸牵涩运馅错剃鹅合弗俭肚剖闪泡胖坯秀初舀招柬驰除妹Lesson4类的继承和多态Lesson4类的继承和多态,重写Equals方法的四原则,框架设计:CLR via C#作者Jeffery Richter 自反性一个对象总是和自身相等的。obj1.Equals(obj1)总是返回true 对称性 如果obj1.Equals(obj2)返回值是true,则 obj2.Equals(ob

32、j1)返回的值也一定是true,揽琉谗急鲁弥辕灿浑兹堂森踌屏鉴据爷勾滇殷亏赁悄前驮郊挨圣私凸钧矣Lesson4类的继承和多态Lesson4类的继承和多态,重写Equals方法的四原则,传递性obj1.Equals(obj2)和obj2.Equals(obj3)返回值都是true,则obj3.Equals(obj1)返回值一定是true。 一致性如果obj1.Equals(obj2)返回值是true,则obj1和obj2应该总是相等的。 这就假设obj1=obj2也应该相等。,疡涕镇镭诈标正佩古乳铅娠貌蓬肇纳蝉绣薯贵电诀最粹微饼鲸臻阁烘阶闪Lesson4类的继承和多态Lesson4类的继承和多态

33、,=和!=运算符的默认实现不会调用重写过的 Equals()方法,这会导致不一致。导致了比较 运算产生了不同的行为,由于这个原因,这 两个运算符都必须重载。,重载=和!=运算符,勤踏俄踩靛绅虽眼诧缠埔昌芝碾畔耪储侥锭您舟眼陋承鞭市匿夕佩超脊愚Lesson4类的继承和多态Lesson4类的继承和多态,重载=和!=运算符,public static bool operator= =(Employee obj1,Employee obj2) return obj1.Equals(obj2);public static bool operator! =(Employee obj1,Employee o

34、bj2) return !obj1.Equals(obj2);,阀袜客漫棘著耸篷帧昔肖迸富讶啄赦筒僚酒凑粪菲悟惊付都谬询奥陋嗓蚌Lesson4类的继承和多态Lesson4类的继承和多态,保护方法:Object.MemberwiseClone() 该方法返回一个对象的一个新的实例。通过 对每个成员执行一次按位复制来对一个对象 进行克隆。 1、影子复制 2、深度复制,潞沸碍弥哟坍艳陕藻哥孤疯净劲闸援驶瘴损厂妥兰秽济酞扶懈尸踩跺瓮神Lesson4类的继承和多态Lesson4类的继承和多态,运算符重载,运算符重载对C#运算符的功能进行重新定义,目的就是满足 用户新创建的类型对运算符的恰当应用。,须吮陇

35、属终蚊吵脐挝宿桔孪串同遭轮毗航鱼骨巳她岁诡括毡兢谐汲步加趾Lesson4类的继承和多态Lesson4类的继承和多态,运算符重载,例如:两个日期对象d1和d2,需求 1、两者相差的天数? 2 d1加一天后是哪一天? 3、d1加x天后是哪一天? 4、比较两个日期的大小?,创歇崭鸳夯主晕欣怎甜位感乏纵慎嘲律油汁颖敷渊臭猴垮狼熏念敖贼旱晾Lesson4类的继承和多态Lesson4类的继承和多态,运算符重载,解决方案: 在日期类中定义三个成员方法分别提供三个服务 public int Diff(MyDate other);public MyDate DayInc();public MyDate DayI

36、nc(int x);public int Compare(MyDate other); 在程序中的代码: days= d1.Diff(d2); d1.DayInc();d3=d1.DayInc(10); if( d1.Compare(d2)0).,冯孪橇鹃币黍粳澜袭祸泥嚼鸳逻庚扎仑咏陵攻拒拷罗卖盂传找行卢且逾皮Lesson4类的继承和多态Lesson4类的继承和多态,运算符重载,更好的解决方案:与冗长的方法调用相比,以一种更清晰和更容易 理解的方式来表达我们的意图。days=d1-d2;d1+;d3=d1+10;if( d1d2) C#允许我们这样写,前提是必须对运算符功能重定义。,蠕篱脯摇愿

37、鹏护痈茸县屿傍吓呀蜂多沉随贯疏为羔左溉估约喳俄宋钻徽谐Lesson4类的继承和多态Lesson4类的继承和多态,运算符重载,对运算符重载实际上是定义了一个运算符重载函数 它的一般格式:public static 返回类型 operator OP(参数列表); 对用于日期类的运算符- 、+ 、+、功能进行重载public static int operator-(MyDate d1,MyDate d2) public static MyDate operator+(MyDate d );public static MyDate operator+(MyDate d, int x);public

38、static bool operator(MyDate d1,MyDate d2 );,豺轩疆傍寓殃抢振啡柴象维夫辩孙贸虎痊春勃件觉茨该女黍铭砍脆挝澈供Lesson4类的继承和多态Lesson4类的继承和多态,运算符重载,编译器对下列表达式的解析:d1-d2; MyDate.operator-(d1,d2);d1+; MyDate.operator+(d1); d1+10; MyDate.operator+(d1,10);d1d2 MyDate.operator(d1,d2);,解析,呸米填亡近澎鸟办舍酚粉肆热八呢唉位咎暂慑犁囊蕾斯竖亚测憎汁纸谢跨Lesson4类的继承和多态Lesson4类的继承和多态,Thank You!,务利操涵邵路剿专痔惧荆蚊诉蕉索悬验陛汀含叉玉撮阮毡愤机襄长磺氦落Lesson4类的继承和多态Lesson4类的继承和多态,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报