面向对象程序设计总复习资料(2008-秋)
- 格式:doc
- 大小:67.50 KB
- 文档页数:15
面向对象程序设计复习课(2008_秋)
一、对照书本(或上课课件),搞懂有关概念
1. 面向对象程序设计的基本概念
面向对象(O-O)程序设计是一种新的程序设计范型。这种范型的主要特征是:
程序=对象+消息
面向对象程序的主要结构特点是:
第一,程序一般由类的定义和类的使用两部分组成,在主程序中定义对象并规定它们之间传递消息的规律;
第二,程序中的一切操作都是通过向对象发送消息来实现的,对象接收到后,启动有关方法完成相应操作。
第三,类由继承关系产生相互间的联系。
2. 对象是现实世界的一个实体,其特性是:
(1) 每一个必须有一个名字以区别于其他对象;
(2) 用属性(或叫状态)来描述它的某些特征;
(3) 有一组操作,每一个操作决定对象的一种行为。
(4) 对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。类是:一组具有共同的属性特征和行为特征的对象的抽象。
类与对象的关系是抽象和具体的关系。3. 面向对象系统的特征是:封装性、继承性和多态性(1). 将数据结构和作用于数据结构上的操作组成一个实体,数据的表示方式和对数的操作细节被隐藏起来,用户通过操作接口对数据进行操作。这就是数据的封装。
(2). 继承机制允许派生类继承基类的数据和操作(即数据成员和成员函数),也就是说,允许派生类使用基类的数据和操作。同时派生类还可以增加新的操作和数据。
从继承源上分,继承分为单继承和多继承。
(3). 面向对象系统的多态性是指不同的对象收到相同的消息时产生多种不同的行为方式。
重载的概念
4. 新的I/O流
cin是标准输入流,在程序中用于代表标准输入设备,即键盘。运算符“>>”表示向右
cout是标准输出流,在程序中用于代表标准输出设备,即屏幕。运算符“<<”表示向左
使用cin或cout进行I/O操作时,在程序中必须嵌入头文件iostream.h5. new和delete
6. 引用
引用可为变量起别名,它主要用作函数参数以及函数的返回类型。有变量的引用、参数引用和返回值引用。
7. 类的定义
clsaa 类名{ private: (可缺省)
私有数据成员和函数成员
protected:
1 / 15
保护段数据成员和函数成员
public:
公有数据成员和函数成员
};
成员函数的定义
第一种方式是在类定义中只给出成员函数的原形,而成员函数体在类的外部定义。
第二种方式是将成员函数定义在类的内部,即定义为内置函数。
(1) 隐式定义
(2) 显式定义
8.对象中成员的访问不论是数据成员,还是成员函数,只要是公有的,就可以被外部函数直接访问,访问的一般格式是:
对象名. 数据成员名或对象名. 成员函数名(实参表)外部函数不能引用对象的私有成员
类成员的访问属性
类的公有成员不但可以被类中成员函数访问,还可以在类的外部通过类的对象进行访问。类的私有成员只能被类中成员函数访问,不能在类的外部通过类的对象进行访问。9. 构造函数的特点:(1)构造函数的名字必须与类名相同。
(2)构造函数可以有任意类型的参数,但不能具有返回类型。
(3)定义对象时,编译系统会自动地调用构造函数。
(4)构造函数也是成员函数,函数体可写在类体内,也可写在类体外。
(5)构造函数被声明为公有函数,但它不能象其他成员函数那样被显式地调用,它是在定义对象的同时被调用的。
10. 析构函数也是特殊成员函数,用于释放对象。
(1)析构函数与构造函数名字相同,但它前面必须加一个波浪号(~)。
(2)析构函数没有参数,也没有返回值,而且不能重载,因此在一个类中只能有一个析构函数。(3)当撤消对象时,编译系统会自动地调用析构函数。
11. 友元:不属于任何类的一般函数,另一个类的成员函数,整个的一个类。(1) 友元函数不属于任何类的一般函数
(2) 友元成员
该函数是另一个类的成员函数,前加上friend表示该另类的成员函数,又是本类的友元成员。
(3). 友元类
在类内说明一个类(该类前面已定义),前加上friend表示该类是本类的友元类。友元类的所有成员函数可以访问它自己类私有成员又可本类的私有成员
12. 派生类的定义
基类:
class 类名
{
类的内容
};
2 / 15
声明派生类:
class 派生类名: 继承方式基类名
{
//派生类新增的数据成员和函数成员
};继承方式可为公有继承(用public)、私有继承(用private或缺省)和保护继承(用protected)
13. 基类成员在派生类中的访问属性(重点)
14. 派生类对基类成员的访问规则(重点)
15. 派生类的构造函数和析构函数
(1) 派生类的构造函数和析构函数执行顺序
当创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数;当撤消派生类对象时,则先执行派生类的析构函数,随后再执行基类的析构函数。
(2). 派生类的构造函数和析构函数的构造规则
一般格式为:
派生类名(参数总表):基类名(参数表)
{
//派生类新增成员的初始化语句
}
其中基类构造函数参数,来源于派生类的构造函数的参数总表,也可以用常数值。
16. 编译时的多态性与运行时的多态性
静态联编(前期联编)静态联编要求在程序编译时就知道调用哪个函数,就决定如何实现某一动作。
动态联编(后期联编、滞后联编)
一直要到程序运行时才能确定调用哪个函数。系统在运行时才动态完成的联编。
静态联编支持的多态性称为编译时多态性,也称静态多态性。在C++中,编译时多态性是通过函数重载和运算符重载实现的。
动态联编支持的多态性称为运行时多态性,也称动态多态性。在C++中,运行时多态性是通过继承和虚函数来实现的。
函数重载:类外的一般的函数、成员函数和构造函数都可以重载
17.运算符重载:除了可以对函数重载外,还可以对大多数运算符实施重载。
外部函数类的友元函数是类的成员函数成员运算符函数定义的语法形式
成员运算符函数的原型在类的内部声明格式为:
class X{
//...
返回类型 operator 运算符(形参表);
//...
};
18.引入派生类后的对象指针
引入派生类后,由于派生类是由基类派生出来的,因此指向基类的指针和指向派生类的指针是相关的。
3 / 15