面向对象程序设计基本概念

面向对象程序设计基本概念

重点: C++中的 多态 和 指针间接赋值

1): 多态的三个条件
        a: 子类继承父类
        b: 虚函数(虚表及虚表指针)
        c: 父类引用或指针指向子类对象(参数类型的逆变和返回类型的协变)
                // 参数类型的逆变(contravariance)是指实现的参数类型是接口或委托定义的参数类型的父类。
                // 返回类型的协变(covariance)指返回类型是接口或委托定义返回类型的子类

2): 指针间接赋值的三个条件
        a: 外部实参和内部形参
        b: 外部实参取地址传给内部形参
        c: 形参通过解引用可以间接修改了外部实参

3): 变量名和变量地址:
        变量名实际上是一个符号地址,在对程序编译连接时由系统给每一个变量名分配一个内存地址。在程序中从变量中取值,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据。

 

1、对象
定义:对象是指客观存在的事物,由一组属性和行为构成。

对象 = 属性 + 行为

在面向对象程序设计中,对象之间也需要联系,我们称作对象的交互。

2、类
定义:

(1)类是具有共同特征的对象的抽象。

(2)类是对具有共同属性和行为的一类事物的抽象描述。 共同的属性被描述为类的数据成员,共同行为被描述为类的成员函数。

3、实例
定义:实例是由类所创建的具体对象,即给类定义的数据赋予具体值,操作赋予确定处理程序而所获得的实际对象。

4、消息
定义:

(1)一个对象向另一个对象发出的请求。

(2)是向某对象请求服务的一种表达方式,是对象与外界、对象与其他对象之间联系的工具。

性质:

(1)同一个对象可以接收不同形式的多个消息,作出不同的响应。

(2)相同形式的消息可以传递给不同的对象,所作出的响应可不同。

(3)消息的发送可以不考虑具体的接受者。

5、方法
定义:是对某对象接收消息后所采取的操作的描述。

6、抽象
定义:对实例进行分析,抽取出共同性质。

7、封装(Encapsulation)
定义:

(1)将数据抽象的外部接口与内部实现的细节清楚地分开

(2)封装就是将抽象得到的数据和行为相结合,形成一个有机的整体

作用:

(1)可以隐藏实现细节,使得代码模块化。

(2)封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。

(3)封装主要依靠对类、数据和方法的访问控制,从语法上讲就是加上private、protected、public等关键词。

(4)封装的意义在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。

8、继承(InHeritance)
定义:

(1)子类可以从父类继承属性和操作,提高编程效率

(2)通过继承关系利用已有类构造新类

作用:代码重用

(1)避免代码重复开发,减少代码和数据冗余

(2)通过增强一致性来减少模块间的接口和界面

9、多态(Polymorphism)
定义:

(1)不同的对象收到相同的消息时产生多种不同的行为方式。

(2)多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术。

(3)允许将子类类型的指针赋值给父类类型的指针。

(4)同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

作用:接口重用

(1)编译时的多态性

通过函数重载和运算符重载实现。

对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

(2)运行时的多态性

通过类的继承关系和虚函数来实现。

程序在执行前根据函数名和参数无法确定应该调用哪个函数,必须在程序执行的过程中根据具体的情况来动态确定。

编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。

实现

(1)接口多态性

(2)继承多态性

(3)通过抽象类实现的多态性

10、重载(Overload)
定义:将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同)

特征:

(1)相同的范围(在同一个类中);

(2)函数名字相同;

(3)参数不同;

(4)virtual 关键字可有可无。

11、重写(Overwrite)
定义:是指派生类的函数屏蔽了与其同名的基类函数

特征:

(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。

12、覆盖(Override)
定义:是指派生类函数覆盖基类函数

特征:

(1)不同的范围(分别位于派生类与基类);

(2)函数名字相同;

(3)参数相同;

(4)基类函数必须有virtual 关键字。

13、面向对象程序设计
定义:面向对象程序设计是一种新的程序设计范型。

特征:

程序 = 对象 + 消息

主要特点:

(1)程序由类的定义和类的使用两部分组成,

在主程序中定义各对象并规定它们之间传递消息的规律。

(2)程序中的一切操作都是通过向对象发送消息来实现的,

对象接收到消息后,启动有关方法完成相应操作。

(3)类有继承关系产生相互间的关系

14、面向过程程序设计
定义:采用模块化、按照解决问题的步骤分步设计程序。

面向过程程序设计思想的核心--功能分解

面向过程程序设计将数据结构和过程作为两个实体对待,重点在过程。

程的设计存在以下缺点:

(1)可重用性差

(2)可维护性差

(3)安全性差

上缺点的原因:数据和过程的分离

原文地址:https://www.cnblogs.com/lsgxeva/p/7718927.html