返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++作用域与函数重载的实现
  • 942
分享到

C++作用域与函数重载的实现

C++作用域C++函数重载 2023-02-03 12:02:01 942人浏览 泡泡鱼
摘要

目录1、作用域1.1 作用域的作用1.2 作用域的分类1.3 static 、const2、 域作用限定符2.1 空间域的命名2.2 指定空间访问2.3 全局展开3、函数重载3.1

1、作用域

1.1 作用域的作用

作用域——scope

通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

简单来说,作用域的使用减少了代码中名字的重复冲突,增强了程序的逻辑性与可靠性

1.2 作用域的分类

c++变量根据定义位置的不同,具有不同的作用域:

  • 全局作用域
  • 局部作用域
  • 文件作用域

全局变量具有全局作用域

全局变量只需在一个源文件中定义,就可以作用于所有的源文件

其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量

静态局部变量具有局部作用域。它只被初始化一次,从第一次初始化直到程序运行结束都一直存在,他和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见

局部变量也只有局部作用域,他是自动对象,他在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用结束后,变量就被撤销,其所占用的内存也被收回

静态全局变量也具有全局作用域,他与全局变量的区别在于如果程序包含多个文件的话,他作用于定义它的文件里,不能作用到其他文件里,即被static关

键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同的静态全局变量,也是不同的变量

1.3 static 、const

1.3.1 static

静态函数只能被所在的cpp文件调用,不同cpp文件可以有相同的静态函数名字。静态函数与普通函数作用域不同,仅在本文件。内部函数:只在当前源文件中声明和定义的函数称为内部函数(static);对于可在当前源文件以外使用的函数,应该在头文件中说明,或者进行extern全局声明。static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

static作用于局部变量时

在局部变量声明前加static = 静态局部变量,存储方式改变了,局部变量是动态存储,静态局部变量是静态存储方式,也就是改变了它的生存期由函数内部或者块内部变为文件作用域,虽然并不是真正的“文件作用域”,声明在函数内,但是在函数外部无法访问,只是为了避免重名冲突

static作用于全局变量时

在全局变量声明前加static = static全局变量,全局变量本身是静态存储方式,静态全局变量也是静态存储方式,在存储方式上无区别,无改变,主要区别在于非静态全局变量的作用于是整个源程序(由多个源程序组成的话,在各个源文件中都有效);静态全局变量限制了作用域,只在定义该变量的源文件中有效(全局作用域->文件作用域),可避免在其他文件中引起错误,static变量只初始化一次,下一次依照上一次的值。

总结

静态局部变量扩大了局部变量的生存期,静态全局变量缩小了全局变量的作用域

1.3.2 const

const在C语言和C++中存在差异,先来解释其中的区别

在C语言中,Const修饰的变量只是告诉编译器该变量是一个只读的变量,不能通过该变量改写器内存空间中的值,但是其本质上还是一个变量,既然是变量,就会有内存地址,因此可以通过指针间接修改该地址空间的值,举例如下

在C++中Const修饰的变量被称为常量,其值存放在常量表中,在使用常量时,编译器回到常量表中查询对应的常量,并将其替换,这部分没有涉及内存分配,因此对其取地址是没有意义的,但是当我们非要对该常量去地址时,则编译器会为其临时分配一个内存,并将常量值存入该临时内存中。事实上,在C++中规定必须用const修饰的指针来指向const修饰的常量。虽然可以使用强制转换的方式,对Const修饰的常量进行去地址,并将其赋值给一个非Const修饰的指针(最好不要这样做),但打这个指针上的任何改动只会影响到临时分配的内存空间,而不会影响到原常量上

2、 域作用限定符

作用域限定符为两个冒号::,其作用是通知编译器从作用域限定符左侧名字所示的作用域中寻找右侧名字

即指定访问指定空间的成员

2.1 空间域的命名

namespace NewSpace
{
    int time = 3600;
    ...
}//命名可嵌套

2.2 指定空间访问

指定空间 ::操作

实例:

std :: cout << "" << std :: endl//std::代表访问标准库

