面向对象编程(OOP)是当前主流的程序设计范型,是一种编程的语言模式。面向对象分析(OOA)就是以“类”的概念去认识问题、分析问题。面向对象设计(OOD)是在OOA的基础上进行数据建模,从而建立所要操作的对象以及它们之间的联系。OOP则是在前两者的基础上,对数据模型进一步细化,定义它包含的数据类型和任何能够操作它的逻辑程序,每个不同的逻辑程序被认为是一个方法。在实际应用中,一个类的现实实例被称作一个“对象”,或者被称作类的一个“实例”。

    面向对象编程语言有三个基本特征:封装继承多态

    封装就是把对象的属性(状态)和方法(行为)结合在一起,并尽可能隐蔽对象的内部细节,形成一个不可分割的独立单位(即对象),对外形成一个边界,只保留有限的对外接口使之与外部发生联系。

    继承是软件重用的一种形式,它通过吸收现有类的数据(属性)和方法,并增加新功能或修改现有功能来构建新类。

    多态是指在父类中定义的属性或方法被子类继承之后,可以具有不同的表现行为。这使得同一个属性或方法在父类及其各个子类中具有不同的语义。


    C++访问权限区分符:

1、public:公共的,都可访问

2、protected:受保护的,类内及子类可以访问

3、private:私有的,只能在类内部访问

4、如果未指明访问权限,则默认为private


    需要特别注意的是:类的定义一般会用两个文件来实现,一个是类的定义文件,在头文件(.h)中实现;另一个是类的构造方法、成员函数的具体实现,用源文件(.cpp)实现。


    在类的实现文件中,类的成员函数前面都有类名加两个冒号“ :: ”,来说明这是哪个类的成员函数。


  定义完一个类后,可以创建该类的对象,即对该类进行实例化。如果想在创建对象时进行属性的初始化操作,则可通过类的特殊成员——构造函数来完成。构造函数是对象被创建时用于初始化对象的成员函数,与一般的函数相比,构造函数有两点不同:

1、构造函数的函数名与它所在类的类名完全一样;

2、构造函数没有返回类型。


    构造函数可以重载。


创建对象有两种方法:栈对象堆对象

1、创建栈对象的方法:

class_name obj;  // 类定义没有提供构造函数,或者调用默认的构造函数
class_name obj(argu_list);  // 调用类的带参数的构造函数



2、创建堆对象的方法:

class_name* proj = new class_name;  // 类定义没有提供构造函数,或者调用默认的构造函数
class_name* proj = new class_name(argu_list);  // 调用类的带参数的构造函数



注意:栈对象离开作用域后,其所占内存由系统自动回收;堆对象离开作用域后,其所占内存并不会自动释放,必须手动释放。例如用delete语句。



    析构函数也是类中的特殊成员函数,与定义它的类具有相同的名字,但要在前面加上一个波浪号“~”。析构函数没有参数,也没有返回值,而且不能重载,因此一个类中只能有一个析构函数

    析构函数执行与构造函数相反的操作,通常用于释放分配给对象的存储空间。当程序超出类对象的作用域时,或者对一个类指针使用delete运算符时,系统将自动调用析构函数。


    与构造函数一样,如果在类中不定义析构函数,编译器会产生一个默认的析构函数,对于大多数类来说,默认的析构函数就能满足要求。如果在一个对象中申请系统资源(一般是在构造函数内),则需要定义析构函数,以完成系统资源的释放工作。


函数如果是直接定义在类体中的,这样的成员函数就是内联成员函数。可以显式地使用inline关键字(可省略)定义内联成员函数。内联成员函数也可以声明在类定义(.h)文件和定义在类实现(.cpp)文件中。


    静态类成员:C++中通过static关键字进行定义。静态类的数据成员,要在类定义体外单独实例化;静态类的成员函数,若不是定义在类体内的内联函数,而是在类定义外,例如在类的实现文件中定义,则不应该再添加static关键字进行修饰;静态类成员可以通过类名访问,也可以通过实例访问。


    this指针:是指向一个对象地址的指针。this指针是一种隐含指针,它隐含于每个类的非静态成员函数中,即每一个非静态成员函数都有一个this指针变量,this指针指向该成员函数所属类的对象。当实例化一个类的对象时,该对象的成员函数均含有系统自动产生的指向当前对象的this指针。在成员函数中可以通过this指针访问类中的成员变量,格式如下:


this->成员变量



    注意:访问类中的成员变量一般会省略this关键字,这是一种习惯性做法,编译器本身会自动添加对this指针的使用。另外,由于静态成员函数不是与类实例相关的,因此不包含this指针。



    C++支持类的继承,在C++中,被继承的了叫做基类或者父类,继承基类的类叫做派生类或子类。


    C++规定,在父类中声明的虚函数,在派生类中的同名虚函数可以不添加virtual关键字,一样具有虚函数特性。