编程教程 - 页 3

 

OOP 构造函数 - 您需要了解的构造函数类型(从基础到掌握)



OOP 构造函数 - 您需要了解的构造函数类型(从基础到掌握)

在本视频中,我们将讨论不同类型的构造函数、它们的用途以及为什么它们在编程中至关重要。我将提供示例并解释构造函数的背景工作原理。但在我们深入讨论之前,我想推荐一个我已经使用多年的工具,称为 PBS Studio。它是一个功能强大的静态代码分析器,有助于跟踪错误并提高代码质量。它可以轻松地与各种 IDE 集成,并支持 C、C++、C# 和 Java 等语言。如果您是学生,您可以找到下载链接,甚至可以找到免费获取它的方法。现在,让我们回到视频。

首先,我们创建一个名为“User”的类,其中包含公共成员:“firstName”、“lastName”、“age”和“email”。目前,我们为创建的每个用户手动为这些属性分配值。然而,随着用户数量的增长,这种方法变得不切实际。

相反,我们将使用构造函数探索更好的解决方案。构造函数用于构造对象,它们自动执行初始化对象属性的过程。我们将首先通过示例解释构造函数的背景工作原理。

为了演示目的,我们删除第二个用户并打印第一个用户的信息。通过运行该程序,您会注意到输出显示名字、姓氏和电子邮件的空值,以及较大或较小的年龄值。我们将探讨为什么会发生这种情况以及是否存在任何错误。

这种行为背后的原因是 C++ 提供的默认构造函数。它使用默认值初始化属性,例如我们看到的年龄的大数字。但是,当我们创建一个简单变量(例如“test”)而不对其进行初始化时,我们会遇到错误,因为简单类型没有默认构造函数。

现在,我们来看看构造函数的特征。首先,构造函数与类具有相同的名称,并且没有返回类型。其次,它们需要放置在班级的公共部分。第三,默认构造函数没有参数。第四,如果您不创建一个默认构造函数,C++ 会自动生成一个。五、参数化构造函数接收参数来初始化对象属性。最后,当创建该类的对象时,会自动调用默认构造函数。

让我们通过为属性分配默认值来实现我们自己的默认构造函数。通过此更改,每次我们创建用户时,都会调用默认的构造函数。现在,当我们打印用户信息时,我们将看到我们分配的默认值。

接下来,让我们探讨第二种类型的构造函数,即参数化构造函数。与默认构造函数不同,参数化构造函数接受特定值作为参数,并使用它们来实例化对象属性。我将提供一个参数化构造函数的示例,该构造函数采用名字、姓氏和年龄参数。

通过这些参数,我们可以将提供的值分配给相应的属性。这允许我们在对象创建期间直接创建具有特定信息的用户。

这涵盖了构造函数的基础知识及其用法。请继续关注未来视频中的更多示例和见解。

OOP Constructors - Types of Constructors You Need to Know (Basics to Mastery)
OOP Constructors - Types of Constructors You Need to Know (Basics to Mastery)
  • 2023.03.21
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

C++ 中的友元函数和类(初学者编程)



C++ 中的友元函数和类(初学者编程)

在本视频中,我很高兴向您介绍 C++ 中的友元函数和友元类。编程中的友谊概念与现实生活中的友谊类似。就像您的朋友可以访问您生活中其他人无法访问的私有区域一样,面向对象编程中的友元函数和友元类也可以访问类的私有和受保护成员。

在本视频中,您将了解如何以及何时使用友元函数和友元类。为了进行演示,我们将使用 Visual Studio Community,我还将向您介绍一个名为 Visual Assist 的优秀扩展。您可以在下面的描述中找到下载链接。 Visual Assist 是许多专业开发人员使用的智能编码助手,特别是对于大型项目或使用虚幻引擎等引擎进行的游戏开发。它增强了代码完成功能,提供了智能的重构建议,提供了代码片段,并改进了项目内的导航和搜索。

现在,让我们深入探讨友元函数的主题。为了解释这个概念,让我们创建一个问题并使用友元函数来解决它。我们将创建一个名为“EquisideTriangle”的类来表示所有三边长度相同的三角形。该类将具有边长、周长和面积的私有变量。我们还将添加一个公共 setter 方法来设置边长并在该方法中计算周长和面积。

但是,如果我们尝试访问类外部的私有成员,就会遇到错误。一种解决方案是将私有成员公开或创建公共吸气剂,但这会将它们暴露给所有人。相反,我们可以使用友元函数来有选择地授予访问权限。我们将创建一个名为“PrintResults”的全局函数,它将打印三角形的周长和面积。通过将此函数声明为 EquisideTriangle 类的友元,它可以访问私有成员。

