面向对象基础-类与对象.ppt

上传人:wuy****n92 文档编号:92004770 上传时间:2023-05-30 格式:PPT 页数:41 大小:228.16KB
返回 下载 相关 举报
面向对象基础-类与对象.ppt_第1页
第1页 / 共41页
面向对象基础-类与对象.ppt_第2页
第2页 / 共41页
点击查看更多>>
资源描述

《面向对象基础-类与对象.ppt》由会员分享,可在线阅读,更多相关《面向对象基础-类与对象.ppt(41页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、类与对象类与对象C#面向对象程序设计案例教程1教学目标教学目标(1)初步理解面向对象的编程思想;初步理解面向对象的编程思想;(2)能够区分类和对象,理解类和对象之间的关系;能够区分类和对象,理解类和对象之间的关系;(3)学会自定义类,学会创建与使用对象;学会自定义类,学会创建与使用对象;(4)能区分字段与属性、属性与方法;能区分字段与属性、属性与方法;(5)掌握实例构造函数重载及其应用,了解析构函数;掌握实例构造函数重载及其应用,了解析构函数;(6)能区分实例成员与静态成员,能定义并正确调用两种能区分实例成员与静态成员,能定义并正确调用两种成员;成员;(7)掌握对象作为方法参数在值传递方式和引

2、用传递方式掌握对象作为方法参数在值传递方式和引用传递方式下的区别。下的区别。2面向对象基本概念面向对象基本概念(10.30)对象对象程序中的对象来源于生活,现实生活中的某个实体经程序中的对象来源于生活,现实生活中的某个实体经过抽象、建模后就变成程序中的一个对象,即用特过抽象、建模后就变成程序中的一个对象,即用特定符号描述的对象。定符号描述的对象。程序中的对象有共同的结构模型,包括对象名、一组程序中的对象有共同的结构模型,包括对象名、一组属性、一组操作,其中属性、一组操作,其中属性属性描述对象的静态特征,描述对象的静态特征,表示对象的状态,是类的数据成员;表示对象的状态,是类的数据成员;操作操作

3、(或称方法或称方法)描述对象的行为,是对象的动态特征,通常是对数描述对象的行为,是对象的动态特征,通常是对数据成员进行操作的方法。据成员进行操作的方法。3类现现实实生生活活中中的的对对象象往往往往可可以以根根据据共共性性进进行行归归类类,一一组组具具有有共同特征和行为的相似对象归为一类。共同特征和行为的相似对象归为一类。程程序序设设计计中中,把把一一组组相相似似对对象象的的共共同同特特征征抽抽象象出出来来并并存存储储在一起,就形成了类。在一起,就形成了类。从从具具体体对对象象到到类类实实际际上上是是一一个个概概括括的的过过程程,把把对对象象的的共共同同特特征征抽抽取取出出来来,形形成成了了类类

4、,如如果果再再对对这这个个类类用用计计算算机机语语言言加加以以描描述述,就就形形成成了了程程序序中中的的类类,这这个个过过程程称称为为抽象抽象。4面向对象面向对象(类类)的几个特征的几个特征1封装封装封封装装实实际际上上是是在在类类的的设设计计过过程程中中完完成成的的,类类对对外外部部提提供供统统一一的的接接口口方方法法,类类的的内内部部相相当当于于一一个个黑黑盒盒,类类的的使使用用者者并并不不知知道道类类的的内内部部实实现现细细节节,只只要要知知道道怎怎么么调调用用这这些接口方法就够了。些接口方法就够了。2继承继承现现实实世世界界中中有有很很多多事事物物之之间间存存在在一一般般化化与与特特殊

5、殊化化的的关关系系,这这都都是是由由于于事事物物之之间间存存在在着着“继继承承”关关系系,这这种种思思想想反反映映在在程程序序设设计计中中,就就是是继继承承,即即一一个个类类从从另另一一个个类类获获得得了了已已有有的的基基本本特特征征,并并在在此此基基础础上上增增加加了了自自身身的的一些特殊特征。一些特殊特征。5面向对象的几个特征面向对象的几个特征3多态多态在在面面向向对对象象程程序序设设计计中中,多多态态是是指指用用户户对对一一个个对对象象进进行行一一个个操操作作,但但具具体体的的动动作作却却取取决决于于这这个个对对象象的的类类型型,即即对对不不同同的的对对象象执执行行相相同同的的操操作作会

6、会产产生生不不同同的的结结果果。从从多多态态发发生生的的时时机机上上分分,多多态态可可以以分分为为编译时多态和运行时多态两种。编译时多态和运行时多态两种。6类类 和和 对对 象象【案例简介】l 定义一个猫类,有姓名,品种,毛色,体重,出生日期等属性,以及打招呼,喵喵叫,抓老鼠的行为.创建并使用这个类的实例。【案例目的】(1)学会自定义类;(2)学会用自定义类创建、实例化对象,通过对象引用成员。【技术要点】掌握类定义的结构框架。78类类 和和 对对 象象代码及分析代码及分析定义了一个猫类定义了一个猫类Cat,在在Main()方法中声明并实例化两个猫类对象。方法中声明并实例化两个猫类对象。9相关知

7、识及注意事项相关知识及注意事项1类的定义类的定义类定义的一般格式如下:类定义的一般格式如下:class private protected public Public:不限制对该类的访问不限制对该类的访问Protected:受保护的,表示该类只能被这个类的成员或派生类成员访问:受保护的,表示该类只能被这个类的成员或派生类成员访问Private:私有的:私有的,只能被该类的成员访问。只能被该类的成员访问。102对象的定义与使用对象的定义与使用1)对象的声明与实例化对象的声明与实例化类名类名 对象名;对象名;/声明对象声明对象对象名对象名new类名类名();/实例化对象实例化对象例如,创建一个名为

