1.面向对象程序设计的特点
1.模块化
抽象,面向对技术设计出来的程序都是由一个个对象组成的,每个对象中既定义了相应的数据结构,又定义了操作这些数据结构的方法。
2.数据隐藏
封装,通过定义类把数据和方法集成在一个对象中,外部程序只能通过类所规定的接口和类进行通信。
3.继承
允许从已经存在的类中继承相应的成员,只要告诉编译器新类是由另一个类继承而来的,它就会把另一个类中除私有成员之外的所有成员都赋给新类。继承操作可以减轻工作量,提高可靠性。
4.多态性
指一个名字可以具有多种不同的语义,或者说多个函数具有相同的名字但具有不同的作用。
5.重载
多个函数可以共用一个名字,只要参数个数不同,或者参数类型不同即可。
关键字
1.const用来定义数值不能改变的变量。
变量的存储类型
auto
static
register
extern
函数的重载
函数同名 ,参数个数或者类型不同即可重载。
但是不能根据返回值不同进行重载,因为没有调用函数之前,C++无法判断要调用哪一个函数。
类
1.类的定义
类的定义相当于定义一种数据类型,而对象则是类的实例。
2.public,private,protected
public表明数据成员和成员函数都是公有的,所有的函数都可以访问这些成员。
private私有的,只有该类的成员函数和友元才可以访问。
protected受保护的,具有private特征的同时,可以由子类成员访问。
静态数据成员和静态成员函数
对于某些类来讲,一些特定的数据成员的值都是固定不变的,或者说对该类的所有对象都一样的,他们并不是与某一个对象相关,而是与该类的所有对象有关。这种数据就可以被定义为静态的。另外,类中的成员函数也可以被定义为静态,此时该成员函数不再具有this指针,也就是说静态成员函数不与某个具体对象相联系,它是属于类的。
对于静态数据成员和静态成员函数来讲,不管该类生成了多少个对象,也只有一个静态数据成员和静态成员函数。并不是每生成一个对象就生成一个备份,而是所有对象共用一个。
静态数据成员主要用于设定对所有对象都共享的数据,主要目的是提高内存的利用效率。
静态成员函数不能对一般的数据成员进行操作,通常只能用于对静态数据成员进行处理。
友元
之前学习JAVA时没有接触过友元,特此记录加以区分学习记忆。
使用友元或者友元类,就使得与类无关系的一般函数或者其他类也能够对类中的private数据成员进行访问。
目前个人感觉友元破坏了封装特性,才疏学浅,以后想明白了再来修改。
继承
通过使用已有的类并在此基础上追加新的功能就可以派生出新的类,这一处理过程成为继承,被继承的类称为基类(父类),通过继承而产生的新类叫派生类(子类)。
抽象函数和虚函数
虚函数是有代码的并明确允许子类去覆盖,但子类也可不覆盖,就是说可以直接用,不用重写。
抽象函数是没有代码,子类继承后一定要重写。
简单来说虚函数(Virtual)已经包含了也必须包含默认的实现,所以在派生类中可以重新实现也可以不实现这些虚函数。
抽象函数(abstract)没有提供默认实现,所以在派生类中必须实现这些抽象函数。
接口中的函数类似于抽象函数,也不提供默认实现,实现接口的类也必须实现这些函数。
多态
把一个子类实例赋值给一个父类引用,此时调用父类中的虚方法,且子类重写过,则运行时调用的是实际类型的方法,即子类中override的方法。
java的实例方法调用是基于运行时的实际类型的动态调用,而非变量的声明类型。