前言
C++三大特性—封装、继承、多态。
封装目的是实现代码模块化。
继承目的是实现代码扩展。
多态目的是分为静态多态和动态多态。静态多态:函数重载和泛型编程。动态多态:虚函数重写。
一、封装
封装就是将数据和行为(或功能)有机结合起来,形成一个整体。把数据和处理数据的操作结合形成类,数据和函数都是类的成员。增强安全性和简化编程。对外隐藏实现细节暴露公共接口。外部通过接口来调用。
封装类的访问类型:
私有成员(private),只有此类的成员函数才能访问。
保护成员(protected),类和派生类的成员函数都能访问,但类外不阔以访问。
公有成员(public),可以在类外访问。
特点:隔离变化,提高复用性,提高安全性。
缺点:封装太多,影响运行效率。使用者不知道代码的具体实现。
二、继承
继承就是A类被B类继承,A类为父类,B类为子类。B类继承Al类的所有公共和保护成员数据(属性)和成员函数(方法)。子类可以重新定义父类某些属性,重写父类的某些方法,即覆盖父类的某些属性和方法。使其获得与父类不同的功能。
优点:1、减少重复代码,增加复用性。
2、让类与类之间产生关系,是多态的前提。
3、增加了类与类之间的耦合性。
缺点:1、继承在编译时刻就定义了,无法时刻改变父类的继承实现。
2、父类至少定义了子类的部分行为,父类改变可能影响子类的行为。
3、如果继承下来的子类不适合解决新问题,必须重写或替换父类,这种依赖关系限制了灵活性。
三、多态
多态:一个接口多种实现状态。多态的出现大大提高了程序的扩展性。
动态多态,是基于封装和继承的来实现的,多个子类对继承于一个父类的虚函数进行重写,来实现不同状态。
静态多态分两种,一种在同一个作用域对函数进行重载(函数名相同,函数参数列表不同),另一种是对函数进行模板化,忽略数据类型强调数据操作。
多态的体现:
父类引用或指针指向子类对象。
父类的引用或指针可以接受子类对象。
多态的前提:
必须存在父类与子类的继承关系。
父类中必须有虚函数。
子类必须重写父类的虚函数。
父类引用或指针指向子类对象。
多态的弊端:
易读性不好,调试困难。
模板只能定义在.h文件中,当工程大了后编译耗时。