用全局展开的标准库就可以避免在cout endl前指定标准库也是一个方法,但是对于可能产生的冲突,我们还是采取指定空间访问的方法

2.3 全局展开

将某空间在某个局部或者全局展开,就可以自由使用操作

using namespace ...

2.4 部分展开

部分展开只需要展开我们需要用的操作,比如:

using std :: cout

3、函数重载

在C语言程序的编写中,可能会用到几个功能相同的函数,但是有些细节却不同。

例如:交换两个数的值其中包括(int, float,char,double)这些个类型,我们通常借助不同的命名来完成区分

void Swap1(int* a, int* b);
void Swap2(float* a, float* b);
void Swap3(char* a, char* b);
void Swap4(double* a, double* b);

我们可以看出这样的代码不美观而且不便,于是在C++中人们提出可以用一个函数名定义多个函数,也就是所谓的函数重载

3.1 函数重载规则

  • 函数名称必须相同
  • 参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)
  • 函数的返回类型可以相同也可以不相同
  • 仅仅返回类型不同不足以成为函数的重载

实例:

#include<iOStream>
using namespace std;
 
int main()
{
    int max(int a, int b, int c);
    int max(int a, int b);
    int a = 10;
    int b = 20;
    int c = 30;
 
    cout << max(a, b, c) << endl;
    cout << max(a, b) << endl;
    return 0;
}
 
int max(int a, int b, int c)
{
    if (b > a)
        a = b;
    if (c > a)
        a = c;
    return a;
}
 
int max(int a, int b)
{
    return (a > b) ? a : b;
}

到此这篇关于C++作用域与函数重载的实现的文章就介绍到这了,更多相关C++作用域与函数重载内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++作用域与函数重载的实现