但请记住,请仔细选择您的朋友函数,并避免过度使用以维护封装性。此外,在 C++ 中,您还可以拥有友元类。如果我们将“PrintResults”函数移到名为“Homework”的类中并使其成为公共成员函数,我们就可以将“Homework”声明为“EquisideTriangle”的友元类。这样,“Homework”类就可以访问“EquisideTriangle”的私有成员和受保护成员。

值得注意的是,编程中的友谊不是相互的或继承的。明智地使用友元函数和友元类,并记住继承和运算符重载也涉及友元函数的常见用例。查看我关于操作员重载的视频(在描述中链接)以获取更多信息和相关的家庭作业练习。

我希望您发现该视频有助于在您的编程项目中理解和利用友元函数和友元类。请继续关注更多精彩内容,不要忘记查看 Visual Studio 的 Visual Assist 扩展!

Friend functions and classes in C++ (Programming for beginners)
Friend functions and classes in C++ (Programming for beginners)
  • 2021.12.21
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

编程中的析构函数:实际演示



编程中的析构函数:实际演示

在本视频中,我将教您有关编程中的析构函数。您将了解什么是析构函数、如何使用它们以及何时使用它们。请务必观看整个视频,因为最后我会给你一个特别的惊喜。在我们深入了解析构函数之前,了解构造函数很重要。如果您不熟悉构造函数,请观看我之前链接到此处和说明中的视频。

析构函数是销毁对象时调用的特殊函数。它们执行必要的清理任务,例如释放对象所持有的内存或文件等资源。未能释放这些资源可能会降低性能、稳定性并导致内存泄漏。

在我们开始讨论析构函数之前,我想向您介绍一个我喜欢使用的工具,称为 PBS Studio。它是一个静态代码分析器,可以帮助我编写更好的代码而没有错误。它分析您的代码是否存在潜在问题和错误,通过在投入生产之前捕获错误来节省您的时间和金钱。它很容易与流行的 IDE 集成,并支持多种编程语言。您可以从描述中的链接下载并免费试用。如果您是学生,请查看他们的网站以获取免费选项。

现在,让我们深入研究析构函数。析构函数是一种特殊函数,其名称与类名相同,前面带有波形符 (~)。它没有返回类型,不接收任何参数,并且应该放置在类的公共部分中。每个类只能有一个析构函数。

为了说明析构函数,让我们创建一个名为“Book”的类,它具有两个属性:“title”和“author”。我们还将创建一个构造函数和一个析构函数。请记住,析构函数应该释放对象持有的所有资源。

在构造函数内部,我们将传递的参数分配给相应的属性。在析构函数内,我们将输出一条消息,指示为特定书籍调用了析构函数。

现在,让我们创建一些书籍对象来查看构造函数和析构函数何时被调用。我们将调试程序并观察调用顺序。

如果您的类不涉及指针,编译器将自动处理内存释放。但是,如果您使用指针,则需要在析构函数中手动释放内存以避免内存泄漏。请记住对数组使用“delete[] arrayName”,并在释放后将指针设置为 nullptr。

我希望这个视频可以帮助您了解析构函数及其在管理资源中的重要性。在我的下一个视频中,我们将探讨复制构造函数,敬请期待。

Destructors in Programming: Practical Demonstration
Destructors in Programming: Practical Demonstration
  • 2023.03.29
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

C++ 复制构造函数(适合初学者的教程 + 实际示例)



C++ 复制构造函数(适合初学者的教程 + 实际示例)

大家好,欢迎来到我的频道。在本视频中,我将教您有关复制构造函数的知识,这对于初学者来说是一个重要但令人困惑的主题。在观看此视频之前,请确保观看我之前关于不同类型构造函数的视频,包括默认构造函数和参数化构造函数(描述中的链接)。另外,请观看我关于指针和动态数组的视频(描述中的链接),因为它将帮助您更好地理解这个主题。

在本视频中,我将解释您需要了解的有关复制构造函数的所有内容。初学者通常会理解复制构造函数背后的概念,但很难理解何时以及如何使用它们,以及可能发生的潜在错误和错误。我将逐步介绍所有这些方面。

让我们首先检查我之前视频中的代码。我创建了一个名为“Book”的类,其中包含标题、作者和名为“rates”的指针等属性。 “rates”指针代表一个动态数组,用户可以在其中输入书籍的评级。还有一个“速率计数器”来跟踪数组大小。如果您不熟悉指针和动态数组,我建议您观看有关此主题的视频(描述中的链接)。

