C++ 递归与面向对象编程基础

c++,递归,面向对象编程,基础 · 浏览次数 : 27

小编点评

**递归递归的例子** 递归递归是一种在函数中调用自身而执行的编程技术。递归示例以下将两个数字相加: ```cpp int sum(int k) { if (k > 0) { return k + sum(k - 1); } else { return 0; } } ``` **递归的原理** 递归的基本思想是将复杂问题分解为更简单的子问题,直到解决子问题时返回原始问题的答案。递归调用自身直到子问题的答案被计算完毕,最终返回原始问题的答案。 **递归示例的执行过程** 1. 首先,函数 `sum()` 计算 10 + sum(9) 的结果。 2. 然后,函数递归调用 itself以计算 10 + sum(8) 的结果。 3. 继续递归调用自身以计算 10 + sum(7) 的结果。 4. 一直递归下去,直到最后计算 10 + sum(0) 的结果。 5. 由于在 k 为 0 时函数不会调用自身,因此递归过程停止并返回结果。 **递归的优点** * **代码可重用性:**递归递归允许您创建可用于多个程序的类和对象。 * **代码维护性:**递归代码通常更容易维护,因为它们更易于理解和修改。 * **代码可扩展性:**递归代码通常更易于扩展,因为您可以通过添加新类或方法来轻松添加新功能。 **注意事项** * **陷入无限循环:**递归递归可能会陷入无限循环,因为函数无法知道何时停止递归。 * **内存占用:**递归递归可能会对内存占用造成负面影响。 * **性能:**递归递归对于性能可能有些影响,因为每个函数调用都会执行多次。

正文

C++ 递归

递归是一种使函数调用自身的技术。这种技术提供了一种将复杂问题分解为简单问题的方法,从而更容易解决问题。

递归可能有点难以理解。理解其工作原理的最佳方法是通过实验来尝试。

递归示例

将两个数字相加很容易做到,但将一系列数字相加就更复杂了。在下面的示例中,通过将其分解为将两个数字相加的简单任务,使用递归将一系列数字相加:

int sum(int k) {
  if (k > 0) {
    return k + sum(k - 1);
  } else {
    return 0;
  }
}

int main() {
  int result = sum(10);
  cout << result;
  return 0;
}

示例解释

当调用 sum() 函数时,它将参数 k 加到小于 k 的所有数字的和中,并返回结果。当 k 变为 0 时,函数只返回 0。运行时,程序按照以下步骤执行:

