面向对象基本概念
对象:
一般意义上的对象:是现实世界的一个实际存在的事物。一个人的个体,或者一个事物
面向对象的方法中的对象:
是系统中用来描述客观事物的一个实体。
抽象与分类
类:就是基于分类和抽象思维形成的,同一类对象我们可以抽象出它的共同属性和行为,形成类。
比如:老师是一个类。学生一个类。这就是分类
类和对象的关系:
类型和实例的关系
就和模具和铸件之间的关系
面向对象思想
所谓面向对象的编程思想,就是将任何事物都看成一个对象,对象有各种属性和行为,在解决问题的过程中,将系统分解,使之模块化。
面向对象的程序设计有四个主要特点:抽象、封装、继承、多态。
共同属性抽象成成员数据
行为动作抽象成了成员方法
封装
电视都是有壳子的,怎么用呢,用遥控把,人的脑袋呢呢,是不是也是封装起来的。也是我们对象都是被封装起来的。
对外形形成一个边界
隐藏对象的内部细节
只保留有限的对外接口
使用方便安全性好
继承
在于软件的复用
改造,扩展已有类形成新的类
不必要所有事物从零开始,任务太重了。子承父业,在父业基础上拓展
程序上体现出来的是代码复用
多态
同样的消息作用在不同对象上,可能引起不同的行为
静多态
编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错误。
动多态
是利用虚函数实现了运行时的多态,也就是说在系统编译的时候并不知道程序将要调用哪一个函数,只有在运行到这里的时候才能确定接下来会跳转到哪一个函数的栈帧。call寄存器。
动多态的缺点:在运行期不但每一个对象需要多分配一个指针大小的空间,更是在时间上,虚函数的调用需要间接的内存寻址动作,从而使得效率下降。
静多态的优缺点:静多态会产生更多的代码,使得代码膨胀,而动多态不会有这种问题。但是静多态产生的代码的效率高于动多态因为其调用方式是静态链接的的,而且有更多inline机会。而且静多态在编译器就确定了有更好的类型安全性。