我已经为 Book 类实现了一个参数化构造函数,它将标题和作者作为参数,并根据这些值创建一个书籍对象。我还包含了一个析构函数,它对于释放构造函数分配的内存非常重要。使用 PVS-Studio 等代码分析器来检测代码中隐藏的错误和弱点至关重要。我个人推荐使用 PVS-Studio,因为它可以有效地发现错误并提供修复建议。您可以使用描述中的链接免费下载它。

现在,让我们关注复制构造函数的主题。复制构造函数的目的是基于现有对象创建新对象。它允许您复制一个对象并用它来创建一个新对象。默认情况下,C++ 提供了默认的复制构造函数。但是,在使用指针时,有必要创建自定义复制构造函数以避免错误。

如果没有自定义复制构造函数,使用指针可能会导致异常和错误。让我们考虑以下场景:我想根据“Book1”的数据创建“Book3”。我想复制“Book1”的所有属性来创建“Book3”。这就是复制构造函数发挥作用的地方。

要创建复制构造函数,请遵循以下规则:

  1. 它应该在类的公共部分声明。
  2. 它没有返回类型(甚至不是 void)。
  3. 它的名称应该与类名称匹配。
  4. 它采用相同类类型的参数,该类类型代表原始对象。

让我们创建复制构造函数。在复制构造函数中,我们将接收原始对象作为常量引用(const Book&original)。这可以防止对复制构造函数内的原始对象进行任何修改。

现在,让我们解决初学者在创建复制构造函数时常犯的错误。错误在于直接复制指针,而不是分配新的内存并复制内容。如果我们复制指针,原始指针和副本指针都将指向相同的内存位置。因此,当调用析构函数时,它将尝试两次释放内存,从而导致错误。

为了解决这个问题,我们需要为副本分配新的内存并复制原始指针的内容。我们将创建一个新的动态数组并复制元素,而不是直接分配指针。这确保了原件和副本具有单独的存储位置。

通过遵循这些准则,我们可以创建一个正确的复制构造函数,以避免与内存相关的错误。

我希望这个解释能够澄清复制构造函数的概念及其重要性。

C++ Copy constructors (beginner-friendly tutorial + practical examples)
C++ Copy constructors (beginner-friendly tutorial + practical examples)
  • 2023.04.19
  • www.youtube.com
This is an OOP tutorial where I'll teach you about copy constructors in C++. After watching this video, you'll learn what is the purpose of copy constructors...
 

自己编码!俄罗斯方块 - 从头开始编程(快速简单的 C++)



自己编码!俄罗斯方块 - 从头开始编程(快速简单的 C++)

你好!今天,我们将踏上创建我们自己的俄罗斯方块版本的激动人心的旅程。在我们深入研究编码之前,让我先让您先了解一下我们将要构建的内容。

如您所见,屏幕上有一个经典的俄罗斯方块形状。借助编码的力量,我们将能够旋转这些形状。游戏包含碰撞检测,可确保各个部分正确地相互作用。如果我们通过策略性地放置随机棋子来完成一条线,它就会消失,我们的分数也会相应增加。然而,如果我们不小心,棋子堆到了顶部,游戏就结束了。

现在,您可能想知道为什么我们关注游戏引擎而不是图形。虽然美观很重要并且可以吸引玩家,但游戏的真正本质在于它的引擎——负责实现游戏玩法、逻辑、规则、挑战等的部分。图形引擎始终可以在以后添加,您甚至可以聘请艺术家来美化您的游戏。但要真正理解游戏开发,您需要掌握构建游戏引擎的基础知识。

首先,我们需要一些游戏资源。在俄罗斯方块中,这些资产是不同形状的,称为“tetromino 块”。我们将这些形状存储为字符串,这将使我们更容易将它们可视化。俄罗斯方块中有七种常见的形状,我们将使用句号 (.) 等字符来表示空格,使用大写 X 表示形状本身。通过排列这些字符,我们创建了直观地描绘形状的字符串。

现在,我们将使用一维数组并使用简单的数学计算来操作索引,而不是使用多维数组来表示 2D 形状。这种方法使我们能够更有效地处理形状的旋转和反射。我们将使用公式来确定每次旋转的适当索引。例如,通过将 X 坐标乘以 4,我们可以获得 90 度旋转所需的索引。这项技术将使我们不必为每种可能的形状变化创建单独的资源。

除了四格板之外,我们还需要一个运动场。我们将使用宽度和高度变量定义字段的尺寸。在本例中,我们将使用 12 个单元格宽和 18 个单元格高的字段大小。为了表示比赛场地的元素,我们将使用无符号字符数组。每个单元格都会被分配一个值来指示其内容,例如空白空间、形状的一部分或边界墙。

