C++ 面向对象编程 (OOP) 概念

2025 年 8 月 29 日 | 阅读 10 分钟

C++ 编程的主要目的是将面向对象的概念引入 C 编程语言。面向对象编程是一种提供许多概念的范例,例如 继承、数据绑定、多态 等。

将一切都表示为对象的编程范例被称为真正的面向对象编程语言。Smalltalk 被认为是第一门真正的面向对象编程语言。

OOPs (面向对象程序系统)

对象是指一个现实世界的实体,例如一支笔、一把椅子、一张桌子等。面向对象编程是一种使用 和对象来设计程序的面向对象方法或范例。

Cpp Oops concept

它通过提供一些概念来简化软件开发和维护

1. 类 (Class)

对象的集合称为类。它是一个逻辑实体。必须创建一个 C++ 类的实例才能访问和使用用户定义数据类型的成员数据和成员函数。对象的类充当其蓝图。

示例

在 C++ 中,使用关键字 class 定义类,如下面的示例所示。

示例

编译并运行

输出

Name: John, Age: 24

说明

在此示例中,Student 类具有私有成员 name 和 age,并通过构造函数进行初始化。display() 函数打印学生的详细信息,并被标记为 const 以确保它不会修改类成员。

类的优点

  • 更好的代码组织:类在逻辑上组织代码。
  • 封装和数据隐藏:封装和数据隐藏的组合有助于管理员控制数据访问。
  • 代码重用:同一个类允许开发人员从中创建多个不同的对象实例。

2. 对象

任何具有状态和行为的实体都被称为对象,例如椅子、笔、桌子、键盘、自行车等。它可以是物理的或逻辑的。

类的任何实例都表示为一个对象。对象是其相应类的实例,它代表一个具有数据属性和相关功能的现实世界实体。

语法

它具有以下语法:

示例

让我们以一个例子来说明 C++ 中的对象。

示例

编译并运行

输出

Brand: Tesla, Speed: 150 km/h

说明

在此 C++ 程序中,它定义了一个具有公共整数 speed 和 showDetails() 函数的 Car 类,但缺少 brand 成员的定义,导致编译错误。为了解决这个问题,brand 应该在类中声明为成员 变量

对象的优点

  • 数据封装:在 C++ 对象中,存储和数据管理都通过封装安全地进行。
  • 代码重用:对象提供了开发人员创建可重用模块化代码的能力。
  • 现实世界映射:通过直接表示现实世界元素的对象的交互式设计变得更容易。

3. 继承

当一个对象获得父对象的全部属性和行为时,即 继承,它提供了代码重用。它用于实现运行时多态。

  • 子类:子类或派生类是指从另一个类接收属性的类。
  • 超类:“基类”或“超类”是指子类从中继承其属性的类。
  • 重用性:因此,当我们希望创建一个新类但现有类已包含我们所需的部分代码时,我们可以由于继承而从旧类生成新类。它允许我们使用预先存在的类的字段和方法。

语法

它具有以下语法:

示例

让我们以一个例子来说明 C++ 中的继承。

示例

编译并运行

输出

Brand: Hundai
Speed: 150 km/h

说明

此 C++ 程序定义了一个具有受保护的 brand 属性的 Vehicle 类和一个添加了 speed 属性的派生 Car 类。Car 中的 showDetails() 函数显示 brand 和 speed,这展示了继承。

继承的优点

  • 代码重用:由于父类的功能可以重复使用,因此可以实现代码重用功能。
  • 分层组织:分层组织建立了相关的类的一个良好组织的系统。
  • 易于维护:对基类的修改会通过简单的维护方法自动使派生类受益。

4. 多态

当一项任务以不同方式执行时,即 多态。例如,为了以不同的方式说服客户,绘制某些东西,例如形状或矩形等。

不同的情况可能导致操作表现出不同的行为。操作中使用的对象类型决定了行为。

语法

它具有以下语法:

示例

让我们以一个例子来说明 C++ 中的多态。

示例

编译并运行

输出

Bark

说明

此程序通过使用基类指针 (Animal*) 调用派生 Dog 类的重写的 makeSound() 函数来演示多态。在 Animal 中添加了一个虚拟析构函数,以确保在动态删除对象时进行正确清理。

多态的优点

  • 代码灵活性:由于代码的灵活性,系统可以动态地执行方法重写。
  • 消除代码重复:通用接口消除了重复,因为它适用于各种数据类型。
  • 提高可扩展性:当开发人员需要处理新的系统需求时,该技术使软件框架具有可扩展性。

5. 抽象

抽象是隐藏内部实现细节而仅向用户公开必要功能的过程。数据抽象是向外部世界公开必要信息而隐藏实现或后台信息的过程。在 C++ 中,我们使用抽象类和接口来实现抽象。

语法

