C++起始(关键字,命名空间,缺省参数,函数重载(c语言为什么不支持函数重载))

1. C++关键字(C++98)

在这里插入图片描述

2. 命名空间

在这里插入图片描述
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用
域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污
染,namespace关键字的出现就是针对这种问题的。

命名空间定义

可以放变量,也可以放函数
此时程序中有三个a
在这里插入图片描述
可以通过编译
在这里插入图片描述
而我们打印一下,发现a是20在这里插入图片描述
为什么?

因为近

访问全局变量中的a
在这里插入图片描述
访问命名空间里的a
在这里插入图片描述
命名空间可以嵌套
在这里插入图片描述
访问N3里面的变量
在这里插入图片描述

如果在一个工程中出现了相同名字的命名空间,那么编译器就把这些名字相同的命名空间合并到一起了
注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
~~

命名空间的使用

1,直接在成员面前加N1::
2.using N1::a;		使用这种方法相当于把a作为全局变量
3.using namesapce  N1  告诉编译器,把当前N1这个命名空间里的全部内容当作全局变量

3. C++输入&输出

c中printf函数在打印时需要进行格式控制
以前是iostream.h 但为了和c语言区分 所以去掉.h。cout在系统中给定的一个名字叫做std的这个命名空间中

  1. 使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空
    间。

    注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,
    后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧
    编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用+std的方式。
  2. 使用C++输入输出更方便,不需增加数据格式控制,比如:整形–%d,字符–%c

在这里插入图片描述
在这里插入图片描述

4. 缺省参数

C++中函数的参数也可以配备胎

4.1 缺省参数概念
缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默
认值,否则使用指定的实参。
在这里插入图片描述
缺省参数分类
所有参数都带有默认值

void TestFunc(int a = 10, int b = 20, int c = 30)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}

只有一部分参数带有默认值(从右往左给)
void TestFunc(int a, int b = 10, int c = 20)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}

//a.h
void TestFunc(int a = 10);
// a.c
void TestFunc(int a = 20)
{}
// 注意:如果生命与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省
值。

注意:
1 半缺省参数必须从右往左依次来给出,不能间隔着给实参匹配从左往右
2. 缺省参数不能在函数声明和定义中同时出现。(如果值不一样会冲突,一般会在声明中给出,)
3.缺省值必须是常量或者全局变量
4 C语言不支持(编译器不支持)

5. 函数重载

自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。
比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者
是“谁也赢不了!”,后者是“谁也赢不了!”
5.1 函数重载概念
函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形
参列表(参数个数 或 类型 或 顺序)必须不同
,常用来处理实现功能类似数据类型不同的问题

编译期间,编译器会推演实参的类型
在这里插入图片描述
参数类型一定只能是其中一个函数的全部类型
在这里插入图片描述
同一个作用域,同一个名字,参数列表不能一样,否则不能重载,与返回值类型相同没关系。
参数列表不同:个数,类型,类型的次序。

在c语言中不支持函数重载
在这里插入图片描述

在这里插入图片描述

为什么c中不支持函数重载?

在这里插入图片描述
编译可以通过,这个函数连函数体都没有怎么可能会编译通过?
在编译期间不会找函数具体的问题,因为编译器看到有函数声明,在当前文件没有,但其他文件中可能有
在链接期间。编译器找这个函数地址,找不到报错。

在这里插入图片描述
我们可以看到,我们在写函数时用的名字时Add,而编译器在找这个函数时,重新修改了这个名字,把Add修改为_Add。
在这里插入图片描述
让我们把文件改回成c++

在这里插入图片描述
在这里插入图片描述
编译器把名字重新命名为~~?Add@@YAHHH@Z~~
在这里插入图片描述
我们再次调用两个Add函数在c++环境下,我们可以看到报错,
(?Add@@YAHHH@Z)
(?Add@@YANNN@Z)

编译器重新给了两个函数不同的名字
我们再看一个例子在这里插入图片描述
**(?Add@@YAHHH@Z)
(?Add@@YANNN@Z)
(?Add@@YANHN@Z)**我们可以知道在VS编译器中,H代表整形,N代表浮点型。
而在c中编译器只是简单的加了一个前缀_

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GitHub相关