10 + sum(9)
10 + ( 9 + sum(8) )
10 + ( 9 + ( 8 + sum(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + sum(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0

由于在 k 为 0 时函数不会调用自身,程序在此处停止并返回结果。

注意事项

开发人员在使用递归时应非常小心,因为很容易陷入编写永远不会终止的函数,或者使用过多的内存或处理器资源。然而,当正确编写时,递归可以是一种非常高效和数学上优雅的编程方法。

总结

递归是一种强大的工具,可以用于解决各种编程问题。但是,重要的是要谨慎使用递归,并确保您的代码不会陷入无限循环。

C++ 面向对象编程

C++ 面向对象编程(C++ OOP)是将面向对象编程(OOP)概念应用于 C++ 编程语言的过程。它是一种编程范式,专注于创建可重用、可维护和易于理解的代码。

面向对象编程与过程式编程的区别

面向对象编程与过程式编程的主要区别在于,它将程序分解为可互动的对象,而不是一系列过程或函数。每个对象都有自己的数据(属性)和行为(方法),并封装在一个类中。这使得代码更易于组织、理解和维护。

以下是面向对象编程的一些主要优势:

  • 代码可重用性: OOP 鼓励代码重用,因为它允许您创建可用于多个程序的类和对象。这可以节省开发时间并提高代码质量。
  • 代码维护性: OOP 代码通常更容易维护,因为它们更易于理解和修改。类和对象的封装特性有助于隔离代码更改,从而减少意外影响。
  • 代码可扩展性: OOP 代码通常更易于扩展,因为您可以通过添加新类或方法来轻松添加新功能。

C++ 中的基本 OOP 概念

C++ OOP 的核心是以下概念:

  • 类: 类是用于创建对象的蓝图。它定义了对象的属性和方法。
  • 对象: 对象是类的实例。它包含类的属性值并可以调用类的方法。
  • 属性: 属性是对象的特征或数据。
  • 方法: 方法是对象的函数或行为。

创建 C++ 类

要创建 C++ 类,请使用 class 关键字后跟类名:

class MyClass {
  // 类成员定义
};

类成员可以包括属性和方法。属性是类的变量,方法是类的函数。

创建 C++ 对象

要创建 C++ 对象,请使用类名后跟对象名:

MyClass myObj;

这将创建一个名为 myObjMyClass 类对象。

访问类成员

可以使用点语法(.)访问类对象的属性和方法:

myObj.myProperty; // 访问属性
myObj.myMethod(); // 调用方法

示例:创建一个简单的类

以下是一个创建名为 Car 的简单类的示例:

class Car {
public:
  string brand;
  string model;
  int year;

  void startEngine() {
    cout << "Engine started!" << endl;
  }

  void stopEngine() {
    cout << "Engine stopped!" << endl;
  }
};

此类定义了三个属性:brandmodelyear,以及两个方法:startEngine()stopEngine()

要创建 Car 类的对象并调用其方法,可以使用以下代码:

Car myCar;

myCar.brand = "Ford";
myCar.model = "Mustang";
myCar.year = 1967;

myCar.startEngine();
myCar.stopEngine();

此代码将创建一个名为 myCarCar 对象,设置其属性并调用其方法。

总结

C++ 面向对象编程是一种强大的工具,可用于创建可维护、可扩展和易于理解的代码。通过理解类、对象、属性和方法等基本概念,您可以开始构建面向对象的 C++ 程序。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

与C++ 递归与面向对象编程基础相似的内容:

C++ 递归与面向对象编程基础

C++ 递归 递归是一种使函数调用自身的技术。这种技术提供了一种将复杂问题分解为简单问题的方法,从而更容易解决问题。 递归可能有点难以理解。理解其工作原理的最佳方法是通过实验来尝试。 递归示例 将两个数字相加很容易做到,但将一系列数字相加就更复杂了。在下面的示例中,通过将其分解为将两个数字相加的简单

Composite 组合模式简介与 C# 示例【结构型3】【设计模式来了_8】

〇、简介 1、什么是组合设计模式? 一句话解释: 针对树形结构的任意节点,都实现了同一接口,他们具有相同的操作,可以通过某一操作来遍历全部节点。 组合模式通过使用树形结构来组合对象,用来表示部分以及整体层次。组合模式属于结构型模式,多用于递归。 官方意图描述:将对象组合成树形结构,以表示“部分-整体

C++算法之旅、09 力扣篇 | 常见面试笔试题(上)算法小白专用

算法学习笔记,记录容易忘记的知识点和难题。详解时空复杂度、50道常见面试笔试题,包括数组、单链表、栈、队列、字符串、哈希表、二叉树、递归、迭代、分治类型题目,均带思路与C++题解

【算法】用c#实现德州扑克卡牌游戏规则

德州扑克是一种牌类游戏,可多人参与,它的玩法是,玩家每人发两张底牌,桌面依次发5张公共牌,玩家用自己的两张底牌和5张公共牌自由组合,按大小决定胜负。 使用c#完成功能Hand()以返回手牌类型和按重要性递减顺序排列的等级列表,用于与同类型的其他手牌进行比较,即最佳手牌。 可能的手牌按价值降序排列:

汉诺塔问题(递归)

博客地址:https://www.cnblogs.com/zylyehuo/ # _*_coding:utf-8_*_ def hanoi(n, a, b, c): if n > 0: hanoi(n - 1, a, c, b) print("moving from %s to %s" % (a,

C#快速排序算法

快速排序实现原理 快速排序(Quick Sort)是一种常用的排序算法,它基于分治的思想,通过将一个无序的序列分割成两个子序列,并递归地对子序列进行排序,最终完成整个序列的排序。 其基本思路如下: 选择数组中的一个元素作为基准(pivot)。 将数组中小于等于基准的元素放在基准的左边,将大于基准的元

CF437E The Child and Polygon

# The Child and Polygon 题解 > 这世界这么大,遇到了这个奇奇怪怪的题。 这道题其实可以很自然的联想到卡特兰数。 在卡特兰数的计数中,有这么一个意义:$C_n$ 表示把有 $n+2$ 条边的凸多边形分成 $n$ 个三角形的方案数。 利用这个意义可以得到 $C_n$ 的另一个递

C# 开发技巧 轻松监控方法执行耗时

前言 MethodTimer.Fody 是一个功能强大的库,可以用于测量 .NET 应用程序中的方法的执行时间。允许你在不修改代码的情况下,自动地测量和记录方法的执行时间。 这个工具是基于.NET的 weaving 技术,通过修改IL(Intermediate Language,中间语言)代码来插入

C#开源、简单易用的Dapper扩展类库 - Dommel

前言 今天大姚给大家分享一个C#开源(MIT License)、免费、简单易用的Dapper扩展类库,帮助.NET开发者使用Dapper的CRUD操作变得更简单:Dommel。 项目特性 Dommel 使用 IDbConnection 接口上的扩展方法为 CRUD 操作提供了便捷的 API。 Dom

C语言指针易混淆知识点总结

指针 定义 指针是一个变量,存储另一个变量的内存地址,它允许直接访问和操作内存中的数据,使得程序能够以更灵活和高效的方式处理数据和内存。 获取变量地址:使用取地址符 &。 访问地址上的数据:使用解引用符 *。 例子1 指针是存储另一个变量地址的变量。通过使用取地址符 & 和解引用符 *,我们可以灵活