东莞网站设计讯息/关键词排名优化软件
往期回顾:
C++ 入门01:初识 C++-CSDN博客
C++ 入门02:控制结构和循环-CSDN博客
一、前言
在前面的文章学习中,我们了解了C++语言的基础,包括如何定义变量来存储数据,以及如何利用输入输出流实现程序与用户之间的无缝交互。此外,还掌握了控制结构——条件语句与循环结构。
而今天的学习内容则是C++中的函数与作用域。这部分内容是编写模块化代码和管理变量范围的关键。函数,作为任何一门编程的基石之一,它允许我们将代码分割成可重用的独立块,每个块都执行特定的任务。这种模块化编程的思想极大地提高了代码的可读性、可维护性和复用性。通过学习函数,我们将学会如何定义自己的函数来封装特定的功能,并通过参数传递和返回值机制来实现函数间的数据交换。
而作用域则定义了变量、函数等标识符在程序中可见和可访问的区域。理解作用域不仅有助于我们更好地管理变量的生命周期和访问权限,还能避免命名冲突等常见问题。在C++中,作用域可以细分为全局作用域、局部作用域、块作用域以及函数原型作用域等,每种作用域都有其特定的规则和用途。
二、函数与作用域
2.1、 函数
函数是执行特定任务或操作的独立代码块。这种模块化设计极大地促进了代码的组织、重用和维护,一个典型的 C++ 函数包括函数声明和函数定义。
(1)函数声明
函数声明(也称为函数原型)为编译器提供了函数的基本信息,包括函数的返回类型、名称以及它接受的参数类型和数量。函数声明通常放在头文件中(.h或.hpp文件),或者在源文件的开始部分,以便在调用函数之前让编译器知道该函数的存在和如何调用它。
示例:
// 函数声明示例
int add(int a, int b);
这个声明表明add
是一个函数,它接受两个整型参数(a
和b
),并返回一个整型值。
(2)函数定义
函数定义提供了函数的实际实现,即函数体中的代码,这些代码定义了函数如何执行其任务。函数定义必须包含函数的所有部分:返回类型、函数名、参数列表(包括参数的类型和名称)以及函数体(即大括号{}
内的代码)。
示例:
// 函数定义示例
int add(int a, int b) { return a + b;
}
在这个例子中,add
函数的定义包含了其完整的实现:它简单地将两个整数参数相加,并返回它们的和。
(3) 函数参数
函数可以接受参数,这些参数在调用时传递给函数。
示例:
void printMessage(std::string message) {std::cout << message << std::endl;
}int main() {printMessage("Hello, World!");return 0;
}
(4)函数返回值
函数可以返回一个值。返回值的类型由函数的返回类型决定。
示例:
double multiply(double a, double b) {return a * b;
}int main() {double result = multiply(2.5, 4.0);std::cout << "Result: " << result << std::endl;return 0;
}
(5)函数调用
一旦函数被声明和定义,它就可以在程序的其他部分被调用了。调用函数时,需要提供与函数声明中指定的数量和类型相匹配的参数。
示例:
#include <iostream> // 函数声明
int add(int a, int b); int main() { // 调用函数 int sum = add(5, 3); std::cout << "Sum: " << sum << std::endl; // 输出:Sum: 8 return 0;
} // 函数定义
int add(int a, int b) { return a + b;
}
在这个例子中,main
函数调用了add
函数,并传递了两个整数(5和3)作为参数。add
函数计算这两个数的和,并通过return
语句将其返回给调用者(在这里是main
函数)。然后,main
函数将返回的值存储在变量sum
中,并将其打印到控制台。
2.2、 作用域
作用域是变量在程序中的可见性范围。C++ 中有四种主要的作用域:局部作用域、全局作用域、类作用域和命名空间作用域。这些作用域共同构成了C++程序中标识符的可见性和生命周期的框架。理解这些作用域对于编写清晰、可维护的C++代码至关重要。
(1)局部作用域
局部作用域是变量在其被声明的代码块(如函数体、循环体、条件语句块等)内有效的区域。一旦离开这个代码块,该变量就不再可见,其占用的内存也会被释放(对于自动存储期的变量而言)。局部变量通常用于存储临时的、仅在特定函数或代码块内需要的数据。
示例:
void myFunction() { int localVar = 10; // localVar 在 myFunction 的局部作用域内有效 // ...
} // localVar 在这里失去作用域
(2)全局作用域
全局作用域是变量在程序的所有部分都可见的区域,但通常是在所有函数之外声明的。全局变量在整个程序运行期间都保持其值,直到程序结束。然而,过度使用全局变量通常被认为是不好的编程实践,因为它们可能导致代码难以理解和维护,以及引入难以发现的bug。
示例:
int globalVar = 20; // globalVar 在全局作用域内有效 void anotherFunction() { // 在这里可以访问 globalVar
}
(3)类作用域
类作用域是面向对象编程中的一个重要概念,它定义了类成员(包括变量和函数)的可见性和访问权限。类成员变量(也称为属性或字段)和成员函数(也称为方法)在类的定义内部声明,并只能通过类的对象或指针来访问(除非它们是静态成员)。类作用域有助于封装数据,即将数据和相关操作组合在一起,形成一个独立的实体。
示例:
class MyClass {
public: int classVar; // classVar 在 MyClass 的类作用域内有效 void myMethod() { // 在这里可以访问 classVar }
};
(4)命名空间作用域
命名空间作用域是C++中用于解决命名冲突的一种机制。它允许你将一组相关的标识符(如变量名、函数名等)封装在一个命名空间中,从而避免与其他命名空间中的标识符发生冲突。使用命名空间可以提高代码的组织性和可读性,同时减少命名冲突的可能性。
示例:
namespace MyNamespace { int namespaceVar = 30; // namespaceVar 在 MyNamespace 的命名空间作用域内有效 void myNamespaceFunction() { // ... }
} // 访问命名空间中的成员需要使用作用域解析运算符 ::
int main() { int x = MyNamespace::namespaceVar; MyNamespace::myNamespaceFunction(); return 0;
}
以上就是 C++ 中函数与作用域的基本用法的知识点了。函数帮助我们组织和重用代码,而理解作用域有助于我们管理变量的可见性和生命周期。
都看到这里了,点个赞再走呗朋友~
加油吧,预祝大家变得更强!
相关文章:

