https://www.cnblogs.com/ideal-20/p/11050146.html
面向对象是一种编程思想,所有事物都可以看做对象,即“万物皆对象”,任何物体都可以归为一类事物,而每一个个体都是一类事物的实例
面向对象有三大特征:封装、继承、多态
概念:面向过程是一种以过程为中心的编程思想,其原理就是将问题分解成一个一个详细的步骤,然后通过函数实现每一个步骤,并依次调用。
举个例子,汽车发动、汽车熄火,这是两个不同的事件,对于面向过程而言,我们关心的是事件本身,因此我们会使用两个函数完成以上两个动作,然后依次调用即可。
优点:性能上它是优于面向对象的,因为类在调用的时候需要实例化,开销过大。
缺点:不易维护、复用、扩展
用途:单片机、嵌入式开发、Linux/Unix等对性能要求较高的地方
概念:面向对象则是一种以对象为中心的编程思想,就是通过分析问题,分解出一个一个的对象,然后通过不同对象之间的调用来组合解决问题。建立对象的目的不是为了完成某个步骤,而是为了描述某个事物在解决整个问题的过程中的行为。
如上面的例子,汽车发动、汽车熄火,对于面向对象而言,我们则关心的是汽车这类对象,两个事件只是这类对象所具备的行为。
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:一般来说性能比面向过程低
将一类事物的属性和行为抽象为一个类,隐藏信息,留有公开接口访问操作,提高数据的隐蔽性的同时,使代码模块化,复用性更高。
封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式
简单的来说就是我将不想给别人看的数据,以及别人无需知道的内部细节, “锁起来” ,我们只留下一些入口,使其与外部发生联系。
隐藏实现细节,提供公共的访问方式
提高了代码的复用性
公共行为和属性抽象为一个父类,每一个子类都是一个特殊的父类,有父类的属性和方法,也有自己的属性和方法。进一步的提高了代码的复用性
提高了代码的复用性,提高了代码的维护性(通过少量的修改,满足不断变化的具体要求),让类与类产生了一个关系,是多态的前提。
但是缺点也很显著:让类的耦合性增强,这样某个类的改变就会影响其他和该类相关的类。
父类的引用变量可以指向任何一个子类的引用变量(向上转型)。
多态是同一个行为具有多个不同表现形式或形态的能力。
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。
虚函数:在类的普通成员函数前加上virtual关键字