本文链接: https://lsjlt.com/news/194089.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++作用域与函数重载的实现
    目录1、作用域1.1 作用域的作用1.2 作用域的分类1.3 static 、const2、 域作用限定符2.1 空间域的命名2.2 指定空间访问2.3 全局展开3、函数重载3.1 ...
    99+
    2023-02-03
    C++作用域 C++函数重载
  • C++ 函数重载与虚函数如何协作?
    c++++ 中函数重载允许为具有不同参数的同名函数定义不同的实现,而虚函数允许在派生类中覆盖基类函数,实现多态性。函数重载和虚函数可以协同工作,通过在基类中设计一个虚拟重载函数,派生类可...
    99+
    2024-04-26
    c++ 函数重载 虚函数
  • c++函数的重载怎么实现
    这篇文章主要讲解了“c++函数的重载怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c++函数的重载怎么实现”吧!1.函数重载概述作用:函数可以相同,提高复用性函数重载必须满足的条件:...
    99+
    2023-06-29
  • C++如何实现函数重载
    这篇文章给大家分享的是有关C++如何实现函数重载的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。函数重载函数重载还有一个别名叫函数多态,其实我个人感觉函数多态这个名字更好理解更恰当一些。函数多态是C++在C语言基础...
    99+
    2023-06-25
  • C++ 函数重载中函数名的作用是什么?
    在 c++++ 中,函数名在重载函数中起区分作用,每个重载函数都有一个唯一的函数签名(包括函数名和参数列表),编译器根据签名确定调用哪个函数。 函数名在 C++ 函数重载中的作用 在 ...
    99+
    2024-04-13
    函数重载 函数名 c++
  • C++ 函数模板中函数重载的实现原理?
    在 c++++ 函数模板中,函数重载可以通过编译器生成不同的符号名称和代码生成来实现。编译器根据传入的参数类型进行匹配,选择最匹配的重载。例如,模板中定义了 print(t) 和 pri...
    99+
    2024-04-15
    函数重载 函数模板 c++
  • 怎么使用C++函数类型与重载函数
    本篇内容介绍了“怎么使用C++函数类型与重载函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.首先对重载函数,明确函数的返回类型不能决定...
    99+
    2023-06-25
  • 详解C++函数类型与重载函数
    目录1.首先对重载函数,明确函数的返回类型不能决定重载函数的类别,即2.注意形参列表中的默认值,使用含默认参数的重载函数时可能会产生二义性。例:问题:总结 1.首先对重载函数,明确函...
    99+
    2024-04-02
  • C++ 函数重载与重写的异同分析
    函数重载和重写的异同点:相同点:提供函数的多组变体,名称重用简化代码。不同点:作用域:重载在同一作用域,重写在不同作用域。参数或返回类型:重载参数类型不同,重写允许参数类型或返回类型不同...
    99+
    2024-04-21
    c++ 函数重载 函数重写 作用域
  • c语言怎么实现函数重载
    在C语言中,没有直接支持函数重载的特性。函数重载是一个面向对象编程语言(如C++)提供的特性,它允许定义名称相同但参数列表不同的多个...
    99+
    2023-10-25
    c语言
  • C++ 友元函数与重载的关系
    是的,友元函数可以被重载,与其他函数一样,重载的友元函数必须具有不同的参数列表,如示例中的 vector3d 类,它具有重载的友元函数 operator+() 和 operator-()...
    99+
    2024-04-16
    c++ 重载 友元函数 作用域
  • Typescript函数重载的实现
    目录函数重载的优点函数重载的适用场景定义与使用函数重载示例1示例2工作中我们往往看见一些别人造好的 轮子, 常常一个函数却有着非常多的调用方式、使用也非常的灵活。今天给大家讲解的就是...
    99+
    2023-05-16
    Typescript 函数重载
  • C++ 函数重载如何与虚函数结合使用?
    函数重载和虚函数可以结合使用,允许子类在不修改父类行为的情况下,以不同方式实现相同操作的不同方面。通过在父类中声明虚函数,并在子类中重载它们,我们可以实现动态多态,允许通过父类引用调用不...
    99+
    2024-04-13
    c++ 函数重载 虚函数
  • C++ 函数重载与重写有何区别?
    c++++ 函数重载与重写:重载:同名函数具有不同的参数类型或数量,编译时选择合适版本。重写:派生类中与基类同名函数,覆盖基类实现,提供派生类特定实现。重载特征:参数类型或数量不同,编译...
    99+
    2024-04-13
    c++ 函数重载 函数重写 作用域
  • C++之函数的重载
    目录一、C++ 函数重载1.重载规则2.匹配原则3.重载底层实现4.extern “C”总结一、C++ 函数重载 C++ 致力于简化编程,能过函数重名来达到简化编程的目的 1.重载规...
    99+
    2024-04-02
  • C++ 函数重载的最佳实践
    c++++ 函数重载最佳实践:1、使用清晰且有意义的名称;2、避免过载过多;3、考虑默认参数;4、保持参数顺序一致;5、使用 sfinae。 C++ 函数重载的最佳实践 函数重载允许我...
    99+
    2024-04-20
    c++ 函数重载 代码可读性
  • C++ 函数重载如何实现多态性?
    函数重载可用于实现多态性,即通过基类指针调用派生类方法,编译器根据实际参数类型选择重载版本。示例中,animal 类定义虚拟 makesound() 函数,dog 和 cat 类重写该函...
    99+
    2024-04-13
    c++ 多态性 作用域
  • C++ 函数重载和重写中的虚函数与动态绑定
    函数重载和重写:函数重载允许在同一类中创建具有不同参数列表的同名函数,而函数重写是在继承关系中用子类覆盖基类的同名函数。虚函数和动态绑定:虚函数允许子类以自己的方式实现父类方法,并在函数...
    99+
    2024-04-20
    函数重载 虚函数 c++
  • C++ 函数重载中常量的作用是什么?
    常量在 c++++ 函数重载中可发挥以下作用:区分函数参数列表,根据不同用途使用不同常量类型作为参数。提供默认参数值,简化函数调用。 C++ 函数重载中常量的作用 在 C++ 中,函数...
    99+
    2024-04-28
    c++ 函数重载 常量
  • C++ 函数重载和重写的实际应用案例
    C++ 函数重载和重写的实际应用案例 函数重载 函数重载允许同一个函数名具有不同的实现,以处理不同类型或数量的参数。例如,我们可以创建一个打印不同类型数据的函数:void print(...
    99+
    2024-04-20
    c++ 函数重载 函数重写
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作