为了可视化我们的游戏,我们将利用命令提示符作为屏幕缓冲区。通过创建一个具有命令提示符窗口尺寸的数组,我们可以在其上绘制游戏元素。我们将使用特定的角色来代表游戏的不同元素,例如形状、空白空间和边界墙。然后,我们将在命令提示符屏幕上显示数组的内容。

现在,我们来谈谈游戏循环。游戏循环是任何游戏引擎的重要组成部分,因为它们控制游戏元素的顺序。就俄罗斯方块而言,我们的游戏循环将处理计时、用户输入、游戏逻辑和输出渲染。

时机对于确保不同系统之间游戏玩法的一致性至关重要。我们希望游戏以相同的速度运行,无论计算机的速度如何。我们将使用计时机制来控制形状下落和游戏更新的速度。

接下来,我们将处理用户输入。由于我们正在创建俄罗斯方块的简单命令行版本,因此我们不会依赖基于事件的输入。相反,我们将处理基本的用户输入,例如箭头键或其他指定的键。

在此代码中,我们将为游戏实现键盘输入处理,特别关注四个键:左箭头、右箭头、下箭头和用于旋转游戏块的“Z”键。

为了获取用户按下的按键的当前状态,我们将利用“获取异步按键状态”功能。通过迭代表示按键状态的数组,我们可以确定每个按键当前是否被按下。该函数返回一个布尔值:如果按键被按下则返回 true,否则返回 false。为了检查特定键的状态,我们使用表示每个键的虚拟键代码的常量字符串表达式。

通过检查这四个键的状态,我们可以创建一个数组来保存 true 或 false 值,指示每个键是否被按下。这简化了过程,并为我们提供了一个表示按键当前状态的数组。

让我们以左键为例。当用户按下左键时,我们需要检查游戏棋子是否可以放置到当前位置的左侧。为此,我们利用一个名为“doespiece fit”的函数,该函数考虑当前的块、其旋转和当前的 X 位置。通过从当前 X 位置减去 1,我们可以确定该块是否适合左侧。如果确实合适,我们会相应地更新当前的 X 位置。

类似地,对于右键,我们执行类似的检查以查看该块是否可以适合其当前位置的右侧。如果可以,我们相应地更新当前的 X 位置。

当用户按下向下键时,我们需要处理棋子的垂直运动。由于游戏区域的左上角位置始终为 (0, 0),我们可以简单地增加 Y 位置来将棋子向下移动。我们进行检查以确保向左、向右或向下移动棋子使其保持在比赛场地的边界内。

为了优化代码,我们可以用逻辑 AND 运算符替换嵌套的 if 语句。这简化了代码并提高了简洁性。此外,我们利用条件语句根据条件结果在当前 X 位置上加或减 1,进一步简化了代码。当用户按下“Z”键时处理部件的旋转时,应用相同的优化。

在俄罗斯方块中,游戏每隔十分之一秒周期性地迫使棋子向下移动,模拟重力。我们通过利用游戏滴答计数器来实现这一点。最初,棋子下落缓慢,但随着游戏的进行,我们减少了每个棋子下落之间的时间,使游戏更快、更具挑战性。通过累积游戏刻度并将其与当前速度进行比较,我们可以确定何时强制棋子落下。这会导致棋子定期下落,从而在游戏中产生重力效果。

为了将当前棋子锁定到游戏区域中,我们使用四格棋数组中的值更新字段数组。这是通过迭代 tetromino 数组的每个元素并更新字段数组中的相应位置来完成的。如果 tetromino 数组中的元素是“X”,我们将字段数组中的相应值增加 1。这将该位置标记为由当前棋子占据。

当比赛场地中形成一条线时,我们希望以视觉方式向玩家指示它。我们用特殊标记替换该线或执行任何其他视觉效果来指示该线的完成。

在直观地指示完成的线之后,我们需要处理清除线并相应地更新比赛场地。我们从底部开始迭代比赛场地的每一行,并检查该行是否已被填满。如果一行被填满,我们通过将其所有元素设置为 0 来清除它。然后,我们将其上方的所有行向下移动一个位置以填充清除的行。重复此过程,直到清除所有填充的行。

为了跟踪玩家的得分,每次清除一条线时我们都会增加它。分数可以基于清除的线数,也可以根据游戏的设计有更复杂的评分系统。

为了处理游戏结束的情况,我们需要检查当前棋子是否可以放置在游戏区域顶部的初始位置。如果它不适合,游戏就结束,我们停止游戏循环或触发任何必要的游戏结束动作。

最后,为了处理游戏循环,我们利用计时器或类似的机制来定期触发更新函数。该函数处理更新游戏状态,包括检查用户输入、向下移动棋子以及根据当前游戏状态执行必要的操作。

