C++ 入门03:函数与作用域

QML 与 C++交互 - 03 C++访问QML属性与函数 前言 详细说明 参考链接:http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html 阅读详情

往期回顾:

C++ 入门01:初识 C++-优快云博客
C++ 入门02:控制结构和循环-优快云博客


一、前言

在前面的文章学习中,我们了解了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++ 中函数与作用域的基本用法的知识点了。函数帮助我们组织和重用代码,而理解作用域有助于我们管理变量的可见性和生命周期。

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

文献阅读:SAR像素偏移的性能改进An Improvement of the Performance of SAR Offset Tracking Approach 像素偏移追踪POT文献阅读 阅读详情

相关推荐

ADS系列之SI&PI仿真笔记:ADS多种版本的安装、卸载&重装(一)

此系列仅作为ADS学习过程的记录,如有错误的地方还请大佬指正! 一、下载&安装 ADS软件下载&安装还算比较简单,目前接触到有两个版本:ADS2017和ADS2019。这里贴下链接,破解教程里面都有: ADS2017下载地址:https://pan.baidu.com/s/1l-Bs9owKRmp5Pv0Mt92OYA 提取码:wuzf ADS2019下载地址:吴川斌的博客-w...

Claudedy的博客 3万+

C++ 函数作用域

变量作用域 局部作用域、全局作用域、文件作用域   局部变量:也称内部变量,声明在函数内(包括main函数),作用域开始于变量声明之处,结束于函数或块结束处;   全局变量:也称外部变量,声明在函数外,作用域一般是整个程序源文件,作用域最广,甚至可以作用于组成该程序的所有源文件(比如,将多个独立编译的源文件链接成一个程序时,在某个源文件中声明的全局变量,在与该源文件相链接的其他源文件中也

ForestRound的博客 9727

信号完整性入门:为什么工程师总爱用dB来描述衰减?

本文深入探讨了信号完整性分析中工程师偏爱使用dB(分贝)单位描述衰减的原因。dB通过对数转换,将大动态范围的乘除关系简化为加减运算,极大地方便了多级系统分析和链路预算计算。文章重点解释了-3dB点的核心意义,即功率衰减一半的临界状态,并阐述了其在评估信道带宽、插入损耗与回波损耗等关键参数中的实际应用,是高效工程思维和沟通的重要工具。

weixin_29263201的博客 386

【C++】作用域与函数重载

【C++】作用域与函数重载

BebopPrimer的博客 588

Code Ocean 上传代码 手把手教程

对于一些学术期刊,录用前会让把代码上传到Code Ocean上,但上传过程可能会遇到一些问题,小编分享一下自己的上传经验。他们会进行验证,验证通过,将自动发布。点此运行即可,但是运行比较慢。

u014071947的博客 1万+

华为CNA VRM搭建(使用vmware worfstartion搭建)

华为CNA和VRM在 vmware workstation安装使用

weixin_70595351的博客 1811

c++中的作用域 四类(函数原型作用域,局部作用域,类作用域,命名空间作用域)

1.函数原型作用域: 此作用域为c++程序中最小的作用域,生存周期最短。 例:int func(int i) i为参数,作用域类型为函数原型类型。 2.局部作用域:

Create_Queue的博客 1万+

【vsomeip3 教程】SOME/IP中间件去抖策略全解析

本文探讨了在SOME/IP中间件中实现Debounce(去抖动)机制的必要性和实现原理。文章首先分析了中间件层进行Debounce的四大动机:多订阅者共享收益、语义显式化、协议噪声屏蔽和入口处背压控制。接着详细阐述了Debounce的底层原理,包括变化检测机制(ignore和mask的应用)、时间门控策略(interval的两种时间基准)以及超时补发机制,并通过表格清晰展示了不同参数组合的效果和适用场景。最后,文章提出了工程落地的具体方法,包括策略选型、ignore/mask的设计方法论以及分层验证调试的实

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 232

【c++】的作用域 (局部域,类域,名字命名空间,文件域)

c++的作用域 局部域,类域,名字命名空间,文件域

aoeaoao的博客 2141

vue2/3 - 【超详细】最新网站接入使用支付宝支付功能,点击支付跳转新页面后生成订单及支付二维码,实现支付宝在线付款详细的教程(整个支付的完整配置及支付流程,一键复制源码开箱即用)!

vue支付宝付款,vue支付宝支付,vue如何实现支付宝在线付款,vue网页pc项目接入支付宝支付,vue支付宝支付详细教程,vue2支付宝在线支付的详细示例代码,vue如何做支付宝付款,vue怎么实现支付宝的付款功能,vue调用支付宝进行付款支付,vue PC项目实现 支付宝支付,vue h5页面调用支付宝支付,vue页面唤起支付宝支付功能,vue支付宝支付跳转到新页面,vue如何跳转新开一页展示支付宝二维码支付,vue怎么新开页面进行支付宝在线支付,vue新页面支付宝支付功能,前端vue支付宝支付教程,

✅ 精选推荐文章 5730

FPGA面试题目笔记(一)——FPGA开发流程、亚稳态和竞争冒险、建立保持时间、异步FIFO深度等

同步异步电路、同步异步复位、时钟偏移和抖动、最小工作周期计算、触发器锁存器

H19981118的博客 1万+

C++的作用域详细解读

写C++离不开一个重要的概念那就是作用域,作用域是C++语言非常重要的一个概念,接下来我们就一起看看C++的作用域。学好C++作用域必须理解透彻,这样才能用好!

jiexijihe945的博客 4004

合肥工业大学操作系统实验8

依据操作系统课程所介绍的地址映射与内存共享的原理,本实验的目的是深入理解物理内存的分页管理方式。 深入理解操作系统的段、页式内存管理。包括理解段表、二级页表,以及逻辑地址、线性地址、 物理地址的映射过程。编程实现段、页式内存管理上的内存共享,从而深入理解操作系统的内存管理。从而加深对教材上地址映射与内存共享的理解。

Martin-share的博客 1721

课程3:Cpp编程入门

在右边的chat对话框中可以看到AI的回答,而在左边可以看到AI帮我们自动生成了项目文件,AI回答完毕后,如果想要使用其结果,可以点击“Accept file”,如果不满意,可以点击“Reject file”或者在chat框中继续修改。打开右上角的chat对话框,输入需求,如设计一个简单的动物管理系统。程序运行后,根据输入的成绩显示相应的等级和字母评分。展示for循环和while循环的使用效果。展示带返回值函数的计算。展示类的封装和对象操作。展示带参数函数的使用。展示结构体的基本使用。

2501_91826412的博客 1752

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C++作用域详解

同一作用域内不可定义同名变量。

qq_28450045的博客 1224

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++ 作用域符号:: 常用三种方式

1、 作用域符号::的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分 如:A,B表示两个类,在A,B中都有成员member。那么 A::member就表示类A中的成员member B::member就表示类B中的成员member 2、 全局作用域符号:当全局变量在局部函数中与其中某个变量重名,那么就可以用::来区分如: c

cherry 的专栏 9588

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C++ day03(作用域限定符、this、static、const)

作用域限定符、关键字

dghbs的博客 1518

C++函数进阶:重载、默认参数、模板与作用域实战解析

在C++编程中,函数是构建程序逻辑的核心单元。理解其底层原理对于编写高效、可维护的代码至关重要。函数重载实现了编译时多态,允许同一函数名根据参数列表执行不同操作,提升了API的易用性。默认参数则通过预设常用值简化了函数调用,增强了接口的灵活性。这些机制共同服务于提升代码的复用性和可读性,是工程实践中优化代码结构的关键技术。在构建复杂系统或工具库时,例如设计一个灵活的日志工具,合理运用函数重载和默认参数可以创建出简洁而强大的接口。本文以C++函数进阶为主题,深入探讨了函数重载、默认参数、函数模板及变量作用域这

weixin_33798152的博客 413

03【C++ 入门基础】函数重载

C++通过函数重载机制解决了C语言在面对大型项目时的局限性,允许同名函数根据参数类型、个数或顺序的不同实现不同功能。文章通过示例展示了函数重载的使用方法及注意事项,并深入分析了其实现原理:C++编译器在生成符号表时会考虑函数参数,使得重载函数能生成不同符号。同时介绍了extern "C"在混合编程中的重要作用,确保C/C++代码的兼容性。该机制显著提升了代码的可读性、可维护性和安全性。

poplar的博客 652

C++ · 入门 · 03 | 函数重载

自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。

CGod的博客 1134

【C++ grammar】重载、内联、变量作用域、带默认参数的函数

目录1、变量的作用域1. 变量的作用域分类2. Unary Scope Resolution (一元作用域解析运算符)2、重载函数3、带有默认参数值的函数4、重载函数 VS 带有默认参数值的函数5、内联函数(Inline Function)1. 普通函数的优缺点2. 使用内联函数3. 定义内联函数4. 内联函数的使用5. 将内联函数的声明和定义分离6. 内联函数使用限制 1、变量的作用域 1. 变量的作用域分类 a. 全局作用域:全局变量 b. 局部作用域:局部变量 局部作用域可以分为:文件作用域、函数作用

hanhan的博客 525

C++——03标识符的作用域与可见性

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、作用域5.特殊命名空间二、生存周期三、类的静态成员1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、作用域 5.特殊命名空间 (1)匿名命名空间,只能在本文件使用。 namespace { } (2)全局命名空间 voi

mindDJX的博客 265

「C/C++」C/C++经验篇 之 C++函数绑定技术解析

函数绑定(Function Binding)是C++中将函数调用与特定上下文或参数关联的技术,它允许我们将函数或成员函数与特定对象或参数值绑定,创建可调用对象以便后续使用。

何曾参静谧的博客 1157

【初阶C++】入门基础

C++ 作为一门兼具面向对象特性与底层高性能的经典编程语言,至今仍是工业界核心开发语言之一,深耕游戏引擎、音视频、嵌入式、服务器、操作系统等高端技术领域。很多初学者觉得 C++ 晦涩难学、学习曲线陡峭,其实只要理清发展脉络、找准学习方向、吃透基础语法,就能稳步入门。本文基于 C++ 入门基础学习资料,系统梳理C++ 发展历史、标准版本迭代、行业地位、就业应用、学习规划,并详解命名空间、IO 流、缺省参数、函数重载、引用、内联函数、nullptrC 语言NULL本质是宏,可能被定义为 0 或。

wuqingyigexiaoba的博客 1326

《C++》03 C++ 变量作用域

C++ 变量作用域作用域是程序的一个区域,一般来说有三个地方可以声明变量: 在函数或一个代码块内部声明的变量,称为局部变量。 在函数参数的定义中声明的变量,称为形式参数。 在所有函数外部声明的变量,称为全局变量。 我们将在后续的章节中学习什么是函数和参数。本章我们先来讲解声明是局部变量和全局变量。局部变量在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。下面

学编程找莫离,莫离老师更懂你! 741

斗破C++编程入门系列之十四:C++程序设计必知:作用域和可见性

很快萧炎被发现,与穆蛇的交手中,由于等级悬殊,萧炎被逼到悬崖边上,无奈之下使用了“焰分噬浪尺”,虽然穆蛇也受到了伤害,但是萧炎已经无力再进行还击,不得已选择落崖而下,危急时刻之前修习的飞行斗技被动触发,萧炎能否崖下求生,请听下回分解。如果程序里所有变量名称都不同,那没有必要考虑作用域和可见性的问题,之所以要考虑作用域和可见性,是因为有时我们使用到了相同的变量名时,如何让二者之间的不产生冲突。斗气有十一个阶别,斗之气,斗者,斗师,大斗师,斗灵,斗王,斗皇,斗宗,斗尊,斗圣,斗帝。

南北粉面馆 1060
上一篇: C++ 入门02:控制结构和循环
下一篇: C++ 入门04:数组与字符串
从一的
博客等级 码龄5年 1995粉丝 213原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值