8、例如,创建一个名为catBobi的猫类对象代码为:的猫类对象代码为:Cat catBobi;catBobi new Cat();也可以把对象声明与实例化合为一步进行:也可以把对象声明与实例化合为一步进行:Cat catBobi=new Cat();112.对象的定义与使用对象的定义与使用2)2)对象的使用对象的使用在面向对象中,对象不是一个被动接受处理的数据,而在面向对象中,对象不是一个被动接受处理的数据,而是一个拥有数据并能主动提供服务的实体。一个对象被是一个拥有数据并能主动提供服务的实体。一个对象被创建后,就可以通过对象本身来获取对象状态或调用对创建后,就可以通过对象本身来获取对象状态或调

9、用对象行为。象行为。调用对象成员的格式为:调用对象成员的格式为:对象名对象名.对象成员对象成员123类成员的访问修饰符类成员的访问修饰符类的成员的访问修饰符及其含义修饰符修饰符说明说明public该成成员可以被本可以被本类及本及本类以外的所有以外的所有类访问private该成成员只能在本只能在本类内部被内部被访问protected该成成员只能被本只能被本类及本及本类的派生的派生类访问internal该成成员只能在所在的程序集内部只能在所在的程序集内部访问internal protected该成成员可以在所在的程序集内部或本可以在所在的程序集内部或本类的派生的派生类中被中被访问13思考一思考一l

10、年龄是公有变量,可以随时访问随时赋年龄是公有变量,可以随时访问随时赋值,可年龄不应该为负数,如果输入也值,可年龄不应该为负数,如果输入也可以编译,不出现语法错误。一般我们可以编译,不出现语法错误。一般我们要对数据进行合法性检查,避免出现严要对数据进行合法性检查,避免出现严重后果。我们可以把重后果。我们可以把age设置成私有变量,设置成私有变量,在类内部检查合法性,在通过公有函数在类内部检查合法性,在通过公有函数访问。例如:访问。例如:14l/函数用来为函数用来为age变量赋值变量赋值 lpublic void SetAge(int ageValue)l l if(ageValue=0)l ag

