C++抽象,封装,继承,多态
面向对象的基本概念有对象、类、抽象、封装、继承、多态、接口等
有的人说面向对象有四大基本特征,抽象,封装,继承,多态,但其实抽象可以抛出在外,本质来说,面向对象的基本特征是继承,封装,多态。
先来说C++中的对象和类:
类是对象的抽象,而对象是类的具体化,而要使用类的功能,具体就要先定义一个对象
例如:class Student { }; Student stu里面的stu就是对象 还有一种定义的方法 class { }stu1,stu2;
封装:其实封装和抽象可以归结到一起,抽象的是具体的实现,封装的是接口,封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成”类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,特定的访问权限来使用类的成员。封装可以隐藏实现细节, 使得代码模块化。
封装的简单一句话:封装就是将实例抽象得到的数据和行为(或功能)封装成一个类。
继承:继承是指这样一种能力,它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。其继承的过程,就是从一般到特殊的过程,它是类与类之间的一种关系,一个类通过继承的方法,可以得到另一个类属性和方法,达到代码重用的目的。
引申:
继承,有三种继承方法,分为实现继承,接口继承,可视化继承。
实现继承就是重新写一个函数去实现。用纯虚函数实现。
接口继承是指纯粹继承父辈的老底,也可以去重新实现。用虚函数实现。
可视化继承则是纯粹的全部自己实现,自己功能自己解决。对应的是非虚函数。
多态:C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖或者称为重写。而重载则是允许有多个同名的函数,而这些函数的参数列表不同,允许参数个数不同,参数类型不同,或者两者都不同。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数
多态简单一句话:一种调用,多种状态(一个接口,多种方法)
引申:
重载
同一个类中,函数名相同,参数列表不同的函数之间是重载关系。
覆盖
子类重写父类的虚函数,函数名相同,参数列表相同,返回值相同的虚函数。
隐藏(有两种情况)
1. 派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字。
2. 派生类的函数与基类的函数同名,并且参数也相同。但是基类函数没有virtual关键字。