C++ 面向对象基本概念



C++中的面向对象编程

面向对象编程是一种编程风格,它有这几个特点:继承多态 、抽象、封装等。

面向对象特点

让我们尝试通过一个简单的例子来了解这些概念:人类分为男性和女性两种性别,当然我说的是一般来说,对吧?每个人(无论男性或女性)都有两条腿、两只手、两只眼睛、一个鼻子、一个心脏等,男性和女性有共同的身体部位,但男性中一些雄性特征和器官女性中不存在,同样的女性也有一些男性也不存在。

所有人类都会走路,吃饭,看,说话,听等等,男性和女性都有一些共同的行为,但两者之间还是有一些对方所没有的,例如:女性可以生育,而男性不能。

言归正传,让我们看看这一切与 C++ 和 OOPS 有什么关系,我们将尝试通过人类这个例子来解释上面提到的几个 OOPS 概念。



这里我们可以把人类当作一个类,类是定义其属性和功能的一个对象,像人类一样,拥有身体部位,并执行各种动作。

继承

考虑 人类 一个类,它具有手、腿、眼睛等属性,以及走路、说话、吃饭、看等功能, 男人女人 也是类,但大部分属性和函数都包含在 人类 中,因此它们可以使用 继承的概念从人类这个类中继承所有内容。

对象

比如一个名叫Abhishek的男人,他是 男人 类的一个实例,人类、男人或女人这些是一种统称,而你、我或者说某个人就是这些类的实例,这些实例才是真实存在的个体,而类只是一个逻辑定义。

抽象

抽象意味着,只向外界展示所需的东西,同时隐藏细节,继续我们的例子,人类可以说话、走路、听、吃,但实现细节对外界是隐藏的。

封装

用我们的例子来解释这个概念有点棘手,我们的腿被绑起来帮助我们走路,我们的手,帮我们拿东西,这种将属性绑定到函数的过程称为封装,当我们戴上手套时,手被隐藏起来,外界不能直接访问,变成私有性,这也是封装的一个特性。

多态性

多态性是一个概念,它允许我们通过改变它的完成方式或通过改变它完成的部分来重新定义某事的工作方式,两种方式都有不同的术语。

比如跑,同样是跑,我们可以跑50米,也可以跑100米,用的都是跑这个接口,但是传入的参数不同,执行的功能就不同,这就是面向对象的多态。

换个C++中真实的例子,我们使用运算符+,就可以实现整型数、浮点数、双精度类型之间的加法运算,这三种类型的加法操作其实是互不相同的,是由不同内容的函数实现的,这个例子就是使用了多态的特征。

当然上面讲的只是多态浅层的释义,在c++中多态最常用和最难以理解的点就是在继承类时子类重载父类的函数,即虚函数的使用。



OOPS 概念定义

现在,让我们讨论一些你将在 C++ 中使用的面向对象编程的主要特性(技术上)。

  1. 对象
  2. 抽象
  3. 封装
  4. 继承
  5. 重载
  6. 异常处理

对象

对象是 OOP 的基本单元,它们是类的实例,具有数据成员并使用各种成员函数来执行任务。

它类似于 C 语言中的结构体,结构体也可以当作类使用,实际上结构体也是类的一种,它也可以包含函数,区别是结构体默认成员和函数是私有,而类是公有。

因此,类声明并定义对象将具有哪些数据变量以及可以对类的对象执行哪些操作。

抽象

抽象是指仅暴露接口而隐藏细节,在 C++ 中,类可以向外部提供访问变量的private方法,使变量不被直接访问,或者类甚至可以声明每个人都可以访问的public方法,也可以只能让继承它的子类访问的protect方法,这取决于你定义的访问方式。

封装

也称为数据绑定,封装就是在类中将数据变量和函数绑定在一起。

继承

继承可以重用代码,被继承的类称为父类或基类(Base),继承的类称为子类或派生类(Derived)

因此,当派生类继承基类时,派生类可以使用基类中定义的所有功能,从而使代码可重用。

多态性

这是一个非常重要的特性,它允许我们创建具有相同名字但不同参数的函数,这些函数将执行不同的操作,或者,在子类中重新实现该函数,这是在C++中比较难以理解的地方,也是笔试面试题必考的内容,在后面的章节中我们将会详细讲解。

异常处理

异常处理是 OOP 的一个特性,用于处理运行时产生的未知的异常或错误。