封装、继承、多态 详解

面向对象的三个基本特征:封装、继承、多态

1.封装

(1)封装是实现面向对象的第一步,封装就是将数据或函数等集合在一个单元中(类)。被封装的对象通常被称为抽象数据类型。

(2)类具有封装性,类能够把数据和算法(操作数据的函数)组合在一起,构成一个不可分割的整体;

(3)类具有信息隐藏的能力,它能够有效地把类的内部数据(即私有和受保护成员)隐藏起来,使外部函数只能通过类的公有成员才能访问类的内部数据,并且控制访问级别。

封装使类成为一个具有内部数据的自我隐藏能力、功能独立的软件模块

1)封装的意义

a)保护或防止代码(数据)在无意中被破坏。保护类中的成员,不让类以外的程序直接访问或修改,只能通过提供的公共接口访问(数据封装)

b)隐藏方法(实现)细节,只要接口不变,内容的修改不会影响到外部的调用者(方法封装)

c)封装可以使对象拥有完整的属性和方法(类中的函数)

d)外部不能直接访问对象的属性,只能通过该属性对应的公有方法访问

2)对象封装原则

a)内聚:指一个模块(类)内部各个部分之间的关联程度

b) 耦合:指各个模块(类)之间的关联程度

总结:用类实现封装,用封装来实现高内聚,低耦合

访问级别public,private,protected

public:

通常使用public设置公有成员,让本类之外的其他函数能够通过公有成员,按照类允许的方法访问类的私有数据,就能起到数据保护的目的。

private:

通常使用private把不想让其他程序访问的数据或者函数设置成私有成员,可禁止其他程序对这些数据随意修改。

protected:

通过protected设置保护成员,在封装中没什么用,通常在继承中使用。

2.继承

继承主要实现重用代码,节省开发时间

举例:当封装两个类后,第一个类中有一个非常复杂的成员函数,第二个类也需要同样的一个成员函数。如果第二个类重新编写成员函数,会增加开发时间,并且可能会因为一些疏忽,造成BUG,因此出现了继承这种方式,第二个类继承第一个类,那么,第二个类就可直接复用第一个类中的所有成员。(私有成员,可继承,不可访问)

1)继承是在已有类的基础上创建新类的过程,已有类称为基类(父类),新类称为派生类(子类)

2)派生类继承基类功能,且能够对基类的功能进行扩充、修改或重定义。

3)派生类复用了基类的全体数据成员函数,具有从基类复制而来的数据成员成员函数(基类私有成员可被继承,但是无法被访问)

4)派生类可以从一个或多个基类派生;通过一个基类派生的继承称为单继承,多个基类派生的继承为多重继承

5)一个类可以作为多个类的基类,一个派生类也可以作为另一个类的基类。

6)继承可传递 如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员。Object类作为所有类的基类。

7)基类中的构造函数、析构函数、友元函数、静态数据成员、静态成员函数都不能被继承。基类中成员的访问方式只能决定派生类能否访问它们。

8)基类的程序代码可以被派生类服用,提高了软件复用的效率,缩短了软件开发的周期

9)派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员。但这并不因为这派生类删除了这些成员,只是不能再访问这些成员。

继承方式:

语法:

class 派生类名:[继承方式]  基类名{
        派生类成员声明与定义
};

公有继承(public):基类成员的访问权限在派生类中保持不变

私有继承(private):基类的private成员在派生类仍是private成员,但是基类的public和protected成员在派生类中会变成private成员。

保护继承(protected)

a)具有protected权限的数据,在该类没有被继承的情况下,protected访问属性与private完全相同。

b)在继承结构中,基类的protected成员不能被派生类的外部函数访问,但是可被派生类直接访问

封装、继承、多态 详解_第1张图片

多态

多态:  指不同对象接收到同一消息时会产生不同的行为(一个接口,多种方法)

简单来说,就是在同一个类或继承体系结构的基类与派生类中,用同名函数来实现各种不同的功能

多态的三个条件:

a) 继承的存在(继承是多态的基础,没有继承就没有多态).
b) 子类重写父类的方法(多态下调用子类重写的方法).
c) 父类引用变量指向子类对象(子类到父类的类型转换).

多态性主要体现在:向不同的对象发送同一个消息,不同对象接收到消息时产生不同的行为,即每个对象以自己的方式响应同样的消息。

多态可以按照实现的时机分为编译时多态,运行时多态

编译时多态:(静态联编) 指程序在编译时就可确定的多态性,通过重载机制实现

运行时多态:(动态联编) 指必须在运行中才可确定的多态性,通过继承虚函数

实现多态方式:

a)接口多态性

b)继承多态性

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

多态的好处:

a)可替换性:多态对已存在的代码具有可替换性

b)可扩充性:多态对代码具有可扩充性。新增子类不会影响已存在类的各种性质。

c)灵活性:多态在程序中体现了灵活多样的操作,提高了使用效率(重载函数,重写函数)

d)简化性:多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要

你可能感兴趣的:(开发语言,c++)