面向对象的C语言课件

PPT
  • 阅读 44 次
  • 下载 0 次
  • 页数 69 页
  • 大小 290.840 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
面向对象的C语言课件
可在后台配置第一页与第二页中间广告代码
面向对象的C语言课件
可在后台配置第二页与第三页中间广告代码
面向对象的C语言课件
可在后台配置第三页与第四页中间广告代码
面向对象的C语言课件
面向对象的C语言课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 69
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】面向对象的C语言课件.pptx,共(69)页,290.840 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44682.html

以下为本文档部分文字说明:

面向对象的C语言课件3.1类、域、方法定义类中的域和方法classPerson{publicstringname;publicintage;publicvoidsayHello(){Console.WriteLine("Hello!M

ynameis"+name);}publicstringgetInfo(){return"Name:"+name+",Age:"+age;}}构造方法•(1)构造方法的方法名与类名相同。•(2)构造方法没有返回类型,也不能写void。•(3)构造方法的主要作

用是完成对象的初始化工作。•(4)构造方法一般不能显式地直接调用,而是用new来调用。缺省构造方法•publicPerson(){}析构方法•classPerson{•……•~Person(){•……•}•}对象的

创建•Personp=newPerson(“Liming”,20);namepage对象的使用•Console.WriteLine(p.name);•p.sayHello();方法的重载,签名publicvoidsayHello(){Console.Wri

teLine("Hello!Mynameis"+name);}publicvoidsayHello(Personanother){Console.WriteLine("Hello,"+another.name+"!Mynameis

"+name);}OverloadingTest.cs使用thispublicPerson(intage,stringname){this.age=age;this.name=name;}publicPerson():this(0,""){//构造方法的其他语句;}应用示例:银行系统•系统

中有几类对象?Account,Bank,ATM•每个类中有什么域、方法?注:可在vs中,插入“类关系图”3.2属性、索引使用属性、索引的示例•使用属性button1.Text–button1.Text=“说你好”;•含义相当于button1.SetText(“说你好”);–Str

ings=button1.Text;•含义相当于s=button1.GetText();•使用属性strings=“abcde”;–求出长度:s.Length•含义上相当于s.GetLength();•使用索引s

trings=“abcde”;–求出第0个字符:s[0]•含义上相当于s.Get(0)privatestringmyName;publicstringName{get{returnmyName;}set{myName=value;}}

在C#新版中可简写为publicstringName{set;get;}对属性进行访问•Personp=newPerson();•p.Name=“LiMing”;•Console.WriteLine(p.Name);•编译

器产生的方法是:•voidset_Name(stringvalue);•stringget_Name();PersonProperty.cs属性与域的比较•(1)属性可以实现只读或只写,而域不能。•(2)属性的set方法可以对

用户指定的值(value),进行有效性检查,从而保证只有正确的状态才会得到设置,而域不能。•(3)属性的get方法不仅可以返回域变量的值,还可以返回一些经过计算或处理过的数据,如上例中的只读属性Info,它返回的由Name及Age组合过的字符串。•(4)由于属性在实现时,实际上是方法,所以可以具有

方法的一些优点,如可以定义抽象属性等等。索引(Indexer)修饰符类型名this[参数列表]{set{}get{}}使用索引•对象名[参数]•编译器自动产生两个方法,以供调用:•Tget_Item(P);

•voidset_Item(P,Tvalue);IndexerRecord.cs属性与索引的比较属性索引通过名称标识通过参数列表进行标识通过简单名称来访问通过[]运算符来访问可以用static修饰不能用static修饰属性

的get访问器没有参数索引的get访问器具有与索引相同的参数列表属性的set访问器包含隐式value参数除了value参数外,索引的set访问器还具有与索引相同的参数列表IndexerBitArray.cs3.3类的继承使用继承的示例•我们定义的

窗体–publicclassForm1:System.Windows.Forms.Form继承(inheritance)•子类subclass、父类baseclass•单继承•所有的类都是通过直接或间接地继承obj

ect(即System.Object)得到的。classSubClass:BaseClass{……}示例classStudent:Person{//…..}继承•子类自动地从父类那里继承所有域、方法、属性、索引等成员作为自己的

成员。•除了继承父类的成员外,子类还可以添加新的成员,还可以隐藏或修改父类的成员。域的继承、添加与隐藏classA{publicinta;}classB:A{newpublicinta;}方法的继承、添加•方法的继承•方法的添加与父类同名的方法•一是

定义同名、但参数列表(签名)与父类不同的方法,这称为对父类方法的重载(Overloading)•二是定义同名且参数列表也与父类相同的方法,这称为新增加一种方法,用new表示•三是定义同名且参数列表也与父类相同的方法,而且父类的方法用了abstract或virtual进行了修饰,子类的

同名方法用了override进行了修饰,这称为虚方法的覆盖(Overriding)。InheritFieldMethod.cs使用basevoidsayHello(){base.sayHello();Console.WriteLine("Myschoolis"+school);}Stu

dent(stringname,intage,stringschool):base(name,age){this.school=school;}父类与子类的转换Personp1=newPerson();Personp2=new

Student();Students1=newStudent();Students2=newStudent();p1=s1;//可以,因为Person类型的变量可以引用Student对象s2=p1;//不行,因为会

产生编译错误s2=(Student)p1;//编译时可以通过,运行时则会出现类型不能转换的异常s2=(Student)p2;//正确,因为p2引用的正好是Student对象实例as运算符•如果不能转换,则值为null–Students3=p1asStudent;//结果s3为null–Stude

nts4=p2asStudent;//s4被赋值•与强制类型转换的差别–as只能针对引用型变量–如果不能转换,as运算不会引起异常,只是值为nullis运算符•if(pisPerson)•判断一个对象是不

能某个类(及其子类)的实例typeof()运算符•获得其运行时的类型–Typet=typeof(变量);–Typet=typeof(类名);属性、索引的继承3.4修饰符访问控制符访问控制符同类中相同程序集的子类相同程序集的非子

类不同程序集的子类不同程序集的非子类publicYesYesYesYesYesprotectedinternalYesYesYesYesprotectedYesYesYesinternalYesYesYesprivateYesstati

c•static的域、方法、属性是属于整个类的–static方法中,不能访问实例变量–调用static方法时,直接用类名访问•Console.Write(…);Math.Sqrt(…);•Convert.ToDateTime(„)

;DateTime.Parse•String.Copy(a);String.Format(“{0}”,x)–static变量可以用来表示“全局变量”•在c#2.0中,类名也可以用static来修饰StaicAndInstanc

e.csstatic构造方法classPerson{staticlongtotalNum;staticPerson(){totalNum=(long)52e8;Console.WriteLine("人类总人口"+totalNum);}}Static构造方法只会调用一次,但其调用时间是不确定的

。const及readonly•const相当于静态常量–如Math.PI•readonly相当于不可改量,只能赋一次值–如String.Empty–在构造方法中赋值,或者在声明时就赋值•注:–const只能用于

基本类型及string(如果用于其他类型则无意义,因为只能为null值)。–readonly只能修饰域,而const还可以修饰局部变量Constans.csReadonlyColor.cssealed及abstract•sealed类,不可继承(也

有利于编译优化)–如StringConsoleMathConvertGraphicsFont•abstract类,不可实例化(new)–如Array,RandomNumberGenerator•abstract的方法体,不用{},用;

–abstract类型方法名(参数列表);–abstract类型属性名{get;set;}抽象类表示了其子类的属性AbstractShapeTest.cs3.5接口接口(interface)•相似于抽象类•一个抽象成员的集合

•如:ICloneable,IComparable,IConvertible,IDisposable,IFormattable,IEnumerable帮助实现多重继承接口的用处•实现不相关类的相同行为•需要考虑这些类之间的层次关系•通过接口可以了解对象的交互界面

,而不需了解对象所对应的类•例如:–publicsealedclassString:IComparable,ICloneable,IConvertible,IEnumerable定义一个接口publicinterfaceIStringList{voidAdd

(strings);intCount{get;}stringthis[intindex]{get;set;}}注:publicabstract这两个关键词不加实现接口class类名:[父类,]接口,接口,……,接口{………}TestInterface.cs显式接口成员实现•方法名前写

接口名–voidIWindow.Close(){……}•调用时,只能用接口调用–((IWindow)f).Close();•在不同接口的方法相同时,能消除歧义InterfaceExplicitImpl.cs3.6结构及枚举结构struct结构,如:Po

int,Color,Size,DateTime,Int32struct结构名[:接口名]{……}结构是隐式sealed;因此它们不能被继承。使用struct要注意•struct是值类型–结构不能包含无参数构造方法–每个域在定义时,不能给初

始值–构造方法中,必须对每个域进行赋值–实例化时,使用new,但与引用型变量的内存是不同的–值类型变量在赋值时,实行的是域的copyStructNew.csStructPoint.cs枚举(enum)如FontStyl

e,GraphicsUnit,KnownColor,DockStyle,DialogResult声明自己的属性enumMyColor(注:后者可以跟一个:int){Red,Green=1,Blue=2}EnumColor.cs使用枚举•

MyColorc=MyColor.Red;•Console.WriteLine(c.ToString());•c=–(MyColor)Enum.Parse(typeof(MyColor),"Red");3.7面向对象编程面向对象OO•Ob

jectOriented方法的三大特点–继承inheritance•子类继承父类的成员,还可增加、调用、隐藏•提高软件模块的可重用性和可扩充性–封装encapsulation•使用接口,而不关心具体的类•使用属性,

而将域设为private–多态polymorphism•相同的方法,不同的参数•自动调用子类相应的方法(虚方法调用,以后讲))UML类图简介•UML,统一建模语言•有类图、状态图、时序图等多种图形VS中的类关系图•在项目上,点右键,”查看类关系图“•添加新项,其他项,类关系图

–然后将相应的类文件拖动到该“类关系图”中UML工具•IBMRationalXDEfor.NET•BorlandTogether•MicrosoftVisio•正向工程,由UML图自动产生代码•反向工程,由

代码自动产生UML图小结•类class、接口interface•结构struct、枚举enum•类的成员:域、方法、属性、索引•修饰词–publicprotectedinternalprivate–staticconstreadonly–abstractsealedvirtual

overridenew•OO与UML练习•参见讲义及ch03目录进一步阅读•书稿《3类和接口.doc》•C#语言规范•http://www.uml.org.cn问题与讨论dstang2000@263.net编程提示•数字要有意义,不能天上掉下来•常用手段–使用变量deltx=100

–使用常量constintMAX_LEN=1000–使用系统常量Math.PI–使用枚举

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?