git是一个版本控制工具. 主要解决三个问题 代码被喵星人吃掉了.产品经理反复修改需求, 需要同时维护多个版本代码.多人协同开发. 安装 git for windows 这个是一个git的windows系统的命令行版本 https://git-scm.com/downloads 下载会很慢很慢 使用 Github 创建项目 注册…

c++起始(名词修饰,extern “C” ,引用)

名字修饰(name Mangling) 在C/C中&#xff0c;一个程序要运行起来&#xff0c;需要经历以下几个阶段&#xff1a;预处理、编译、汇编、链接。 Name Mangling是一种在编译过程中&#xff0c;将函数、变量的名称重新改编的机制&#xff0c;简单来说就是编译器为了区分各 个函数…

linux系统编程之进程概念(操作系统---管理,进程创建,进程状态,进程优先级, 环境变量,程序地址空间,进程O(1)调度方法)

系统编程&#xff1a; 进程概念->进程控制->基础IO->进程间通信->进程信号->多线程进程概念 冯诺依曼体系结构----现代计算机硬件体系结构 冯诺依曼体系结构----现代计算机硬件体系结构 计算机五大硬件单元&#xff1a;输入设备&#xff1a;键盘输出设备&#…

Linux系统编程之进程控制(进程创建,fork函数,进程中止,进程等待,程序替换)

进程创建 fork()------复制&#xff0c;返回值&#xff0c;写时复制 vfork()创建子进程—子进程与父进程共用同一块虚拟地址空间&#xff0c; 为了防止调用栈混乱&#xff0c;因此阻塞父进程直到子进程调用exit&#xff08;&#xff09;退出或者进行程序替换 vfork创建的子…

Linux系统编程下做一个简易的shell

自主实现一个shell--------minshell shell&#xff1a;命令行解释器-------解释执行用户的输入&#xff08;完成相对应的功能&#xff09; 步骤 1. 获取标准输入中的字符串 2. 对字符串进行解析[ls -l -a][ls ] [-l ] [-a] 3. 创建子进程 4. 子进程中进行程序替换 5. 父进程…

C++起始(内联函数,宏的优缺点,const关键字,auto关键字(C++11)基于范围的for循环(C++11). 指针空值nullptr(C++11))

内联函数 概念 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数压栈的开销&#xff0c; 内联函数提升程序运行的效率 函数前增加inline关键字将其改成内联函数&#xff0c;在编译期间编译器会用函数体替换函数的调用…

数据结构课程设计---c语言实现通讯录(动态扩容+文件存储)

1 题目一 &#xff1a; 通讯录 1.1问题描述 编写一个通讯录管理系统&#xff0c;以把所学数据结构知识应用到实际软件开发中去。每条信息至包含 &#xff1a;姓名&#xff08;NAME &#xff09;街道&#xff08;STREET&#xff09;城市&#xff08;CITY&#xff09;邮编&#…

数据结构课程设计------c实现散列表(二次探测再哈希)电话簿(文件存储)

题目二 &#xff1a;散列表的设计与实现 2.1问题描述 设计散列表实现电话号码查找系统&#xff0c;使得平均查找长度不超过2基本要求 &#xff08;1&#xff09;设每个记录有下列数据项&#xff1a;电话号码、用户名、地址&#xff1b; &#xff08;2&#xff09;从键盘输入各…

科技论文----论搜索引擎现状及发展趋势

搜索引擎现状及发展趋势 【摘要】 随着最近10年中国互联网的快速发展菜互联网已经彻底改变了人们的生活方式&#xff0c;而在互联网的发展过程中。搜索引擎发挥了巨大的推动作用。本文对搜索引擎的发展历史采用的技术&#xff0c;发展现状出现的问题以及未来发展方向进行了综述…

数据结构课程设计------扫雷游戏(升级版,可展开)