它具有以下语法:

示例

让我们以一个例子来说明 C++ 中的抽象。

示例

编译并运行

输出

Processing withdrawal of $80

说明

此 C++ 程序定义了一个 ATM 类,其中包含一个 withdrawMoney() 方法来显示提款消息。main() 函数创建一个 ATM 对象并调用 withdrawMoney() 传递一个示例金额。

抽象的优点

  • 简化复杂系统:用户与界面的交互保持简单。
  • 增强安全性:系统保护内部组件不被用户看到。
  • 提高可维护性:实现的变化不会影响系统的用户。

6. 封装

在 C++ 中,封装被定义为将代码和数据绑定(或包装)到单个单元中。例如,胶囊用不同的药物包装。

封装通常被理解为将相关的信息和数据分组到单个实体中。封装是在面向对象编程中将数据与其操作函数绑定在一起的过程。

语法

它具有以下语法:

示例

让我们以一个例子来说明 C++ 中的封装。

示例

编译并运行

输出

Area of Rectangle = 96

封装的优点

  • 数据安全:它防止意外修改敏感数据。
  • 提高可维护性:修改的实现不会影响通过其接口访问类的用户。
  • 模块化代码设计:模块化代码设计结构允许开发人员实现易于管理的结构化代码。

OOP 相对于过程式编程语言的优势

  • OOP 使开发和维护更容易,而在过程式编程语言中,随着项目规模的增长,管理代码会变得困难。
  • OOP 提供数据隐藏,而在过程式编程语言中,全局数据可以从任何地方访问。
  • OOP 能够更有效地模拟现实世界的事件。如果我们使用面向对象编程语言,我们可以为现实世界的问题提供解决方案。

为什么我们需要 C++ 中的 OOP?

早期的编程方法存在各种缺点,性能也很差。这种方法无法有效解决现实世界的问题,因为与过程式编程一样,我们无法在程序中重用代码,全局数据访问存在困难等等。

通过使用类和对象,面向对象编程使代码维护变得简单。由于继承支持代码重用,程序会更简单,因为我们不必重复编写相同的代码。封装和抽象等概念也提供了数据隐藏。

为什么 C++ 是部分 OOP?

C 语言的面向对象特性是构建 C++ 语言的主要动机。

尽管 C++ 编程语言支持 OOP 概念,包括类、对象、继承、封装、抽象和多态,但它被归类为部分面向对象编程语言。

  1. 在 C++ 中,main 函数必须始终在类之外,并且是必需的。这意味着我们可以不使用类和对象,并且应用程序中只有一个 main 函数。在这种情况下,它被表达为一个对象,这标志着第一个纯 OOP 的违反。
  2. 全局变量是 C++ 编程语言的一个特性,它可以被程序中的任何其他对象访问,并且定义在程序之外。这里破坏了封装。即使 C++ 鼓励类的对象封装,但它对全局变量却忽略了。

结论

总之,在阅读了本课程的 OOPs C++ 概念后,我们将对面向对象编程的必要性、C++ OOPs 是什么以及 OOPs 的基本概念,如多态、继承、封装等有所了解。除了多态和继承的示例,您还了解了 C++ OOPs 的优点。


C++ OOPs 概念选择题

1. 在 OOP 中使用封装的主要优势是什么?

  1. 它允许多重继承
  2. 封装保护底层代码不被程序用户看到。
  3. 封装技术使数据能够被全球访问。
  4. 由于这种方法,程序规模会扩大。
 

答案:b) 封装保护底层代码不被程序用户看到。


2. 在面向对象编程中,类代表什么?

  1. 具有属性的特定对象
  2. 一个蓝图,作为创建新对象的基础。
  3. 旧系统使用函数来转换输入数据。
  4. 一个存储多个值的变量
 

答案:b) 一个蓝图,作为创建新对象的基础。


3. 关于 C++ 中的多态,以下哪个陈述是正确的?

  1. 该设计允许函数具有多种可能的执行方法
  2. 它阻止了数据隐藏
  3. 它限制了继承
  4. 这种方法阻止了对对象的需求。
 

答案:a) 该设计允许函数具有多种可能的执行方法


4. 以下哪个选项正确描述了继承?

  1. 一个类通过继承获得了另一个类的所有属性。
  2. 使用另一个类的私有成员代表了不正确的实现方法。
  3. 一个函数可以激活另一个嵌套函数。
  4. 一个可以保存多个值的变量
 

答案:a) 一个类通过继承获得了另一个类的所有属性。


5. C++ 中的对象是什么?

  1. 数据蓝图和函数定义共同在 C++ 中创建了一个蓝图。
  2. 函数充当离散实体来执行不同的任务。
  3. 类的实例
  4. 一个存储多个值的变量
 

答案:c) 类的实例


下一主题C++ 类