11、e=0;l elsel age=ageValue;l l/读取变量读取变量age的值的值l public int GetAge()l l return age;l 15思考二思考二l以上方法可以解决以上方法可以解决age的访问问题,但实的访问问题,但实际上人们习惯把际上人们习惯把age当作一个变量,而不当作一个变量,而不是通过函数访问的方式得到。是通过函数访问的方式得到。lC#为解决这类问题,专门设计一种特殊为解决这类问题,专门设计一种特殊的语法的语法-属性。在属性中,已经定义了属性。在属性中,已经定义了get与与set两个访问器,用来读取以及设两个访问器,用来读取以及设置变量的值。例如置变量

12、的值。例如16lpublic int agellgetreturn age;lsetif(value=0)lage=0;lelselage=valuel174类的属性类的属性1)1)为什么使用属性为什么使用属性2)2)除了添加公有方法读写字段外,除了添加公有方法读写字段外,C#C#能否提供一种能否提供一种更有效的访问形式,既能读写字段,同时又保证更有效的访问形式,既能读写字段,同时又保证数据成员能被更好地隐藏和保护起来呢?那就是数据成员能被更好地隐藏和保护起来呢?那就是使用属性。属性是类的一种特殊成员,它具有字使用属性。属性是类的一种特殊成员,它具有字段的形式,又具有方法的本质段的形式,又具有

13、方法的本质 2)2)怎样定义属性怎样定义属性属性的定义格式为属性的定义格式为:修饰符修饰符 类型类型 属性名属性名 set set /写入数据写入数据 get get /读取数据读取数据 18作业:作业:l1.类的定义与对象的实例化类的定义与对象的实例化仿照课堂上的案例,定义猫类,以及两个对象的实例化代码定义一个Person类,有姓名,年龄,性别,职业等属性,设计使用set与get访问器获取年龄以及性别。l2.windows应用程序应用程序1920下课下课21using System;using System;class Persons string name;int age;string g

14、ender;string work;public string Name get return name;set name=value;public int Age get return age;set if(value=0)age=0;else age=value;public string Gender get return gender;set if(value=男男|value=女女)gender=value;else gender=男男;public string Work get return work;set work=value;定义一个描述个人情况的类定义一个描述个人情况的类

15、Person如下:如下:22构造函数构造函数:每当生成每当生成类的的对象象时,自,自动调用用类的构造函数。的构造函数。因此可把初始化工作放到构造函数中完成。因此可把初始化工作放到构造函数中完成。构造函数和构造函数和类名相同,没有返回名相同,没有返回值。例如可定例如可定义PersonsPersons类的构造函数如下:的构造函数如下:public public Persons(stringPersons(string Name,intName,int Age)Age)name=Name;name=Name;age=Age;age=Age;当用当用PersonsPersons OnePersonOn

16、ePerson=new=new Persons(Persons(张五五,20)20)语句生成句生成PersonPerson类对象象时,将自,将自动调用以上构造函用以上构造函数。数。23v构造函数重载构造函数重载 在在C#C#语言中,同一个类中的函数,如果函数名相同,语言中,同一个类中的函数,如果函数名相同,而参数的类型或个数不同,认为是不同的函数,这而参数的类型或个数不同,认为是不同的函数,这叫函数重载。仅返回值不同,不能看作不同的函数。叫函数重载。仅返回值不同,不能看作不同的函数。这样,可以在类定义中,定义多个构造函数,名字这样,可以在类定义中,定义多个构造函数,名字相同,参数类型或个数不同

17、。根据生成类的对象方相同,参数类型或个数不同。根据生成类的对象方法不同,调用不同的构造函数。例如可以定义法不同,调用不同的构造函数。例如可以定义PersonPerson类没有参数的构造函数如下:类没有参数的构造函数如下:24public Person()public Person()name=“name=“张三三”;”;age=12;age=12;用语句用语句Person OnePerson=new Person(Person OnePerson=new Person(李李四四,30),30)生成对象时,将调用有参数的构造函生成对象时,将调用有参数的构造函数,而用语句数,而用语句Person

