首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++】基础知识讲解(命名空间、缺省参数、重载、输入输出)

但如果包了该头文件,就会发生错误。 上面的错误称为命名冲突。 命名空间的定义 当有两个同名变量时,会优先在找局部的,如果找不到,再找全局的。...使用结构时,注意命名空间名称和作用限定符加在struct后面。注意:同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。...缺省参数 概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实 参则采用该形参的缺省值,否则使用指定的实参。...注意: 半缺省参数必须从右往左依次来给出,不能间隔着给 缺省参数不能在函数声明和定义中同时出现(缺省参数在函数声明给即可) 缺省值必须是常量或者全局变量 C语言不支持(编译器不支持) 函数重载 函数重载...:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型 不同的问题。

15310

C++打怪升级(一)- 命名空间、缺省形参、重载

在介绍之前先来了解一下C++官方库定义的命名空间std std - C++标准库的命名空间名 C++中的头文件定义的所有内容成员(定义与实现)都处在一个命名空间(作用)域std中,用以与用户使用的成员相隔离...本质是该成员的作用域发生了变化:从命名空间域改变为了引入处的作用域。 优点是使用命名空间成员方便了 缺点是引入处作用域如果有与引入成员相同的标识符会引发程序出编译错误。...注意:早期标准库将所有功能(定义)在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应 头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间, 规定C++头文件不带...---- 缺省参数是啥 缺省参数即函数默认形参参数,在定义或声明函数时,其形参可以直接给出形参合适的缺省(默认)值;在调用含有缺省参数的函数时,调用者就可以选择对缺省参数是否进行实参的传入了,如果没有指定实参则采用该形参的缺省值...函数重载是什么 函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型

