面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石 。
首先,我们对面向对象编程的四个特性进行字面层次的解释。
抽象:根据多个对象,去观察他们的共同属性和行为,提取出来;
封装:把提取出来的共性整合在一起,得到一个整体,并且对外提供一些接口供我们外部调用;
继承:新的类从已有类那里得到已有的特性;
多态:同一个函数名,传入不同的参数,执行不同的函数体。
一、抽象:
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来却不是这样:并不是所有的类都是用来描绘对象的, 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类 。C++抽象类是为子类抽象一个基类,抽象类的主要作用是为子类提供相同的属性和方法,其他如果需要在子类中修改方法,需要将其声明为纯虚函数。
question:类和对象的区别是什么?
类:把属性和行为整合在一起描述一类事物的自定义的数据类型,c++中把这种数据类型称为类;
对象:类这个类型定义出来的变量叫做对象;
区别:类是对象的抽象;对象是类的具体实例
二、封装
封装的作用:
(1)在设计类的时候,属性和行为写在一起,表现事物;
(2)类在设计时,可以把属性和行为放在不同的权限下,加以控制;
访问权限有三种:
- public 公共权限(类内可以访问 类外可以访问)
- protected 保护权限(类内可以访问 类外不可以访问)
- private 私有权限(类内可以访问 类外不可以访问)
eg:设计一个圆类,求圆的周长
三、继承
继承方式包括 public(公有的)、private(私有的)和 protected(受保护的),此项是可选的,如果不写,那么默认为 private。不同的继承方式会影响基类成员在派生类中的访问权限。
(1)public继承方式
基类中所有 public 成员在派生类中为 public 属性;
基类中所有 protected 成员在派生类中为 protected 属性;
基类中所有 private 成员在派生类中不能使用。
(2)protected继承方式
基类中的所有 public 成员在派生类中为 protected 属性;
基类中的所有 protected 成员在派生类中为 protected 属性;
基类中的所有 private 成员在派生类中不能使用。
(3)private继承方式
基类中的所有 public 成员在派生类中均为 private 属性;
基类中的所有 protected 成员在派生类中均为 private 属性;
基类中的所有 private 成员在派生类中不能使用。
使用继承:类A是类B的一种特殊版本的话,就可以采用继承;
如何继承:子类继承父类的所有(数据成员、成员函数),友元是不具有继承;
继承格式:class 子类名:继承方式 父类名{};
四、多态
C++中的多态分为静态多态和动态多态两种,其中:
静态多态在编译阶段实现,其原理是由函数重载实现,通过不同的实参调用其相应的同名函数。
动态多态通过虚函数实现,在运行时根据调用函数。
实现多态的条件:
(1)必须有继承;
(2)父类中有虚函数,子类中有重写这个虚函数;
(3)通过父类的指针或者引用去调用这个虚函数的时候
--》虚函数的重写:irtual修饰的成员函数称为虚函数,派生类中的虚函数与基类中虚函数满足函数名、参数、返回值均相同,叫做重写。