从C语言到C++(语法基础一)

2023-11-14

 一、关键字的添加

          C++是对C的“增强”,几乎引入了一倍的关键字。

          C语言常用关键字

912a5f45402a4288aba0758ed560232f.png

          C++98关键字

26cffa783bab4183b1e10506916c84c4.png

二、命名空间

        在写C语言程序时,当你写了一个函数把它命名为max,且此时包含头文件stdlib.h时你会发现编译会报错,这是C语言的缺陷之一,因为你命名的函数max与标准库里的函数max命名冲突,在C语言中这并不能被很好解决,于是C++引入了命名空间的概念用以解决此类问题,定义命名空间使用namespace关键字,使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染。可以认为命名空间影响了编译器查找的规则,编译器不会主动到命名空间里寻找内容,当要使用时从外部调用。

   命名空间的定义

namespace m1 // m1为命名空间的名称,可以随意定义
{
 // 命名空间中的内容,既可以定义变量,也可以定义函数
 int c=10;
 int d=20;
 int Add(int a, int b)
 {
 return a + b;
 }
}

//命名空间的嵌套使用
namespace m2
{
 int c;
 int Add(int a, int b)
 {
 return a + b;
 }
 
 namespace n
 {
 int c;
 int Add(int a, int b)
 {
 return a + b;
 }
 }
}

        值得注意的是同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

        命名空间的使用

namespace m
{
 int a = 10;
 int b = 20;
 int Add(int a, int b)
 {
 return a + b;
 }
 int Sub(int a, int b)
 {
 return a -b;
 }
}
int main()
{
 printf("%d\n", a); // 该语句编译出错,无法识别a
 return 0;
}

        之前已经提到对于命名空间里的成员是编译器无法直接访问的,所以上面这段代码出错。如何使用命名空间?

        1.加命名空间名称及作用域限定符

           直接在成员名前加上作用域的名称和::符号

int main()
{
 printf("%d\n", m1::c);
 return 0;
}

           2.使用using将命名空间中成员引入

using m1::d;
int main()
{
 printf("%d\n", m1::c);
 printf("%d\n", d);
 return 0; 
}

         这里只将变量名d展开,而c并未展开所以还是需要加上作用域限定符。

         3.使用using namespace 将命名空间名称引入

using namespce m1;
int main()
{
 printf("%d\n", c);
 printf("%d\n", d);
 Add(1, 1);
 return 0; 
}

       using namespace+命名空间名称将命名空间全部展开,相当于命名空间失效,命名空间内部成员全部暴露。我们思考一个问题,当在写C++程序时有时总会写上这样一段代码“using namespce std;”,这其实就是将C++的标准库的命名空间展开了,以方便调用库中成员。

 三、C++的输入与输出

#include <iostream>
using namespace std;
int main()
{
	int a;
	double b;
	cin >> a;
	cin >> b;
	cout << a <<" "<<b << endl;

	return 0;
}

      与C语言使用头文件类似,使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空间。C语言和C++在输入输出的效率上各有优劣,C++中在输入输出时不需要增加数据格式控制如“%d”、“%s”等,但是在输出一段带有格式的内容时,C语言的printf函数又会显得方便许多。

四、缺省参数  

       缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。缺省参数分为全缺省参数和半缺省参数。

       全缺省参数,顾名思义就是函数所有参数都有一个缺省值

#include <iostream>
using namespace std;

void TestFunc(int a = 1, int b = 2, int c = 3)
{
 cout<<"a = "<<a<<endl;
 cout<<"b = "<<b<<endl;
 cout<<"c = "<<c<<endl;
}

int main()
{

    TestFunc();//打印结果数值为1,2,3
    TestFunc(10);//打印结果数值为10,2,3
    TestFunc(10,20);//打印结果数值为10,20,3
    TestFunc(10,20,30);//打印结果数值为10,20,30

    return 0;
}

       半缺省参数并非一半参数而指的是部分参数拥有缺省值。
void TestFunc(int a, int b = 2, int c = 3)
{
 cout<<"a = "<<a<<endl;
 cout<<"b = "<<b<<endl;
 cout<<"c = "<<c<<endl;
}

      这里有非常值得注意的几个语法规定,一是半缺省参数必须从右至左依次给出,不能间隔。二是缺省参数不能在函数声明和定义中同时出现。三是缺省值必须是常数或全局变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从C语言到C++(语法基础一) 的相关文章

  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向

