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++ 递归与面向对象编程基础的更多相关文章

  1. (转)C++笔记:面向对象编程基础

    非常棒的总结 http://blog.csdn.net/liufei_learning/article/details/21312701 面向对象编程基础 面向对象编程基于三个基本概念: 数据抽象-类 ...

  2. 大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础

    第五章 函数式编程-基础5.1 函数式编程内容说明5.1.1 函数式编程内容5.1.2 函数式编程授课顺序5.2 函数式编程介绍5.2.1 几个概念的说明5.2.2 方法.函数.函数式编程和面向对象编 ...

  3. 第二章 Matlab面向对象编程基础

    DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...

  4. [.net 面向对象编程基础] (1) 开篇

    [.net 面向对象编程基础] (1)开篇 使用.net进行面向对象编程也有好长一段时间了,整天都忙于赶项目,完成项目任务之中.最近偶有闲暇,看了项目组中的同学写的代码,感慨颇深.感觉除了定义个类,就 ...

  5. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  6. [.net 面向对象编程基础] (2) 关于面向对象编程

    [.net 面向对象编程基础]  (2)  关于面向对象编程 首先是,面向对象编程英文 Object-Oriented Programming 简称 OOP 通俗来说,就是 针对对象编程的意思 那么问 ...

  7. [.net 面向对象编程基础] (3) 基础中的基础——数据类型

    [.net 面向对象编程基础] (3) 基础中的基础——数据类型 关于数据类型,这是基础中的基础. 基础..基础..基础.基本功必须要扎实. 首先,从使用电脑开始,再到编程,电脑要存储数据,就要按类型 ...

  8. [.net 面向对象编程基础] (4) 基础中的基础——数据类型转换

    [.net面向对象编程基础] (4)基础中的基础——数据类型转换 1.为什么要进行数据转换? 首先,为什么要进行数据转换,拿值类型例子说明一下, 比如:我们要把23角零钱,换成2.30元,就需要把整形 ...

  9. [.net 面向对象编程基础] (5) 基础中的基础——变量和常量

    [.net面向对象编程基础]  (5) 基础中的基础——变量和常量 1.常量:在编译时其值能够确定,并且程序运行过程中值不发生变化的量. 通俗来说,就是定义一个不能改变值的量.既然不能变动值,那就必须 ...

  10. [.net 面向对象编程基础] (6) 基础中的基础——运算符和表达式

    [.net 面向对象编程基础] (6) 基础中的基础——运算符和表达式 说起C#运算符和表达式,小伙伴们肯定以为很简单,其实要用好表达式,不是一件容易的事.一个好的表达式可以让你做事半功倍的效果,比如 ...

随机推荐

  1. Spring事务(五)-事务隔离级别

    Spring @Transactional注解isolation属性 @Transactional注解通过isolation属性设置事务隔离级别.如下: @Transactional(isolatio ...

  2. SpringMVC简介 & 原理

    特点 1.轻量级,简单易学 2.高效,基于请求响应的MVC框架 3.与Spring兼容性好,与之无缝接合(就是它的一部分) 4.约定优于配置(maven) 5.功能强大:支持RESTful  数据验证 ...

  3. 发现这个ip有bt下载,所以改路由,让其访问到一个不存在的ip上 route add

    管理员权限cmd 发现这个ip有bt下载,所以改路由,让其访问到一个不存在的ip上 route add -p 195.154.181.225 mask 255.255.255.255 127.0.0. ...

  4. idea提交时候忽略改动部分文件

    之前因为本地开发环境和线上开发环境有区别,bootstrap.xml里的log存放位置在我本地mac不存在路径,我就只能通过修改log路径才能让项目跑起来.但是,本地修改的东西每次commit时候都显 ...

  5. clickhouse 安装和远程登录开启

    一.Clickhouse的安装 1.添加yum源 yum-config-manager --add-repo http://repo.red-soft.biz/repos/clickhouse/rep ...

  6. StableSwarmUI:功能强大且易于使用的Stable Diffusion WebUI

    StableSwarmUI是一个模块化和可定制的Stable Diffusion WebUI,最近发布了0.6.1-Beta版本.这个开源项目,托管在GitHub上:https://github.co ...

  7. 常用命令--复制-备份--cp--mv--scp--rsync

    常用命令--复制-备份--cp--mv--scp--rsync cp cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录.它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在 ...

  8. SQLI-LABS(Less-9、10)

    Less-9(GET-Blind-Time based-Single Quotes) 打开Less-9页面,可以看到页面中间有一句Please input the ID as parameter wi ...

  9. 记录--页面使用 scale 缩放实践

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近接到一个任务,需要把页面放大1.5倍显示.这里使用 css 里的 transform: scale(1.5) 来实现. documen ...

  10. 记录--『uni-app、小程序』蓝牙连接、读写数据全过程

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 本文简介 这是一次真实的 蓝牙收发数据 的全过程讲解. 本文使用 uni-app + Vue3 的方式进行开发,以手机app的方式运行(微 ...