总之,此代码实现了游戏的键盘输入处理,特别关注箭头键和“Z”键等按键。它检查这些键的状态,相应地处理游戏棋子的移动,实现重力和棋子锁定,清除已完成的线,更新游戏场地,跟踪玩家的分数,并检查游戏结束条件。游戏循环确保游戏状态定期更新,创造动态和交互式的游戏体验。

Code-It-Yourself! Tetris - Programming from Scratch (Quick and Simple C++)
Code-It-Yourself! Tetris - Programming from Scratch (Quick and Simple C++)
  • 2017.04.03
  • www.youtube.com
I mentioned in an earlier video that programming a Tetris clone is a good way to get going with programming as it makes you think about algorithms. Putting m...
 

C++ 初学者全套课程(10 小时学习 C++)


C++ 初学者全套课程(10 小时学习 C++)

这是完整的 C++ 编程课程。它由许多讲座组成,其目标是将您从初学者提升到高级编程水平。我建议观看整个视频,因为后面的讲座需要以前的知识。

内容:
00:00:00
– 课程目标
00:01:31 – 在开始课程之前执行此操作
00:02:41
– C++ 简介(什么是 C++?可以用 C++ 构建什么样的应用程序?为什么创建 C++?)
00:06:39 – 什么是源代码、目标代码、编译器、算法?
00:08:42
- Visual Studio 2019 – 创建第一个项目(设置)
00:11:32 - Visual Studio 2019 基础知识解释和第一个“Hello World”程序
00:29:51
- 变量简介
00:44:36 – 变量命名规则
00:52:15
– C++ 中的数据类型以及如何使用 sizeof 运算符
01:01:58
- 数据类型溢出
01:05:00 – 什么是 ASCII 表
01:09:50
- 将单词加密为 ASCII 的简单、有趣的程序
01:18:12 - If/else 语句(构建一个检查奇数/偶数的程序 + 流程图解释)
01:35:52 - 嵌套 if/else 语句(构建一个确定三角形 + 流程图类型的程序)
01:55:50 - C++ 中的运算符(算术运算符、关系运算符、逻辑运算符、赋值运算符)
02:21:02 - 在有或没有第三个变量的情况下交换两个变量的值
02:29:20 – 构建 BMI 计算器应用程序 + 流程图
02:49:55 - 三元(条件)运算符(构建猜谜游戏应用程序)
03:01:00 - Switch/case 语句第 1 部分(构建计算器应用程序)
03:26:36 - Switch/case 语句第 2 部分(构建检查一个月天数的程序)
03:39:35
- While 循环第 1 部分 + 无限循环示例
03:53:39 - While 循环第 2 部分(构建用于计算数字位数的程序)
04:12:39
- While 循环第 3 部分(构建一个用于反转数字数字的程序)
04:25:25
- Do while 循环(PIN 验证程序)
04:39:09 – While 循环和 Do While 循环有什么区别
04:40:34 - For 循环(构建一个计算数字阶乘的程序)
04:58:12 – 嵌套循环(嵌套 do while 循环和 for 循环)
05:11:08 – 嵌套 for 循环(构建乘法表应用程序)
05:21:45 – 绘制矩形的程序
05:33:05 – 绘制三角形和倒三角形/倒三角形的程序
05:44:30 – 功能介绍
05:56:02 – 带参数/参数的函数(多个和默认)
06:11:42
- 函数返回语句(构建用于检查素数的程序)
06:37:39
- 函数重载
06:48:06 – 构建 ATM 应用程序
07:03:03 - 通用函数和模板
07:14:30 – 递归和递归函数
07:30:01
– OOP 简介,什么是类和对象
07:42:06
– OOP 构造函数和类方法
07:57:10 – OOP 封装,GIT:https: //github.com/TrueCodeBeauty/EncapsulationCpp
08:08:31 – OOP 继承,GIT:https: //github.com/TrueCodeBeauty/InheritanceCpp
08:24:59 – OOP 多态性,GIT:https: //github.com/TrueCodeBeauty/PolymorphismCpp
08:40:04 - 指针简介
08:51:14 - 空指针
09:06:27 - 指针和数组
09:19:18
- 使用指针从函数返回多个值
09:34:50
- 动态数组,在运行时创建/更改数组
09:48:35 – 多维动态数组,二维数组
10:07:00
- 使用 PVS Studio 检测代码中的错误
10:17:19 - 解释内存泄漏
10:26:25 - 花絮
C++ FULL COURSE For Beginners (Learn C++ in 10 hours)
C++ FULL COURSE For Beginners (Learn C++ in 10 hours)
  • 2021.01.11
  • www.youtube.com
This is a full C++ programming course. It consists of many lectures whose goal is to take you from beginner to advanced programming level.I recommend watchin...
 