随机推荐

  • 2023年第47届(第二届)浙江技能大赛网络安全项目 (世赛省选拔赛)A模块解析

    2023年第47届 第二届 浙江技能大赛网络安全项目 世赛省选拔赛 A模块解析 模块A 企业基础设施安全 1 竞项赛目简介 1 1 介绍 1 2 任务描述 1 3 竞赛说明 2 竞赛项目工作任务 2 2 操作系统安全加固 2 2 1 Win
  • OpenCV3.4.13+OpenCV_contrib 双摄像头实时拼接 环境配置

    如题 基于OpenCV3 4 13 VS2015做了个双摄像头实时拼接的代码 是一个大项目的一个baseline的一部分 下面先说配环境再给代码 环境配置 关于OpenCV VS的环境配置网上已经有很多了 因为这份代码用到了OpenCV C
  • 【微信小程序】实现根据某一属性值分类渲染数组内容

    需求与效果 实现根据某一属性值分类渲染数组 需求是 数组如下 渲染在页面上时 根据p num值进行分组渲染 p num相同的放在同一容器里 容器外包裹边框 array content 内容1 id 1 p num 1 content 内容2
  • RabbitMQ系列(十一)RabbitMQ进阶-Queue队列详解-延时队列

    RabbitMQ进阶 Queue队列详解 延迟队列 文章目录 RabbitMQ进阶 Queue队列详解 延迟队列 1 延迟队列场景 1 1 场景 2 延迟队列实现方式 3 TTL Exchange实现延迟队列 3 1 初始化死信交换机 3
  • 正则匹配html内容中的图片路径

    正则匹配html内容中的图片路径 let imgReg
  • 事不避难,知难不难

    My first article
  • Qt 中引入ffmpeg 动态库

    1 前期准备 在qt引入ffmpeg动态库的时候 需要准备ffmpeg的动态库和头文件 2 打开qt项目 在qt项目的 pro文件中添加以下几行代码 INCLUDEPATH PWD thirtLib ffmpeg4 2 include wi
  • 使用R语言添加抖动数据点

    使用R语言添加抖动数据点 在数据可视化中 抖动 jitter 是一种常用的技术 用于在散点图中添加一定程度的随机扰动 以解决数据重叠的问题 本文将介绍如何使用R语言添加抖动数据点 并提供相应的源代码 首先 我们需要准备一组数据用于绘制散点图
  • HTTP的演变

    这个问题之前一直没有关注过 后来在面试的过程中 面试官总喜欢问http1 0和http1 1之间的区别是啥 改进是啥以及优缺点 在今天进行一个总结 Http1 0和Http1 1的对比 这里讲俩放在一起进行对比学习 相较于Http1 0而言
  • Java调用Python脚本报错cv2.error: OpenCV(4.8.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src

    Java调用python脚本报错cv2 error OpenCV 4 8 0 D a opencv python opencv python opencv modules imgproc src resize cpp 4062 error
  • Android开机动画

    Android开机动画 1 BootLoader开机图片 2 Kernel开机图片 3 系统启动时 BootAnimation 动画 3 1 bootanimation zip位置 3 2 bootanimation启动 3 3 Surfa
  • linux保存git用户名密码

    1 创建git credentials gt vim git credentials https username password github com gitlab或github地址 2 执行git命令 gt git config gl
  • leetcode分类刷题:二分查找(Binary Search)(四、基于值域的数组/矩阵类型)

    基于值域的二分法与基于定义域的题型不同 它的目标是从一 特殊排序序列 中确定 第k个元素值 而不像基于定义域的题型是从排序序列中找小于等于特定target值的第一个索引 同时 针对 特殊排序序列 往往需要嵌套使用双指针法进行操作 进一步增加
  • mysql数据库备份与表备份

    一 Mysql中的数据备份 Mysql中数据备份使用的命令是 mysqldump命令将数据库中的数据备份成一个文本文件 表的结构和表中的数据将存储在生成的文本文件中 mysqldump命令的 工作原理很简单 它先查出需要备份的表的结构 再在
  • 转码日记——Javascript笔记(13)修改css样式、事件冒泡和委派

    使用JS控制css样式 1 修改css样式 语法 元素 style 样式名称 样式值 样式值必须是一个字符串 修改box1的样式 box1 style width 300px 如果css中还有 如background color 这种名称在
  • 程序员修仙之路--优雅快速的统计千万级别uv(留言送书)

    菜菜 咱们网站现在有多少PV和UV了 Y总 咱们没有统计pv和uv的系统 预估大约有一千万uv吧 写一个统计uv和pv的系统吧 网上有现成的 直接接入一个不行吗 别人的不太放心 毕竟自己写的 自己拥有主动权 给你两天时间 系统性能不要太差呀
  • Head First 设计模式 C#实现

    Head First 设计模式 文章目录 Head First 设计模式 完整源码 设计模式入门 具体设计模式 策略模式 观察者模式 装饰者模式 工厂模式 抽象工厂模式 单例模式 命令模式 适配器模式 外观模式 模版方法模式 迭代器模式 组
  • 指针以及内存分配

    1 指针很灵活 这使得指针很难管理 在定义指针时 将在栈中开辟一块内存存放指针的地址 栈内的内存由系统分配和释放 指针的地址内存只是存放指针的地址 不存放指针指向的数据 值得注意的是 定义指针时指针会随机指向一块内存 如int p p会指向
  • 243. 一个简单的整数问题2(树状数组)

    输入样例 10 5 1 2 3 4 5 6 7 8 9 10 Q 4 4 Q 1 10 Q 2 4 C 3 6 3 Q 2 4 输出样例 4 55 9 15 解析 一般树状数组都是单点修改 区间查询或者单点查询 区间修改 这道题都是区间操作
  • 从C语言到C++(语法基础一)

    一 关键字的添加 C 是对C的 增强 几乎引入了一倍的关键字 C语言常用关键字 C 98关键字 二 命名空间 在写C语言程序时 当你写了一个函数把它命名为max 且此时包含头文件stdlib h时你会发现编译会报错 这是C语言的缺陷之一 因