C++ 入门03:函数与作用域
往期回顾: C 入门01:初识 C-CSDN博客C 入门02:控制结构和循环-CSDN博客 一、前言 在前面的文章学习中,我们了解了C语言的基础,包括如何定义变量来存储数据,以及如何利用输入输出流实现程序与用户之间的无缝…...

在Linux/Debian/Ubuntu中出现“Could not get lock /var/lib/dpkg/lock-frontend”问题的解决办法
在Linux/Debian/Ubuntu中出现“Could not get lock /var/lib/dpkg/lock-frontend”问题的解决办法 在使用 apt 或 apt-get 进行软件包管理时,有时会遇到以下错误提示: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporari…...

odoo中的钩子 Hooks
钩子 钩子(Hooks)是一种在特定时间点或特定事件发生时执行自定义代码的机制。它们允许开发者在不修改核心代码的情况下,为Odoo添加自定义功能或扩展现有功能。以下是关于Odoo钩子的一些关键点和常见用法: 一、钩子的类型 pre_i…...

05.C1W4.Machine Translation and Document Search
往期文章请点这里 目录 OverviewWhat you’ll be able to do!Learning Objectives Transforming word vectorsOverview of TranslationTransforming vectors Align word vectorsSolving for RFrobenius normFrobenius norm squaredGradient K nearest neighborsFinding the tr…...

计算机网络——数据链路层(点对点协议PPP)
点对点协议PPP的概述 对于点对点的链路,目前使用得最广泛的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。 它主要应用于两个场景: 用户计算机与ISP之间的链路层协议就是点对点协议 PPP,1999年公布了回以在以太网上运行的PPP协…...

