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

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,关注后即可获取最新文章推送

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/820929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读02】一种基于双通道的水下图像增强卷积神经网络

来源&#xff1a;海洋论坛▏一种基于双通道的水下图像增强卷积神经网络 当前不会的 一、背景&#xff1a; 水下图像增强方法包含有无水下成像模型的水下图像增强方法、基于水下成像模型的水下图像恢复方法、水下成像模型与深度学习相结合的方法以及完全采用深度学习的方…

基于Python的景区票务人脸识别系统(V2.0)

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

数据结构速成--数据结构和算法

由于是速成专题&#xff0c;因此内容不会十分全面&#xff0c;只会涵盖考试重点&#xff0c;各学校课程要求不同 &#xff0c;大家可以按照考纲复习&#xff0c;不全面的内容&#xff0c;可以看一下小编主页数据结构初阶的内容&#xff0c;找到对应专题详细学习一下。 目录 一…

【Linux】磁盘阵列RAID技术

目录 一、RAID介绍 1.1 什么是RAID技术&#xff1f; 1.2 为什么要使用RAID技术&#xff1f; 二、RAID级别 2.1 常见的RAID级别 2.2 常见RAID介绍 三、RAID特性对比 一、RAID介绍 1.1 什么是RAID技术&#xff1f; 把多块独立的物理磁盘按不同的方式组合起来形成一个硬盘…

【ENSP】华为三层交换机配置AAA认证,开启telnet服务

配置步骤 1.给交换机配置ip地址&#xff0c;以便登陆 2.配置AAA&#xff0c;用户名&#xff0c;密码&#xff0c;服务类型&#xff0c;用户权限 3.配置接入设备的数量 4.开启telnet服务 LSW2交换机配置 u t m #关闭提示 sys …

基于单链表实现通讯管理系统!(有完整源码!)

​ 个人主页&#xff1a;秋风起&#xff0c;再归来~ 文章专栏&#xff1a;C语言实战项目 个人格言&#xff1a;悟已往之不谏&#xff0c;知来者犹可追 克心守己&#xff0c;律己则安&#xff01; 1、前言 友友们&#xff0c;这篇文章是基于单链…

使用Python模仿文件行为

在Python中&#xff0c;你可以通过文件操作函数&#xff08;如open()函数&#xff09;以及模拟输入输出流的库&#xff08;如io模块&#xff09;来模拟文件行为。下面是一些示例&#xff0c;展示了如何使用这些工具在Python中模拟文件行为。 1、问题背景 在编写一个脚本时&…

Springboot框架——4.整合jdbc

1.pom.xml中导入依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupI…

SpringMVC(三)【REST 风格】

1、REST 风格 1.1、REST 简介 REST&#xff08;Representational State Transfer&#xff09;&#xff0c;表现形式状态转换 在开发中&#xff0c;它其实指的就是访问网络资源的格式 1.1.1、传统风格资源描述形式 http://localhost/user/getById?id1http://localhost/user…

飞书API(4):筛选数据的三种思路

截止到上一篇&#xff0c;终于通过飞书 API 完整获取到飞书多维表的数据。但是&#xff0c;有些场景&#xff0c;比如数据源会出现脏数据&#xff0c;毕竟如果是运营过程多人协作维护的数据&#xff0c;要想保持数据完美简直是天方夜谭&#xff01;再比如我们不需要完整的数据&…

【JavaWeb】Day46.Mybatis——入门

JDBC介绍 通过Mybatis可以很方便的进行数据库的访问操作。其实java语言操作数据库&#xff0c;只能通过一种方式&#xff1a;使用sun公司提供的 JDBC 规范。Mybatis框架&#xff0c;就是对原始的JDBC程序的封装。 JDBC&#xff1a; ( Java DataBase Connectivity )&#xff0c…

开源了!自从用了这个远程控制工具,从此把 TeamViewer 扔一边了【文末领项目源码】

在工作中&#xff0c;咱们经常要使用向日葵、TeamViewer 等远程控制工具&#xff0c;来远程操控项目上的主机去解决一些部署在现场的系统问题&#xff0c;亦或是在家偶尔加班时用家里的电脑远程公司的电脑处理工作。但不爽的是&#xff0c;TeamViewer 用一用试用期就过了&#…

ES 大数据量按照日期分索引存储和查询

前言 ES 通常被用来存放各种日志数据或其他大批量数据&#xff0c;然后做统计。 对于请求量大的系统来说&#xff0c;日志或其他业务数据无比庞大&#xff0c;需要按日期来划分索引&#xff0c;便于做冷热数据的迁移管理。大批量的业务数据也要根据日期来区分&#xff0c;提高…

Java --- 类与对象

上篇内容给大家带来了Java的语句与数组的相关内容&#xff0c;那么本期内容比较重要&#xff0c;需要读者们掌握Java面向对象编程的根本&#xff0c;通过这篇博客来让读者浅入理解Java类的一些基本操作。 目录 一.特点&#xff1a; 二.成员变量&#xff1a; 三.访问修饰符&a…

【JavaSE】搞定String类

前言 本篇会细致讲解String类的常见用法&#xff0c;让小伙伴们搞定String类~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 常用的三种字符串构造 字符串长度length 字符串比较 比较 比较字符串的内容equals…

MySQL DDL 通用语法

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

libftdi1学习笔记 4 - MPSSE SPI

目录 1. 初始化 2. SCK默认电平设置 3. GPIO控制 4. spi全双工通信 4.1 MSB/LSB 4.2 分配command缓存 4.3 spi0TransferBit 4.3 spi1TransferBit 4.4 spi2TransferBit 4.5 spi3TransferBit 4.6 写命令序列 4.7 读数据 4.8 组合实际数据 5. 验证 5.1 初始化FTDI设…

短视频底层逻辑分析

短视频底层逻辑 1.迭代模型_ev 2.Douyin的本质_ev 3.Douyin的审核机制_ev 4.平台趋势_ev 5.定位_ev 6.建立用户期待_ev 7.好内容的定义_ev 8怎么做好内容_ev 9.如何做好选题_ev 10.如何快速模仿_ev 11.账号拆解的底层逻辑_ev 12选人的重要性_ev 13.内容的包装_ev 14.打造大IP的…

【中间件】ElasticSearch简介和基本操作

一、简介 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;支持各种数据类型&#xff0c;包括文本、数字、地理、结构化、非结构化 ,可以让你存储所有类型的数据&#xff0c;能够解决不断涌现出的各种用例。其构成如下&#xff1a; 说明&#xff1…

Python数学建模学习-PageRank算法

1-基本概念 PageRank算法是由Google创始人Larry Page在斯坦福大学时提出&#xff0c;又称PR&#xff0c;佩奇排名。主要针对网页进行排名&#xff0c;计算网站的重要性&#xff0c;优化搜索引擎的搜索结果。PR值是表示其重要性的因子。 中心思想&#xff1a; 数量假设&#…