18、OnePerson=new PersonPerson OnePerson=new Person()()生成对象时,调用无参数的构造函数。生成对象时,调用无参数的构造函数。25v析构函数析构函数 变量和类的对象都有生命周期,生命周变量和类的对象都有生命周期,生命周期结束,这些变量和对象就要被撤销。类的期结束,这些变量和对象就要被撤销。类的对象被撤销时,将自动调用析构函数。一些对象被撤销时,将自动调用析构函数。一些善后工作可放在析构函数中完成。析构函数善后工作可放在析构函数中完成。析构函数的名字为的名字为 类名,无返回类型,也无参数。类名,无返回类型,也无参数。PersonPerson类的析构函数

19、为类的析构函数为 Person()Person()。C#C#中类的析构函数不能被自己编写的代码调用,中类的析构函数不能被自己编写的代码调用,当垃圾收集器撤销不被使用的对象时,自动当垃圾收集器撤销不被使用的对象时,自动调用不被使用对象的析构函数。由于析构函调用不被使用对象的析构函数。由于析构函数无参数,因此,析构函数不能重载。数无参数,因此,析构函数不能重载。26使用使用PersonPerson类的完整的例子类的完整的例子 using System;namespace e1_3_5 class Person private String name=张三;private int age=12;pu

20、blic void Display()Console.WriteLine(“姓名:0,年龄:1,name,age);public void SetName(string PersonName)name=PersonName;public void SetAge(int PersonAge)age=PersonAge;27/两个构造函数两个构造函数public Person(string Name,int Age)public Person(string Name,int Age)name=Name;name=Name;age=Age;age=Age;public Person()public

21、Person()name=“name=“田七田七”;”;age=12;age=12;28class Class1class Class1 static void Main(string args)/static void Main(string args)/主主函数函数 Person OnePerson=new Person(Person OnePerson=new Person(李四李四,30);,30);OnePerson.Display();OnePerson.Display();OnePerson.SetName(OnePerson.SetName(王五王五););OnePerson.

22、SetAge(40);OnePerson.SetAge(40);OnePerson.Display();OnePerson.Display();OnePerson=new Person();OnePerson=new Person();OnePerson.Display();OnePerson.Display();29显示的效果是:显示的效果是:姓名姓名:李四李四,年龄:年龄:3030姓名姓名:王五王五,年龄:年龄:4040姓名姓名:田七田七,年龄:年龄:121230构造函数与析构函数构造函数与析构函数相关知识及注意事项相关知识及注意事项 1 1构造函数构造函数1)1)什么是构造函数什么是构造

23、函数对象在实例化的时候,可以进行数据成员的设置,称为对象在实例化的时候,可以进行数据成员的设置,称为对象的初始化;另外,类有时也需要做一些初始化工作,对象的初始化;另外,类有时也需要做一些初始化工作,这些工作都由构造函数完成。构造函数也称构造方法,这些工作都由构造函数完成。构造函数也称构造方法,它的基本特点是:它的基本特点是:(1)(1)构造函数名与类名相同;构造函数名与类名相同;(2)(2)构造函数没有返回值,且函数头部不用写构造函数没有返回值,且函数头部不用写“void”“void”;(3)(3)除了在实例化对象时由系统调用以及派生类构造函除了在实例化对象时由系统调用以及派生类构造函数调用

24、基类构造函数之外,其他任何函数都不能调用它。数调用基类构造函数之外,其他任何函数都不能调用它。31构造函数与析构函数构造函数与析构函数2 2)构造函数的声明与调用)构造函数的声明与调用public Cat(string myVariety,string myColor,float myWeight)variety=myVariety;hairColor=myColor;weight=myWeight;birthday=DateTime.Today;用用newnew运算符创建一个对象时,构造函数名后所跟的参数运算符创建一个对象时,构造函数名后所跟的参数列表就是对象的初始化列表。列表就是对象的初始