88620
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    带领你打开C++神秘之门--入门篇

    除此之外,往往一个大型的项目是由多个人即一个团队组合完成的,程序猿A和程序猿B可能会使用同一个名称去定义变量,这是难以预的.在C/C++中,变量、函数和C++中“类” 都是大量存在的,它们的名称将都存在于全局作用域中...早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可.   ...注意2: 缺省值必须是常量或者全局变量 注意3: 缺省参数,在函数的声明和定义不能同时给出,只能在声明中给出....只有在声明给出缺省参数,是因为声明在.h文件中,而定义在另外一个.cpp文件中, 在编译阶段后,不同的.cpp文件会生成不同的目标文件.如果在定义处写则会出错,具体看下图. (1)定义处写缺省参数:(...报错) (2)声明处写缺省参数:(正确写法) 在声明中给出缺省参数: 如果不传参,编译后会默认替换为默认值, 如果传参过去,则编译器会采用实参.

    19720

    基础 | 面向对象实战之封装拖拽对象

    在实际开发中,一个对象我们常常会单独放在一个js文件中,这个js文件将单独作为一个模块,利用各种模块的方式组织起来使用。当然这里没有复杂的模块交互,因为这个例子,我们只需要一个模块即可。...为了避免变量污染,我们需要将模块放置于一个函数自执行方式模拟的块级作用域中。...3、模块作用域中:属性和方法不能被任何实例访问,但是能被内部方法访问,新声明的实例,不会重复创建相同的方法。 对于方法的判断比较简单。...如果方法需要私有不被外界访问,那么就放置在模块作用域中。...对于属性放置于什么位置有的时候很难做出正确的判断,因此我很难给出一个准确的定义告诉你什么属性一定要放在什么位置,这需要在实际开发中不断的总结经验。

    54410

    十二、面向对象实战之封装拖拽对象

    在实际开发中,一个对象我们常常会单独放在一个js文件中,这个js文件将单独作为一个模块,利用各种模块的方式组织起来使用。当然这里没有复杂的模块交互,因为这个例子,我们只需要一个模块即可。...•原型中:属性与方法为所有实例共同拥有,可以被所有实例访问,新声明实例不会重复创建方法。•模块作用域中:属性和方法不能被任何实例访问,但是能被内部方法访问,新声明的实例,不会重复创建相同的方法。...因为在构造函数中的方法总会在声明一个新的实例时被重复创建,因此我们声明的方法都尽量避免出现在构造函数中。 而如果你的方法中需要用到构造函数中的变量,或者想要公开,那就需要放在原型中。...如果方法需要私有不被外界访问,那么就放置在模块作用域中。...对于属性放置于什么位置有的时候很难做出正确的判断,因此我很难给出一个准确的定义告诉你什么属性一定要放在什么位置,这需要在实际开发中不断的总结经验。

    81920

    C++为什么有参数依赖查找(ADL)?

    在作用域中查找名称时,会找到该名称的所有声明,有一个例外,被称为“struct hack”或“类型/非类型隐藏。...什么是 struct hack 同一作用域内的名称冲突:在C++中,如果在同一作用域内,一个名称被用作不同类型的声明,比如一部分声明是类型(如类、结构体、联合体或枚举),而另一部分声明是非类型(如变量、...查找会在多个作用域中进行,直到找到至少一个声明为止:文件作用域:在全局(顶层命名空间)中,查找会在名称使用之前的作用域中进行。...类定义:在类定义中的任何位置使用名称时,会搜索类定义本身、其基类、嵌套类的定义等 类体内查找:如果在类定义中使用了一个名称,首先会在该类的定义范围内查找,直到使用该名称的位置。...基类查找:如果在当前类中没有找到名称,查找会继续到当前类的直接基类定义中。如果基类中也没有找到,并且基类还有自己的基类,查找会递归地继续到更深层次的基类中。

    12110

    《C++枚举类型的进化:从传统到现代的飞跃》

    在 C++的发展历程中,枚举类型(enum)经历了一系列的改进,这些改进使得枚举类型在现代 C++编程中变得更加灵活、安全和强大。...本文将深入探讨 C++中枚举类型的改进,以及这些改进为程序员带来的好处。 一、传统 C++枚举的局限性 在传统的 C++中,枚举类型存在一些明显的局限性。 首先,传统枚举的作用域问题较为突出。...枚举成员的名称会被自动放入包含枚举定义的作用域中,这可能导致命名冲突。例如,如果在多个不同的枚举中使用了相同的名称,可能会引发混淆。 其次,传统枚举的类型安全性不足。...例如: cpp 复制 enum class Color; 这声明了一个名为 Color 的强类型枚举,但没有定义它的成员。在后续的代码中,可以定义这个枚举类型。 三、强类型枚举的优势 1. ...这些改进使得枚举类型在现代 C++编程中成为一种更强大的工具,适用于各种应用场景。 在实际编程中,我们应该尽可能地使用强类型枚举来代替传统枚举,以提高代码的可读性、可维护性和可靠性。

    12810

    【C++】命名空间详解

    前言 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。...如果将两个相同的标识符引入到同一程序中,而编译器或链接器无法区分它们,则编译器或链接器将产生错误。此错误通常称为命名冲突。 如果将冲突标识符引入到同一文件中,则结果将是编译器错误。...如果将冲突标识符引入到属于同一程序的单独文件中,则结果将是链接器错误。 命名空间的定义 命名空间是一个区域,允许您在其内部声明名称以消除歧义。...命名空间为其中声明的名称提供了一个作用域区域(称为命名空间作用域),这仅仅意味着在命名空间内声明的任何名称都不会被误认为是其他作用域中的相同名称。...在命名空间中声明的名称不会被误认为是在另一个作用域中声明的相同名称。 在命名空间中,所有名称都必须是唯一的,否则将导致命名冲突。

    16910

    C++作用域与生命周期

    Pascal之父Nicklaus Wirth曾经提出一个公式,展示出了程序的本质:程序=算法+数据结构。后人又给出一个公式与之遥相呼应:软件=程序+文档。...因此,C++谈及作用域与生命周期针对的就是这三大程序的组成要素:函数、数据类型和变量。下面将一一讲述。 1.作用域与生命周期的区别 作用域与生命周期是两个完全不同的概念。...在英文中,作用域用“scope”表示,生命周期则用“duration”表示。作用域是一个静态概念,只在编译源程序的时候用到。一个标识符的作用域指在源文件中该标识符能够独立地合法出现的区域。...引用方法:其他文件中要先进行函数原型声明,再使用。 内存分布:代码段。 注意:如果在两个源文件中定义了同名的全局函数,连接时会出现重定义错误。...全局变量: 作用域:全局作用域(全局变量只需在一个源文件中定义,就可以作用于所有的源文件); 生命周期:程序运行期一直存在; 引用方法:其他文件中要使用必须用extern 关键字声明要引用的全局变量。

    93732

    C++中的作用域与生命周期

    ---- Pascal之父Nicklaus Wirth曾经提出一个公式,展示出了程序的本质:程序=算法+数据结构。后人又给出一个公式与之遥相呼应:软件=程序+文档。...因此,C++谈及作用域与生命周期针对的就是这三大程序的组成要素:函数、数据类型和变量。下面将一一讲述。 ---- 1.作用域与生命周期的区别 作用域与生命周期是完全两个不同的概念。...- 注意:类成员函数可以定义在类体内,即定义在头文件,当类被不同源文件包含时不会报重定义的错误,因为作用域被限制在类体中。...- 引用方法:其他文件中要先进行函数原型声明,再使用。 - 内存分布:代码区。 - 注意:如果在两个源文件中定义了同名的全局函数,连接时会出现重定义错误。...全局变量: - 作用域:全局作用域(全局变量只需在一个源文件中定义,就可以作用于所有的源文件); - 生命周期:程序运行期一直存在; - 引用方法:其他文件中要使用必须用extern 关键字声明要引用的全局变量

    1.2K20

    一、从C语言到C++(一)

    这样可以使头文件更加简洁,并且可以在多个源文件中包含同一个头文件而不会导致多重定义错误。...使用using声明或指令 如果你不想每次都使用作用域解析运算符来访问命名空间中的名称,你可以使用using声明或指令来简化代码。 using声明:在局部作用域中引入命名空间中的某个特定名称。...using namespace指令可能会导致命名冲突,特别是在大型项目中,因此通常建议在函数或类的局部作用域中使用它,而不是在全局作用域中。...尽量避免在头文件中使用using namespace语句,因为这相当于引入了命名空间内的所有元素,可能会导致其他文件使用时出现命名冲突。...<< std::endl; std::string s = "Example"; 使用 using 声明: 如果你只想在局部作用域中使用某个特定的标准库名称,你可以使用 using 声明。

    11510

    【C++】输入&输出、缺省参数、函数重载

    ,声明在.h后缀的头文件中,使用时只需包含对应 头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(vc 6.0)中还支持<iostream.h...缺省参数 概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值(默认值)。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。...,不能间隔着给 缺省参数不能在函数声明和定义中同时出现,缺省参数也必须放在声明里,而不能只放在定义里,如果只放在定义里,则可能在编译时发生错误。...概念 函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型 不同的问题...+支持函数重载的原理--名字修饰 在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接。

    16010

    【C++】详解命名空间

    那么在今天的内容中我们会简单的了解一下什么是C++以及C++的发展史,之后会重点学习C++的命名空间相关的知识点。下面我们就来开始进入C++的世界吧! 一、什么是C++?...难道它需要作用域界限符?为了验证我们的这个猜想,下面我们继续测试: 从测试结果中可以看到,此时在加上作用域限定符后程序提示的错误是变量b不是全局域中的内容。...但是此时的全局域中存在两个为a的变量,如果我们在对变量a进行使用时,没有指明它的所属,那么就会导致程序无法判断应该使用哪个变量a,这就是为什么系统会提示a不明确。...函数中,因此我们可以在作用域内使用该变量,而在test5这个函数的局部域中无法使用该变量; 生命周期 对于全局变量m和y而言,它们的生命周期是整个工程,因此当我们在跨项目使用时,只要声明了全局变量就能正常使用...对于命名空间而言,它是在全局域中定义的一个新的作用域,而位于命名空间中的对象会像在全局域中一样可以在所在项目中任意使用,那是不是说明它们也和全局域中的对象一样,生命周期是跟随整个工程的呢?

    12310

    编码之旅:C++的基础韵律

    在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称都存在于全局作用域中,可能会导致很多冲突。 2. ...命名空间域里面可以继续嵌套命名空间域,使用里面内容时需要多用几个作用域限定符。 8. 多个文件中可以定义同名namespace,它们会默认合并到⼀起,就像同⼀个namespace⼀样。...缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。 2. 在调用该函数时,如果没有指定实参,则采用该形参的缺省值,否则使用指定的实参,缺省参数分为全缺省和半缺省参数。 3. ...C语言是不支持同⼀作用域中出现同名函数的。 2. C++支持在同⼀作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者参数类型不同。 3....C++设计了inline目的就是替代C的宏函数。 4. inline修饰函数时不建议声明和定义分离到两个文件,分离会导致链接错误。因为inline被展开,就没有函数地址,链接时会出现报错。

    7900

    论编程界的日经问题:到底如何区分静态类型和动态类型、强类型和弱类型?

    但其实,Python 是一门强类型的动态类型语言,虽然在变量声明时我们不需要显式指定类型,但是“类型”这一概念是实际存在的,举个例子,以下 Python 代码会获得一个 TypeError: >>> 1...但是想想 void* 和 reinterpret_cast,想想数组传参时的指针弱化,他们都证明了 C 和 C++ 会随时进行隐式类型转换,而这种隐式类型转换在 C 和 C++ 中仍然是无处不在,这也是它们被称为弱类型语言最好的佐证...语法糖不是弱类型 经过上面的介绍,你可能会联想到 Java 在字符串连接时可以有不同的类型,例如: String a = 1 + "" // "1" 或者在 Python 中,也可以在流程控制表达式中使用非...,而不是显式声明变量类型,是想表明一个观点:动态类型和变量类型推断是完全不同的两个东西,虽然 Java 提供了 var 关键字让我们可以无须显式指定一个变量的类型,但是该变量类型依然在编译期就会被确定下来...rust 的 variable shadowing 在 rust 中,你可以在同一作用域中重复声明多个名称相同的变量,后者则会代替前者: let spaces = " "; // &str let

    43140

    C++打怪升级(四)- 类和对象入门1

    这样就会产生一些问题: 实现相同的功能,代码一般较长,即实现比较麻烦; 往往涉及大量的指针操作,这非常容易出现意料之外的错误,使得我们必须非常小心。 结构体没有对使用者做出任何限制,太自由了。...C++中的类class则没有这个包袱,在没有访问限定符时类的成员变量和成员函数是私有的。...size_t _capacity;//栈容量 }; 类的声明和定义都放在类中,这比较好理解,但是有一个问题:类中的成员函数比较少还可以这么整,但当类中成员函数较多时类就显得臃肿不堪了,也不方便去对类进行和调试...类中的成员函数和成员变量定义和声明的先后位置是没有要求的,这是因为类是一个作用域,在类内的成员变量和成员函数是一个有机的整体,当需要使用类内的某个变量或函数时,会在类中所有地方寻找,而不是在使用的地方之前寻找...---- 类的作用域 类定义了一个新的作用域,类的所有成员都在类的作用域中。 在类体外定义成员时,需要使用作用域操作符::指明成员属于哪个类域。

    51510

    C++奇迹之旅(三):缺省参数与函数重载

    缺省参数分类 缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实 参则采用该形参的缺省值,否则使用指定的实参。...,使用参数的默认值 Func(10); // 传参时,使用指定的实参 return 0; } 缺省参数分类 C++中的缺省参数可以细分为全缺省参数和半缺省参数两类: 全缺省参数 C++中的缺省参数可以细分为全缺省参数和半缺省参数两类...这是因为: 函数声明主要用于告诉编译器函数接口,此时不需要知道默认值。 默认值属于函数实现细节,应该只在定义中给出。 如果声明和定义都给出默认值,将导致默认值定义不一致从而产生错误。...C++是在C语言基础上增加了许多新特性,缺省参数就是其中一个新增特性。 所以纯C语言编译器通常不支持缺省参数这个语法,需要依靠C++编译器支持。...函数重载概念 函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题

    12110

    C++ 类和对象

    ,类的所有成员都在该作用域中,在类外定义成员时,需要使用" :: "进行访问(指明类域) 类域影响的是编译的查找规则,如果没有指定类域,编译器会在全局域中寻找,如果编译的时候找不到声明或者定义...构造函数可以重载 如果没有显式定义构造函数,C++编译器会自动生成一个无参的默认构造函数 可以用 类名=Default 强制生成构造函数...,就必须在初始化列表进行初始化,不然会报错 C++11允许给成员变量在声明的地方给出一个缺省值,如果没有初始化列表就按照缺省值初始化 初始化列表按成员变量在类中声明的顺序进行初始化...构系函数名是在类名前面加~ 无参数无返回值 一个类只能有一个构系函数,如果没有显式定义,系统会自动生成默认的构系函数 对象生命周期结束时,系统会自动调用构系函数...C++固定对类类型对象使用运算符时,必须转换成调用对应的运算符重载,若没有对应的重载就会编译错误。

    8410

    JS进阶:作用域和作用域链

    在全局作用域没有声明,所以在全局作用域下取值会报错。...如果一个标识符已经在代码块内部被定义,那么在此代码块内使用同一个标识符进行 let 声明就会导致抛出错误。...因为 let 不能在同一作用域内重复声明一个已有标识符,此处的 let 声明就会抛出错误。但如果在嵌套的作用域内使用 let 声明一个同名的新变量,则不会抛出错误。...这表明函数内部的变量i与循环变量i不在同一个作用域,有各自单独的作用域。 作用域链 1.什么是自由变量 首先认识一下什么叫做 自由变量 。...如下代码中,console.log(a)要得到a变量,但是在当前的作用域中没有定义a(可对比一下b)。当前作用域没有定义的变量,这成为 自由变量 。

    2.6K20

    【笔记】《C++Primer》—— 第18章:用于大型程序的工具

    18.1 异常处理 在之前5.6的时候简单提到过异常处理,当时只大概介绍了如何使用C++的异常处理部分,这一节更深入地介绍了异常处理时的细节 异常处理的流程是:在C++中我们throw了一个表达式后会...我们平时的写法就是把整个std的名称都引入了全局作用域中 因此我们不应该滥用using指示,这很容易导致我们一开始想要避免的名称冲突问题重新出现 如果我们在头文件的顶层作用域中使用了using指示或using...声明,那么会将这个名称注入到所有包含了这个头文件的文件中,这也会有很大的风险,所以我们最好只在头文件的局部作用域中用using 命名空间中的名称查找有和之前的名称查找相似的特性,只向上查找声明了的名字...一个using声明引入的函数将重载所属作用域中的其他同名函数,如果这个函数恰好遇到了形参相同的同名函数则会容易出现二义性,需要特指来避免,形参不相同的也会进入重载列表中 如果存在多个using指示,那么多个命名空间的名字都会进入候选函数集...这种操作显然产生了一个矛盾:类的继承常常是后期决定的,而如果不是在间接继承的时候就声明virtual,如果漏声明了哪一次,则仍然可能产生重复的基类成员,这给后期扩充类增加了麻烦。

    1K20
    领券