信息安全概述
名词解释 大数据:指的是所涉及的资料量规模巨大到无法透过主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。 云计算:是指通过网络提供计算资源(如服务器、存储、数据库、软件开发…...

UE5.3-基础蓝图类整理一
常用蓝图类整理: 1、获取当前关卡名:Get Current LevelName 2、通过关卡名打开关卡:Open Level(by name) 3、碰撞检测事件:Event ActorBeginOverlap 4、获取当前player:Get Player Pawn 5、判断是否相等࿱…...

Python面试题: 如何在 Python 中实现一个线程池?
在 Python 中,实现线程池可以使用内置的 concurrent.futures 模块,该模块提供了一个高层次的接口来管理并发任务。ThreadPoolExecutor 类是实现线程池的主要工具。以下是一些使用示例,展示如何在 Python 中实现和使用线程池: 1. …...

☺初识c++(语法篇)☺
目录 一命名空间(namespace): 二cout与cin简述: 三缺省参数: 四函数重载: 五引用: 六内联函数: 七c中的nullptr简述: 一命名空间(namespace)࿱…...

process.env 管理 Vue 项目的环境变量(Vue项目中环境变量的配置及调用)
简述:在构建 Vue 应用时,管理配置是开发中的一个重要部分。不同的环境(如开发、测试和生产)往往需要不同的配置,例如 API、 基础 URL、第三方服务的密钥等。使用环境变量可以帮助我们更好地管理这些配置。这里将介绍如…...

算法工程师第六天(● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和 ● 总结 )
参考文献 代码随想录 一、四数相加 II 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#…...

笔记:Newtonsoft.Json 自定义一个根据typeconverter转换的JsonConverter
在 Newtonsoft.Json 中创建一个根据 TypeConverter 转换的 JsonConverter 允许你在序列化和反序列化过程中利用 .NET 的 TypeConverter 机制。这种方式特别有用,当你想要为不直接支持 JSON 序列化的类型提供自定义的序列化逻辑时,比如第三方库中的类型或…...

第241题| 确定极限中参数问题 | 武忠祥老师每日一题
解题思路:确定极限中的参数的方法是求这个极限;求极限根据类型选方法。 形可以用到三种方法:洛必达,等价,泰勒。 先观察题目,将看成一个整体,同时,并令,整理之后如下: 这里也要想办…...

线程池【开发实践】
文章目录 一、为什么要用线程池1.1 单线程的问题1.2 手动创建多线程的问题1.3 线程池的作用(优点)1.4 线程池的使用场景 二、线程池的基础知识2.1 线程池的核心组件2.2 JUC中的线程池架构2.3 线程池的配置参数2.4 线程池常见的拒绝策略(可自定…...

论文辅助笔记:ST-LLM
1 时间嵌入 2 PFA(Partial Frozen Architecture) 3 ST_LLM 3.1 初始化 3.2 forward...

加入运动健康数据开放平台,共赢鸿蒙未来
HarmonyOS SDK运动健康服务(Health Service Kit)是为华为生态应用打造的基于华为帐号和用户授权的运动健康数据开放平台。在获取用户授权后,开发者可以使用运动健康服务提供的开放能力获取运动健康数据,基于多种类型数据构建运动健…...

企业化运维(7)_Zabbix企业级监控平台
官网:Zabbix :: The Enterprise-Class Open Source Network Monitoring Solution ###1.Zabbix部署### (1)zabbix安装 安装源 修改安装路径为清华镜像 [rootserver1 zabbix]# cd /etc/yum.repos.d/ [rootserver1 yum.repos.d]# vim zabbix.r…...

CTF php RCE (一)
0x01 引言 首先进入题目 应该是大部分都是一段白盒PHP审计,然后我们为了命令执行,绕过或者是钻空子等等操作,来拿到flag 0x02 基础 0x01 传参方式 这里有两个工具,hackbar和burpsuite,这两个工具非常实用 大家可以自己Googl…...

Proteus + Keil单片机仿真教程(五)多位LED数码管的静态显示
Proteus + Keil单片机仿真教程(五)多位LED数码管 上一章节讲解了单个数码管的静态和动态显示,这一章节将对多个数码管的静态显示进行学习,本章节主要难点: 1.锁存器的理解和使用; 2.多个数码管的接线封装方式; 3.Proteus 快速接头的使用。 第一个多位数码管示例 元件…...

【Linux】网络新兵连
欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 引言 在上一篇博客中,我们简单的介绍了一些Linux网络一些比较基本的概念。本篇博客我们将开始正式学习Linux网络套接字的内容,那么我们开始吧! 1.网络中的地址管理 大家一…...

基于STM32的智能加湿器
1.简介 基于STM32的加湿器发展前景非常乐观,这主要得益于其在技术、市场需求、应用场景以及政策支持等多方面的优势。STM32微控制器具备强大的处理能力和丰富的外设接口,能够实现精确的湿度监测和智能化控制。基于STM32的加湿器可以根据环境湿度自动调节…...

ubuntu 如何解压tar
在Ubuntu中解压.tar文件,可以使用tar命令。以下是解压.tar文件的命令: tar -xvf file.tar 解释: x 表示解压 v 表示显示过程中的详细信息(可选) f 表示后面跟文件名 这将在当前目录下解压file.tar文件的内容。如果…...

C++ 算法——二分查找
如果要你在一个升序序列中查找一个值的位置,你是否还会傻乎乎的用下面这个 O ( n ) \mathcal O(n) O(n) 的代码暴力查找,如果是,我告诉你,其实根本不用这么做。 int find(int a[],int n,int k) {for(int i0;i<n;i) if(a[i]k)…...

【自动驾驶仿真在做什么——初学者总结(陆续补充)】
文章目录 基础概念自动驾驶级别再稍提一下ODD是什么? 自动驾驶仿真分类软件在环仿真硬件仿真 仿真究竟难在哪?关于lidar和radar区别一些名词解释 最近也是学习自动驾驶仿真相关知识,习惯去总结一下,方便自己回顾和总结,…...

探索HTML5的设计原则:引领Web开发的未来方向
随着互联网的飞速发展,HTML5作为Web技术的核心标准之一,不仅极大地丰富了网页的表现力和交互性,还推动了Web应用向更加动态、高效、安全的方向迈进。HTML5的设计原则,体现了对用户体验、内容可访问性、跨平台兼容性以及未来可扩展…...

力扣喜刷刷--day1
1.无重复字符的最长子串 知识点:滑动窗口 基本概念 窗口:窗口是一个连续的子序列,可以是固定长度或可变长度。滑动:窗口在数据序列上移动,可以是向左或向右。边界:窗口的起始和结束位置。 应用场景 字符…...

配置linux的yum镜像为阿里镜像源
1.备份当前的yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentOS-Base.repo 到/etc/yum.repos.d wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 3.清空并生成缓存 yum clean …...

react使用markdown进行展示
有一些文档非常长,但是又要挨个设置样式,直接用 组件库 - marked 注意文档要放在public下才能读取。但非常方便 import { marked, Renderer } from "marked".....const [html, setHtml] useState<any>("")const renderer:…...

实时温湿度监测系统:Micropython编码ESP32与DHT22模块的无线数据传输与PC端接收项目
实时温湿度监测系统 前言项目目的项目材料项目步骤模拟ESP32接线连接测试搭建PC端ESP32拷录环境对ESP32进行拷录PC端搭建桌面组件本地数据接收桌面小组件部分 实验总结 前言 人生苦短,我用Python。 由于我在日常工作中经常使用Python,因此在进行该项目…...

CloudWatch Logs Insights 详解
CloudWatch Logs Insights 是 AWS 提供的强大日志分析工具,允许您快速、交互式地搜索和分析日志数据。本文将详细介绍使用 CloudWatch Logs Insights 所需的权限、常用查询方法,以及一些实用的查询示例。 1. 所需权限 要使用 CloudWatch Logs Insights,用户需要具备以下 I…...