文档介绍:第7章面向对象的程序设计
本章要点:
面向对象的基本概念
类的定义与对象的声明
构造函数和析构函数
类的静态成员和实例成员
方法重载及运算符重载的编程实现
类的继承与多态性的编程实现
类的属性的实现
循序渐进学理论
面向对象程序设计概述
面向对象的程序设计是一种基于结构分析的、以数据为中心的程序设计方法。面向对象的程序设计方法总体思路是:将数据及处理这些数据的操作都封装(Encapsulation)到一个称为类(Class)的数据结构中,在程序中使用的是类的实例——对象。对象是代码与数据的集合,是封装好了的一个整体,对象具有一定的功能。也就是说对象是具有一定功能的程序实体。程序是由一个个对象构成的,对象之间通过一定的“相互操作”传递消息,在消息的作用下,完成特定的功能。
(1)类和对象
通常把具有同样性质和功能的东西所构成的集合叫作类。
(2)属性、方法与事件
属性是对象的状态和特点。
方法是对象能够执行的一些操作,它体现了对象的功能。
事件是对象能够识别和响应的某些操作。
(3)封装
所谓的封装,就是将用来描述客观事物的一组数据和操作组装在一起,形成一个类。
(4)继承
类之间除了有相互交流或访问的关系以外,还可能存在着一种特殊的关系,这就是继承。在Visual C#中只支持单继承,即一个派生类只能有一个基类。
(5)重载
重载指的是方法名称一样,但如果参数不同,就会有不同的具体实现。重载主要有两类:方法重载及运算符重载。
(6)多态性
所谓多态性就是在程序运行时,面向对象的语言会自动判断对象的派生类型,并调用相应的方法。
类和对象的声明
[格式]:[类修饰符] class 类名[:基类类名]
{
成员定义列表;
}
【例7-1】定义一个Student类,用来对学生的信息和功能进行描述。假设学生具有学号、姓名、年龄、性别、平均成绩等特征,并且具有设置学生特征和显示学生特征的功能。
[格式]:类名 实例名=new 类名([参数]);
(1)类成员的分类
类的具体成员如下。
常量:用来定义与类相关的常量值。
字段:类中的变量,相当于C++中的成员变量。
类型:用来定义只能在类中使用的局部类型。
方法:完成类中各种计算或功能的操作。
属性:定义类的特征,并对它们提供读、写操作。
事件:由类产生的通知,用于说明发生了什么事情。
索引器:允许编程人员在访问数组时,通过索引器访问类的多个实例。又称下标指示器。
运算符:定义类的实例能使用的运算符。
构造函数:在类被实例化时首先执行的函数,主要是完成对象初始化操作。
析构函数:在对象被销毁之前最后执行的函数,主要是完成对象结束时的收尾操作。
(2)类成员的可访问性
在编写程序时,可以对类的成员使用不同的访问修饰符,从而定义它们的访问级别,即类成员的可访问性(Accessibility)。
在C#中,根据类成员的可访问性可以把类成员分成四类,分别是公有成员(public)、私有成员(private)、保护成员(protected)、内部成员(internal)。
(3)类的静态成员和实例成员
类的成员又可以分成静态成员和非静态成员。在声明成员时,如果在语句前加上static保留字,则该成员是静态成员,如果没有static保留字,则成员是非静态成员。二者最重要的区别是:静态成员属于类所有,非静态成员属于类的实例所有,所以又称实例成员。
类的构造函数和析构函数
构造函数主要用来为对象分配存储空间,完成初始化操作(如给类的成员变量赋值等)。在C#中,类的构造函数遵循以下规定。
(1)构造函数的函数名和类的名称一样。
(2)当某个类没有构造函数时,系统将自动为其创建构造函数,这种构造函数称为默认构造函数。如例7-2中默认的构造函数为:
Example1()
{
};
(3)构造函数的访问修饰符总是public。如果是private,则表示这个类不能被实例化,这通常用于只含有静态成员的类中。
(4)构造函数由于不需要显式调用,因而不用声明返回类型。
(5)构造函数可以带参数也可以不带参数。
析构函数在对象销毁时被调用,常用来释放对象占用的存储空间。析构函数具有以下特点。
(1)析构函数不能带有参数。
(2)析构函数不能拥有访问修饰符。