本程序由团队中的一个人所写&#xff0c;本人看懂并写下此文章 题目&#xff1a;扫雷 3.1问题描述 扫雷游戏 [基本要求] &#xff08;1&#xff09;完成棋盘的初始化并在标准显示器中显示 &#xff08;2&#xff09;通过输入行列值确定用户输入 &#xff08;3&#xff09;游…

C语言的编译链接过程的介绍

发布时间: 2012-11-08 10:17 作者: 未知 来源: 51Testing软件测试网采编 字体: 小 中 大 | 上一篇 下一篇 | 打印 | 我要投稿 | 推荐标签&#xff1a; DotNet 软件开发 | 感言十年 C语言的编译链接过程要把我们编写的一个c程序&#xff08;源代码&#x…

技术与技巧札记

Linux常用命令及技巧&#xff1a; &#xff08;1&#xff09;cat /proc/version 查看当前内核的版本 (2) 挂载nfs文件夹&#xff1a;需要先确认在&#xff0f;etc&#xff0f;exports文件&#xff0c;可以用于开发板挂载的文件夹 mount -o nolock 10.0.22.30:/root/sharednfs …

从0开始python学习-35.allure报告企业定制

目录 1. 搭建allure环境 2. 生成报告 3. logo定制 4. 企业级报告内容或层级定制 5. allure局域网查看 1. 搭建allure环境 1.1 JDK&#xff0c;使用PyCharm 找到pycharm安装目录找到java.exe记下jbr目录的完整路径&#xff0c;eg: C:\Program Files\JetBrains\PyCharm Com…

系统架构札记

什么是高内聚、低耦合&#xff1f; 起因&#xff1a;模块独立性指每个模块只完成系统要求的独立子功能&#xff0c;并且与其他模块的联系最少且接口简单&#xff0c;两个定性的度量标准――耦合性和内聚性。 耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一…

c++中的继承--1(引出,继承方式,继承的对象模型)

继承的引出 概念&#xff1a; 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特 性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象程序设计的层次结构…

c++中的多态---1(多态概念,静态联编和动态联编,多态原理解析,重载,重写,重定义的对比)

多态的基本概念 多态是面向对象设计语言数据抽象和继承之外的第三个基本特征多态性(polymorphism)提供接口与具体实现之间的另一层隔膜&#xff0c;从而将“what”和“how”分离开来&#xff0c;多态性改善了代码的可读和组织性&#xff0c;同时也使创建的程序具有可扩展性&am…

Ubuntu下各种服务搭建及操作技巧

Ubuntu下搭建TFTP 1、安装软件包 sudo apt-get install tftpd tftp xinetd 2、建立配置文件 在/etc/xinetd.d/下建立一个配置文件tftp sudo vi /etc/xinetd.d/tftp 内容如下 service tftp { socket_type dgram protocol udp wait yes user root …

使用Automake和Autoconf生成Makefile

automake 所产生的 Makefile 除了可以做到程序的自动编译和链接 外&#xff0c;还可以用来生成各种文档&#xff08;如manual page、info文件&#xff09;&#xff0c;可以将源代码文件包装起来以供发布。所以程序源代码所存放的目录 结构最好符合GNU的标准惯例。下面以hello.…

c++中多态---3(虚析构和纯虚析构,向上类型转化和向下类型转化)

虚析构和纯虚析构 虚析构virtual ~类名(){}类内声明&#xff0c;类内实现解决问题&#xff1a;通过父类指针指向子类对象释放时候不干净的问题 纯虚析构 写法 virtual ~类名(){}0; 类内声明 类外实现 如果出现了纯虚析构函数&#xff0c;这个类也算是抽象类&#xff0c;不可…

嵌入式开发硬件知识札记

三态逻辑 1. 概念 三态指其输出既可以是一般二值逻辑电路&#xff0c;即正常的高电平&#xff08;逻辑1&#xff09;或低电平&#xff08;逻辑0&#xff09;&#xff0c;又可以保持特有的高阻抗状态。高阻态相当于隔断状态&#xff08;电阻很大&#xff0c;相当于开路&#xff…