C++ 函数 (2020) - 什么是函数?


C++ 函数 (2020) - 什么是函数?编程教程

欢迎来到我频道的第一个视频!如果您是 C++ 初学者,请务必查看我的 C++ 初学者播放列表,您可以在其中找到使用 C++ 时需要理解和了解的重要概念。在本视频中,我们将讨论 C++ 函数,这些函数对于成为一名优秀的程序员至关重要,不仅是 C++,而且是大多数编程语言。

在我们开始之前,请订阅我的频道并单击响铃图标,以便在我发布下一个视频时收到通知。如果您有兴趣了解幕后内容以及开发者生活的真实面貌,请通过我的帐户“CodeBeauty”在 Instagram 和 Twitter 上关注我。

现在,让我们深入探讨函数的主题。函数是组合在一起以解决特定问题或执行特定任务的代码块。函数内的代码仅在调用或调用该函数时执行。每个C++程序都至少包含一个函数,这就是main函数。程序的执行从主函数的第一行开始,在最后一行或遇到 return 语句时结束(我们将在本课程后面介绍 return 语句)。

要创建您自己的函数,您需要了解一些事情。首先,您需要指定函数的返回类型。现在,我们将使用“void”返回类型,这意味着该函数不返回任何内容。接下来,为您的函数命名。在括号内,您可以定义函数接收的任何参数。在这种情况下,我们不会有任何参数,因此括号是空的。最后,您在大括号内定义函数体。

在我们的示例中,我们创建了一个名为“function”的函数,它具有 void 返回类型且没有参数。在函数体内,我们使用“cout”语句来显示“Hello from function”并添加结束行。但是,仅创建该函数并不会执行其代码。要执行该函数,您需要调用它。在我们的例子中,我们在主函数中的“cout”语句之后调用该函数,方法是键入其名称,后跟括号。

编译并运行程序后,您将看到输出“Hello from main”,后面跟着“Hello from function”。这是因为main函数先被执行,然后我们创建的函数在被调用的时候才被执行。

为了使代码更具可读性,建议单独声明和定义函数。声明包括返回类型、函数名称和任何参数,并且应放在主函数之前。包含函数体的定义位于主函数之后。这样,如果其他人正在阅读您的代码,他们可以轻松导航到他们需要理解的特定函数。

请记住,函数使您的代码可重用。您可以在函数内编写一次相同的代码,并在需要时调用该函数,而不是多次编写相同的代码。这种做法有助于减少冗余并使代码更易于管理。

在以后的视频中,我们将更详细地探讨功能。不要忘记订阅我的频道并启用通知以随时了解即将发布的内容。感谢您的观看,我们将在下一个视频中见到您!

C++ FUNCTIONS (2020) - What are functions? PROGRAMMING TUTORIAL
C++ FUNCTIONS (2020) - What are functions? PROGRAMMING TUTORIAL
  • 2020.06.11
  • www.youtube.com
This is the introduction video of the "C++ functions" course. In this video, I'm explaining what are C++ functions, how functions are created, when they're u...
 

C++ 函数 (2020) - 什么是函数参数/参数(多个、默认)编程教程


C++ 函数 (2020) - 什么是函数参数/参数(多个、默认)编程教程

大家好!欢迎回到我的频道。如果您是 C++ 初学者,我很高兴您来到这里。在我们深入讨论今天的主题之前,我想提醒您查看我的 C++ 初学者播放列表。它涵盖了基本概念,并包含大量练习来帮助您练习。另外,不要忘记订阅我的频道并单击铃铛图标,以便在我发布新视频时收到通知。您还可以在我的社交媒体个人资料、CodeBeauty Instagram 和 Twitter 上关注我,抢先了解开发人员的生活。好了,话不多说,让我们进入今天的课程吧。

在本视频中,我想讨论 C++ 函数参数或参数。那么,参数和参数到底是什么?如果您还没有观看我之前关于 C++ 函数的视频,我建议您观看一下(提供了链接)。有时,函数需要接收特定值或变量才能执行特定任务。这些值或变量称为参数。

现在,让我们学习如何在 C++ 中创建一个接受参数的函数。为此,我们定义一个返回类型为 void 的函数。我们将函数命名为“introduceMe”。在括号内,我们指定函数将接收的参数。我们的函数体将用大括号括起来。

要定义参数,我们首先声明参数的类型,然后是其名称。在我们的例子中,我们希望将用户名传递给函数,因此参数将是字符串类型。我们将参数命名为“name”。然后,该函数将通过打印“我的名字是”后跟所提供的名称来介绍我们的用户。