25、化列表。Cat catBobi=new Cat(波斯猫波斯猫,白色白色,2.3F);32构造函数与析构函数构造函数与析构函数3 3)构造函数的重载)构造函数的重载构造函数可以重载,以方便程序员初始化对象。构造函数可以重载,以方便程序员初始化对象。public Cat(string myVariety,string myColor,float myWeight)public Cat(float myWeight,string myVariety,string myColor)添加了这些构造函数后,可以在添加了这些构造函数后,可以在Main()Main()方法中按照如下方法中按照如下所示的多种方式

26、创建并初始化对象:所示的多种方式创建并初始化对象:Cat catBobi=new Cat(波斯猫波斯猫,白色白色,2.3F);Cat catBobi=new Cat(波斯猫波斯猫,2.3F,白色白色);Cat catBobi=new Cat(2.3F,波斯猫波斯猫,白色白色);33构造函数与析构函数构造函数与析构函数4 4)静态构造函数)静态构造函数静态构造函数通常用于对类的静态字段进行初始化。静态构造函数通常用于对类的静态字段进行初始化。为为CatCat类添加静态构造函数对类添加静态构造函数对countcount字段进行初始化。字段进行初始化。static Cat()/静态构造函数静态构造函

27、数 count=0;静态构造函数有如下特点:静态构造函数有如下特点:(1)(1)仅有一个仅有一个staticstatic修饰符。修饰符。(2)(2)只对静态字段赋初值。只对静态字段赋初值。(3)(3)由系统自动调用,一个类仅调用一次,与创建对象由系统自动调用,一个类仅调用一次,与创建对象操作无关。操作无关。34构造函数与析构函数构造函数与析构函数5 5析构函数析构函数1)1)什么是析构函数什么是析构函数在对象使用结束时,可以进行一些相关的清理工作并释在对象使用结束时,可以进行一些相关的清理工作并释放所占用的内存空间,这个工作由析构函数完成。析构放所占用的内存空间,这个工作由析构函数完成。析构函

28、数的特点如下:函数的特点如下:(1)(1)析构函数的名称与类名相同,在类名前加析构函数的名称与类名相同,在类名前加“”“”;(2)(2)析构函数没有返回值,也不能声明为析构函数没有返回值,也不能声明为voidvoid;(3)(3)析构函数只有一个,不能重载;析构函数只有一个,不能重载;(4)(4)析构函数也是类的成员函数。析构函数也是类的成员函数。Cat()Console.WriteLine(执行了析构函数!执行了析构函数!);35对象做参数与返回值为对象对象做参数与返回值为对象 5.5.15.5.1案例说明案例说明【案例简介】【案例简介】定义一个圆类定义一个圆类CircleCircle,描述

29、圆,描述圆的半径、数量、求面积、求周的半径、数量、求面积、求周长等成员。要求在测试类长等成员。要求在测试类ProgramProgram中编写两个方法:一个中编写两个方法:一个方法用于根据给定的半径创建方法用于根据给定的半径创建一个圆类对象并返回;另一个一个圆类对象并返回;另一个方法用于根据给定的扩大倍数方法用于根据给定的扩大倍数将指定的圆类对象进行放大。将指定的圆类对象进行放大。案例运行结果如右图所示。案例运行结果如右图所示。36对象做参数与返回值为对象对象做参数与返回值为对象【案例目的】【案例目的】(1)(1)巩固类的定义与对象的创建;巩固类的定义与对象的创建;(2)(2)掌握对象作为方法返

