C中的面向对象编程技术实用.pptx
《C中的面向对象编程技术实用.pptx》由会员分享,可在线阅读,更多相关《C中的面向对象编程技术实用.pptx(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、6.1 工作场景导入 我国每年有几百万辆的汽车销售量,购买一辆汽车时我们总是根据自己的需要,针对不同性能的汽车挑选出适合自己的汽车。例如,已知一辆汽车的百公里耗油量、汽车油箱容积、油表(显示汽车当前的油箱中的油量)、汽车行驶的公里数。试为买汽车的顾客估算不同的公里数汽车所要耗费的汽油数量。例如结果示例如下图所示。第1页/共39页【引导问题】面向对象思想是什么?其核心是什么?面向对象的特点是什么?什么是类和对象?如何使用类?类由哪些元素构成?第2页/共39页6.2 面向对象编程基本思想面向对象编程(OOP)旨在将现实世界中的事物或概念通过抽象的方法模拟到计算机程序中,它将现实世界中的所有的事物视
2、为某个对象,这种编程方式允许程序员在编程时定义这些对象,同时定义可对这些对象进行的操作的方法。第3页/共39页面向对象程序设计中使用类的概念,一个类描述一类类似的物体。可以使用一个类定义书、人或者狗。类中包含属性和方法,分别对应现实事物的特征和行为。而某个具体的对象则是类的一个实例,此时的类相当于一个数据类型,可以使用“人”这样的类去创建多个具体的具有身高、年龄、性别等属性及相关方法的人。因此人可以用一个类来表达,这个类中包含身高、年龄、性别等属性以及走路、说话等方法,而一个具体的人则是“人”这个类的一个实例,例如,张三是“人”这个类的一个实例。第4页/共39页6.3 类与对象多个对象共有的特
3、征和行为可以组合成一个单元,称为“类”,类是对一类具有相同属性和行为的对象的描述,在计算机中,设计者使用“类”来描述现实世界中的物体和概念。类是面向对象程序设计方法的核心,没有类面向对象无从谈起,我们可以将类看作是一种数据类型,为了满足描述现实世界中各种对象的需要,C#语法提供了对自定义类型的支持,这就是类。第5页/共39页6.3.1 类的声明和类的实例化类是一组具有相同数据结构和相同操作的对象的集合。类是对一系列具有相同性质的对象的抽象,是对对象共同特征的描述。比如每一辆汽车都是一个对象的话,所有的汽车可以作为一个模板,我们就定义汽车这个类。类的内容称为成员,类的成员包括变量、属性、方法、事
4、件、索引器、构造函数、析构函数等。第6页/共39页1类的声明在C#中使用class.来定义一个类。要注意的是类的定义无论放在哪儿都可以,但是不可以放在namespace之外或者函数之内,也就是说,类定义是全局性的声明。类的声明格式如下:class-modifers class /类的成员.第7页/共39页2类的成员变量类的变量用于存储类中的公共数据,声明类的变量的语法如下:访问修饰符 数据类型;比如人有姓名、性别、年龄、身高等特征,那么描述人的类就应该存储姓名、性别、年龄、身高的变量,代码如下:class Person private string name;private int age;p
5、rivate string sex;private float height;第8页/共39页6.3.2 构造函数构造函数用于执行类的实例的初始化 每个类都有构造函数 即使我们没有声明它 编译器也会自动地为我们提供一个默认的构造函数 在访问一个类的时候 系统将最先执行构造函数中的语句。第9页/共39页使用构造函数请注意以下几个问题:一个类的构造函数通常与类名相同。构造函数不声明返回类型。一般地构造函数总是 public 类型的,如果是 private 类型的表明类不能被实例化这通常用于只含有静态成员的类。在构造函数中不要做对类的实例进行初始化以外的事情也不要尝试显式地调用构造函数。第10页/共
6、39页6.3.3 析构函数析构函数不接受任何参数,也不返回任何值。如果你试图声明其它任何一个以符号 开头而不与类名相同的方法和试图让析构函数返回一个值一样,编译器都会产生一个错误。析构函数不能是继承而来的,也不能显式地调用。当某个类的实例被认为不再有效符合析构的条件,析构函数就可能在某个时刻被执行。第11页/共39页析构函数的基本形式为:classname /code;第12页/共39页6.4 方法面向对象的本质在于各个类之间的方法的调用,面向对象中的方法类似于面向过程中的函数,面向对象中的方法定义在类中,方法中包含一系列实现某种功能的语句块。利用调用类对象的方法,实现各种操作功能。第13页/
7、共39页6.4.1 方法的定义方法定义和函数的定义类似,读者可以参照6.2节定义函数的方法定义来定义面向对象的方法,类的方法与类的变量类似需要定义在类中。例如:class Person private string name;private int age;private string sex;private float height;public void Walking()Console.WriteLine(“人能走路!”)第14页/共39页6.4.3 方法的重载在C#中,同一个类的两个或者两个以上的方法可以有同一个名字,只要它们的参数声明不同即可。在这种情况下,该方法就被称为重载,这个过
8、程称为方法重载。当一个重载方法被调用时,C#用参数的类型和(或)数量来表明实际调用的重载的方法的版本。因此,每个重载方法的参数的类型和(或)数量必须是不同的。虽然每个重载方法可以有不同的返回类型,但返回类型并不足以区分所使用的是哪个方法。当C#调用一个重载方法时,参数与调用参数匹配的方法被执行。第15页/共39页6.4.4 静态方法在第5章中讲解函数时,我们提到了关键字static的用法,在类中方法方法中加static修饰的方法称为静态方法,调用静态方法时不需要实例化对象的实例来调用,而采用“类名.方法名”的方式调用,如Console类的WriteLine方法就是静态方法。第16页/共39页6
9、.5 继承与多态了解了类的基本定义以及对象的使用之后,接下来就要进一步讲解Visual C#面向对象中的两个最为有力的机制继承与多态。假如我们定义了一个描述个人情况的类Person,如果我们再需要定义一个雇员类,当然可以从头开始定义雇员类Employee。但这样不能利用Person类中已定义的函数和数据。比较好的方法是,以Person类为基类,派生出一个雇员类Employee,雇员类Employee继承了Person类的数据成员和函数成员,既Person类的数据成员和函数成员成为Employee类的成员。这个Employee类叫以Person类为基类的派生类,这是C#给我们提出的方法。C#用继
10、承的方法,实现代码的重用。第17页/共39页6.5.1 继承 派生类的声明格式如下:属性 类修饰符 class 派生类名:基类名 类体第18页/共39页在派生类中,通过声明与基类完全相同新成员,可以覆盖基类的同名成员,完全相同是指函数类型、函数名、参数类型和个数都相同。如上例中的方法Display()。派生类覆盖基类成员不算错误,但会导致编译器发出警告。如果增加new修饰符,表示认可覆盖,编译器不再发出警告。请注意,覆盖基类的同名成员,并不是移走基类成员,只是必须用如下格式访问基类中被派生类覆盖的方法:base.Display()。第19页/共39页C#语言类继承有如下特点:C#语言只允许单继
11、承,即派生类只能有一个基类。C#语言继承是可以传递的,如果C从B派生,B从A派生,那么C不但继承B的成员,还要继承A中的成员。派生类可以添加新成员,但不能删除基类中的成员。派生类不能继承基类的构造函数、析构函数和事件。但能继承基类的属性。派生类可以覆盖基类的同名成员,如果在派生类中覆盖了基类同名成员,基类该成员在派生类中就不能被直接访问,只能通过base.基类方法名访问。派生类对象也是其基类的对象,但基类对象却不是其派生类的对象。例如,前边定义的雇员类Employee是Person类的派生类,所有雇员都是人类,但很多人并不是雇员,可能是学生,自由职业者,儿童等。因此C#语言规定,基类的引用变量
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中的 面向 对象 编程 技术 实用
限制150内