要调用我们的函数,我们只需使用它的名称“introduceMe”。由于我们的函数需要一个参数(名称参数),因此我们在调用函数时需要传递一个值。在本例中,我们将名称“Selena”作为参数传递。

当我们运行该程序时,该函数将成功引入具有所提供名称的用户。它将按预期打印“我的名字是 Selena”。

如果我们想引入多个用户,我们可以使用不同的参数再次调用该函数。例如,我们可以复制调用行并传递不同的名称,例如“Anna”。然后该功能将相应地介绍这两个用户。

现在,让我们探讨如何将多个参数传递给函数。为此,我们用逗号分隔参数。除了name参数之外,我们再添加两个参数:city(字符串类型)和age(int类型)。我们将修改该函数以包含有关用户的城市和年龄的信息。

在该函数中,我们将使用 C++ 的“cout”打印出用户的城市、年龄及其姓名。我们将按如下方式构造输出:“我来自 [city],我的年龄是 [age] 岁。”

当我们调用该函数时,我们传递所有三个参数的值:姓名、城市和年龄。例如,我们可以调用该函数并传递“Selena”作为名称,“Moscow”作为城市,25 作为年龄。该功能将向用户介绍所有提供的信息。

我们可以为第二个用户重复该过程。让我们将“Anna”作为名字,“New York”作为城市,27 作为年龄。当我们运行该程序时,我们将看到两个用户都已被介绍了各自的详细信息。

接下来,让我们探索一下默认参数。有时,您可能想为参数定义默认值。如果调用函数时没有为该参数提供实参,则将使用该值。

要指定默认值,我们在参数声明期间分配它。例如,我们将“age”参数的默认值设置为 18。现在,如果我们调用该函数而不提供年龄,它将采用默认值。

让我们为第三个用户调用该函数,仅传递姓名和城市,但忽略年龄。正如预期的那样,该函数将向用户介绍默认年龄值为 18 岁的用户。

我们对 C++ 函数参数和参数的讨论到此结束。我希望这个视频对您有所帮助,并且您对如何在 C++ 中使用函数参数有深入的了解。如果您有任何疑问或需要进一步说明,请在下面发表评论,我很乐意为您提供帮助。请继续关注更多 C++ 教程,如果您发现该视频有价值,请不要忘记点赞和分享。感谢您的观看,祝您编码愉快!

C++ FUNCTIONS (2020) - What is function parameter/argument (multiple, default) PROGRAMMING TUTORIAL
C++ FUNCTIONS (2020) - What is function parameter/argument (multiple, default) PROGRAMMING TUTORIAL
  • 2020.06.15
  • www.youtube.com
In this video of the "C++ functions" course, I'm explaining what are function parameters/arguments, how to pass arguments to a function, and how to invoke a ...
 

C++ FUNCTIONS (2020) - 函数返回语句,如何检查素数


C++ 函数 (2020) - 函数返回语句,如何检查素数编程教程

大家好,欢迎来到我的频道。在本视频中,我想讨论 C++ 中函数的返回语句和返回类型。如果您是初学者,请务必查看我的 C++ 初学者课程,其中提供了有用的示例来帮助您开始学习 C++。不要忘记订阅我的频道并单击通知铃以随时了解新视频。此外,如果您有兴趣成为一名开发人员并深入了解开发人员的生活,请在 Instagram 和 Twitter 上关注我:@truecodebeauty(视频说明中的链接)。话不多说,让我们进入今天的主题。

函数的返回类型可以是任何数据类型,包括 int、float、bool、char、double 甚至用户定义的数据类型。它也可以为 void,表示该函数不返回任何内容。在之前的视频中,我解释过函数是设计用于执行特定任务的代码块。函数可以分为两种类型:返回值的函数和不返回值的函数。

不返回值的函数通常执行特定操作,例如向用户显示菜单。另一方面,返回值的函数用于执行计算或运算并提供结果。需要注意的是,一个函数只能返回一个值,一旦遇到return语句,函数就会停止执行。

为了说明函数的重要性,让我们考虑一个不使用函数的示例。我们将创建一个程序来确定一个数字是否是素数。质数只能被一和它本身整除。首先,我们会要求用户输入一个数字。然后,我们将迭代 2 和用户输入的数字减 1 之间的所有数字。如果该数字可以被这些值中的任何一个整除,则它不是素数。否则,它就是总理。最后,我们将显示结果。

现在,让我们使用函数重构程序,使代码更具可读性和可重用性。我们将创建一个名为“isPrimeNumber”的函数,它接受一个整数参数并返回一个布尔值,指示该数字是否为素数。在函数内部,我们将实现与之前相同的逻辑,检查整除性并相应地设置标志。最后,我们将返回标志值。

通过使用函数,我们可以封装判断素数的逻辑,使代码更容易理解和重用。