30、回值的用法;掌握对象作为方法返回值的用法;(3)(3)掌握对象作为方法参数在传值方式下的用法。掌握对象作为方法参数在传值方式下的用法。【技术要点】【技术要点】(1)(1)对象作为方法返回值的用法;对象作为方法返回值的用法;(2)(2)对象作为方法参数的用法。对象作为方法参数的用法。37对象做参数与返回值为对象对象做参数与返回值为对象5.5.25.5.2代码及分析代码及分析(1)(1)定义了一个圆类定义了一个圆类CircleCircle,包含的字段为圆的半径,包含的字段为圆的半径radiusradius、数量、数量countcount、圆周率、圆周率PI(PI(常数字段常数字段),方法为求,方法

31、为求面积面积Area()Area()、求周长、求周长Perimeter()Perimeter()等,还包括属性等,还包括属性RadiusRadius、CountCount。(2)(2)在在Program Program 类中定义了一个类中定义了一个CreatCircle()CreatCircle()方法和方法和ScaleUpScaleUp()()方法,方法,CreatCircle()CreatCircle()方法用于创建一个对象并返回,方法用于创建一个对象并返回,返回值为对象,返回值为对象,ScaleUp()ScaleUp()方法根据给定的扩大倍数方法根据给定的扩大倍数x x将指定的圆类对象半

32、径放大将指定的圆类对象半径放大x x倍。倍。(3)(3)圆的半径值一般应该大于零,为了防止不合法数圆的半径值一般应该大于零,为了防止不合法数据被赋给半径,可以在半径的属性中添加验证方法据被赋给半径,可以在半径的属性中添加验证方法 38对象做参数与返回值为对象对象做参数与返回值为对象5.5.35.5.3相关知识及注意事项相关知识及注意事项1 1方法的返回值为对象方法的返回值为对象方法的返回值可以是方法的返回值可以是intint、doubledouble等系统标准类型,也等系统标准类型,也可以是用户自定义的类型,两者的用法没什么两样。可以是用户自定义的类型,两者的用法没什么两样。2 2值类型变量与

33、引用类型变量值类型变量与引用类型变量C#C#的数据类型分为两大类:值类型和引用类型。首先比的数据类型分为两大类:值类型和引用类型。首先比较下面两段代码及其运行结果。较下面两段代码及其运行结果。为什么值类型变量间赋值与引用类型变量间赋值结果会为什么值类型变量间赋值与引用类型变量间赋值结果会有这么大的差别呢?原因是两种类型的变量在内存中的有这么大的差别呢?原因是两种类型的变量在内存中的存储原理不同。存储原理不同。39对象做参数与返回值为对象对象做参数与返回值为对象1)1)值类型值类型简单地说,值类型变量就是一个包含实际数据的量。当简单地说,值类型变量就是一个包含实际数据的量。当定义一个值类型变量时

34、,定义一个值类型变量时,C#C#会根据变量所声明的类型分会根据变量所声明的类型分配一块堆栈存储区域给这个变量,然后对这个变量的读配一块堆栈存储区域给这个变量,然后对这个变量的读写就直接在这块内存区域进行。写就直接在这块内存区域进行。2)2)引用类型引用类型引用类型变量存储的不是它所代表的实际数据,而是该引用类型变量存储的不是它所代表的实际数据,而是该实际数据的引用实际数据的引用(地址地址)。引用类型变量的赋值只赋值对象的引用,而不复制对象引用类型变量的赋值只赋值对象的引用,而不复制对象本身。变量本身。变量num1num1和和num2num2共同引用一个对象,对其中任何共同引用一个对象,对其中任

35、何一个做修改,另一个都会随之改变一个做修改,另一个都会随之改变 40对象做参数与返回值为对象对象做参数与返回值为对象3)3)对象做方法参数对象做方法参数 因为因为C#C#的数据类型分为值类型和引用类型,传递参数的的数据类型分为值类型和引用类型,传递参数的方式有传值方式和传引用方式,组合一下,方式有传值方式和传引用方式,组合一下,C#C#传递参数传递参数有有4 4种情况:值类型按传值方式传递,值类型按传引用种情况:值类型按传值方式传递,值类型按传引用方式传递,引用类型按传值方式传递,引用类型按传引方式传递,引用类型按传值方式传递,引用类型按传引用方式传递。用方式传递。通过扩充案例通过扩充案例Example5_4Example5_4来进一步学习引用类型参数的来进一步学习引用类型参数的传递,把引用类型按传值方式传递与引用类型按传引用传递,把引用类型按传值方式传递与引用类型按传引用方式传递的情况进行对比。方式传递的情况进行对比。41

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com