C++ FUNCTIONS (2020) - Functions return statement, How to check prime number PROGRAMMING TUTORIAL
C++ FUNCTIONS (2020) - Functions return statement, How to check prime number PROGRAMMING TUTORIAL
  • 2020.06.29
  • www.youtube.com
In this video of the "C++ functions" course, I'm explaining what is the function return type. I'll show you how to return value from a function on an example...
 

C++ 函数 (2020) - 什么是函数重载?编程教程


C++ 函数 (2020) - 什么是函数重载?编程教程

大家好!欢迎回到我的频道。在今天的视频中,我们将深入探讨 C++ 中函数重载的概念。函数重载允许我们创建多个具有相同名称但不同参数的函数。那么,让我们探讨一下什么是函数重载以及它是如何工作的。

首先,让我们打开 Visual Studio 并创建一个名为“sum”的函数。我们首先定义函数的返回类型,它是一个整数。如果您不熟悉返回类型,我建议您观看我有关该主题的视频(提供了链接)。接下来,我们将函数的名称指定为“sum”并声明两个参数。这两个参数都是整数类型,我们将它们分别命名为“a”和“b”。

现在,让我们创建另一个具有相同名称“sum”的函数,但这次返回类型为 double。我们将声明两个 double 类型的参数,分别命名为“a”和“b”。

此外,我们创建第三个函数,名为“sum”,返回类型为 float。这次,我们将传递三个参数,所有参数都是 float 类型。我们将它们分别命名为“a”、“b”和“c”。

声明我们的函数后,我们注意到它们带有下划线,表明它们缺少定义。让我们继续提供每个函数的定义。我们将从第一个返回整数的函数开始。

在大括号内,我们将定义一个名为“result”的 int 类型变量。我们将为其分配值“a + b”,它表示两个参数的总和。最后,我们将使用“return”关键字从函数返回“result”的值。

或者,我们可以直接返回“a”和“b”的和,而不将其分配给变量,而不是创建单独的变量。这可以使代码更短且更具可读性。

接下来,让我们定义第二个返回双精度值的函数。我们将复制声明,添加大括号,然后在内部使用“return”关键字,后跟“a + b”。由于参数的类型为 double,因此将使用双精度执行求和。

现在,让我们定义第三个返回浮点数的函数。我们将复制声明,添加大括号,然后在内部使用“return”关键字,后跟“a + b + c”。同样,由于所有参数都是 float 类型,因此将相应地执行求和。

为了测试我们的函数,我们将在“main”函数中调用它们。我们将使用“cout”语句来显示结果。我们首先调用第一个函数“sum”,并传递两个整数值,例如 4 和 3。我们将使用“cout”输出结果并结束该行。

当我们运行程序时,我们可以期望看到 4 和 3 相加的结果,应该是 7。如果程序运行成功,我们就已经测试了我们的第一个函数。

接下来,我们通过调用“sum”并传递两个双精度值(例如 4.4 和 3.3)来测试第二个函数。同样,我们将使用“cout”输出结果并结束该行。

当我们运行程序时,我们应该看到 4.4 和 3.3 相加的结果,应该是 7.7。如果输出正确,我们就成功测试了第二个函数。

最后,让我们通过调用“sum”并传递三个浮点值(例如 4.4、3.3 和 2.2)来测试第三个函数。我们将使用“cout”输出结果并结束该行。

运行程序应该显示 4.4、3.3 和 2.2 相加的结果,这应该是正确的总和。如果需要,使用计算器验证输出。

总之,我们在这里演示的是函数重载。我们创建了三个具有相同名称“sum”的函数,但具有不同的参数和返回类型。第一个函数接受两个整数,第二个函数接受两个双精度数,第三个函数接受三个浮点数。当我们调用这些函数时,编译器根据提供的参数确定要调用的适当函数。

函数重载允许我们通过对执行类似任务的函数使用相同的名称来编写更简洁和可读的代码。我们不需要为每个变体创建具有不同名称的单独函数。

我希望您现在了解函数重载的概念以及它如何在 C++ 中发挥作用。如果您喜欢这个视频,请订阅我的频道并单击响铃图标以接收未来视频的通知。您还可以在我的其他社交媒体平台上关注我(描述中提供的链接)。

感谢您的观看,我们将在下一个视频中见到您。再见!

C++ FUNCTIONS (2020) - What is function overloading? PROGRAMMING TUTORIAL
C++ FUNCTIONS (2020) - What is function overloading? PROGRAMMING TUTORIAL
  • 2020.07.17
  • www.youtube.com
Function overloading is the ability to create multiple functions that have the same name but different implementations. In this video of the C++ programming ...
原因: