初始C++(一)

目录

前言:

命名空间:

总结:


前言:

        C语言学好了,现在当然要进阶了,那么就是从C++开始。

        C++兼容C,支持其中90%的语法。可能有很多同学听说过C#,C#和C没有关系,是微软研究出来对标Java的语言。

        C++有63个关键字。

命名空间:

        我们之前使用C语言,其实有很多缺陷,比如从命名开始,就有缺陷,因为在全局变量中,我们不能使用相同的名字,否则会报错,此时我们的本贾尼大佬就开始增强C语言的可读性和实用性,添加了命名空间。举个栗子:

        注意此时没有包含stdlib.h头文件,就没有报错。

        这是C++文件,因为也支持C语言,当我们包含了stdilib.h头文件以后,就发生了报错。这是因为,我们引用头文件就相当于把头文件展开,stdlib.h头文件中有rand这个全局变量,我们又定义了一个全局变量,所以就会报重定义的错误。

        这其实也就是C语言的缺陷。

        但是我们知道,一个项目可能由100或更多的人来完成,我们最后都要合并为一个项目,但是我们不可能保证每一个人的命名都不一样。

        为了解决这个问题,我们要使用namespace(命名空间)。

#include<stdio.h>
#include<stdlib.h>
namespace bit 
{int rand = 0;
}int main()
{printf("%d\n", rand);return 0;
}

        可以发现我们此时打印的是头文件中的rand变量。 

        但是此时我们就像使用命名空间中的变量该怎么办?不同域可以定义同名变量,但是当我们全局和局部都有相同的的变量名时,我们该如何去访问全局变量呢?

int a = 2;int main()
{int a = 1;printf("局部变量 a = %d\n", a);printf("全局变量 a = %d\n", ::a);//此时 :: 前面没有任何语句,相当于默认访问全局变量return 0;
}

         当我们定义了命名空间,在前面加上命名空间名即可访问。

#include<stdio.h>
#include<stdlib.h>
namespace bit 
{int rand = 0;
}int main()
{printf("%d\n", bit::rand);return 0;
}

        编译器默认查找规则:1.当前局部域 2.全局变量。

        我们可以这样理解,当我们要去地里摘菜时,一定是先去自己家中找(就相当于局部域),之后如果没有了,就去村中野地去找(就相当于全局域);如果还没有,就真的找不到了。

        命名空间如果指定,就相当于去隔壁张大爷家的菜地中摘,张大爷指定了可以免费拿。

        在一个项目当中,多个文件中允许存在相同的命名空间,当使用时会进行合并。

        当命名空间合并以后,就不能有同名的内容了或者嵌套定义才可以。

展开命名空间:

        当我们要频繁用到一个命名空间中的一个变量时,就会要写很多代码,此时就需要用到一个语法:using namespace 命名空间名。

        这叫做展开命名空间。

namespace bit 
{int c = 0;
}//展开命名空间
using namespace bit;int main()
{printf("%d\n", c);return 0;
}

         当我们展开了命名空间后,此时编译器默认查找规则会多出来一个,就是局部没找到到全局找,全局没找到到展开命名空间找。

        但是我们不能随意展开命名空间,比如:

namespace ss
{int c = 0;
}namespace bit 
{int c = 0;
}//展开命名空间
using namespace bit;
using namespace ss;int main()
{printf("%d\n", c);return 0;
}

         就像上面,此时就不知道去找谁。

         使用命名空间的3种方式:

  1. 指定访问
  2. 全展开
  3. 指定展开某一个
namespace bit 
{int c = 0;
}//指定展开某一个
using bit::c;int main()
{printf("%d\n", c);return 0;
}

        以上就是指定展开命名空间中的某一个。 

        C++标准库为了防止和你定义的名字冲突,它标准库中的一些东西包在了命名空间中,所以我们还是要指定或者展开。

        其中cout就是输出,c是console控制台;endl相当于换行。

#include<iostream>
//IO流int main()
{//<< 流插入int i = 0;double j = 1.11;//其自动识别类型cout << i << " " << j << '\n' << endl;//其中endl也是换行return 0;
}

        我们需要做出一下修正:

std::cout << i << " " << j << '\n' << std::endl;

         这些东西会包在一个std的命名空间中,所以我们要指定命名空间。

         此时我们就可以展开官方的std命名空间。

using namespace std;//全部展开并不好
using std::cout;//展开指定某一个
using std::endl;
#include<iostream>
//IO流
using namespace std;//全部展开并不好int main()
{int i = 0;cin >> i;//流提取,不需要取地址cout << i;return 0;
}

        cin是流提取,相当于scanf但是不需要取地址。

        如果我们不习惯,因为C++支持C语言,所以我们也可以使用printf和scanf,但是以后还是建议使用cout和cin。

        我们可以发现我们刚才引入的iostream头文件没有加上.h,C++可以不用带.h。当然仅限C++头文件,不包括C的头文件,所以C的头文件还是要带上.h。

缺省参数:

        C++支持在函数中提供缺省参数。

using namespace std;//缺省参数
void Func(int a = 1)
{cout << a << endl;
}int main()
{Func();Func(2);return 0;
}

         我们也可以提供全缺省函数:

//全缺省
void F2(int a = 10, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;
}int main()
{F2(1, 2, 3);F2(1, 2);F2(1);F2();return 0;
}

        必须按照顺序传,不能跳跃着传输。

        我们也可以半缺省:

//半缺省
void F3(int a, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;
}int main()
{F3(1);//至少要传入一个F3(1, 2);F3(1, 2, 3);return 0;
}

        其实缺省参数用处用很多,比如当我们要初始化一个栈时,我们不知道要初始化多大空间时就可以使用官方的值,也可以参入参数。

        缺省参数不能声明和定义同时给。

总结:

        今天就到这,加油各位!

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

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

相关文章

Mintegral引领短剧行业新风尚:广告变现策略助力出海应用高效增长

短剧&#xff0c;一颗正在冉冉升起的新星&#xff0c;如今成为了影视行业的新风口。《2023短剧行业研究报告》显示&#xff0c;2023年短剧市场规模达到373.9亿元&#xff0c;同比增长267.65%&#xff0c;预计2024年将超过500亿元。近年来&#xff0c;政策出台、供需促进及应用出…

什么是Facebook付费广告营销?

Facebook作为全球最大的社交平台之一&#xff0c;成为了跨境卖家不可或缺的营销阵地。它不仅拥有庞大的用户基数&#xff0c;还提供了丰富的广告工具和社群互动功能&#xff0c;让商家能够精准触达目标市场&#xff0c;提升品牌影响力。云衔科技通过Facebook付费广告营销的专业…

ODOO17数据库安全策略一(ODOO17 Database Security Policy I)

ODOO17作为ERP软件&#xff0c;其核心优势在于数据安全。凭借强大的原生安全机制及灵活的配置&#xff0c;确保数据安全无忧&#xff1a; ODOO17, as an ERP software, boasts its significant advantage in exceptional data security performance. It effectively ensures wo…

DirClass

DirClass 通过分析&#xff0c;发现当接收到DirClass远控指令后&#xff0c;样本将返回指定目录的目录信息&#xff0c;返回数据中的远控指令为0x2。 相关代码截图如下&#xff1a; DelDir 通过分析&#xff0c;发现当接收到DelDir远控指令后&#xff0c;样本将删除指定目录…

2024暨南大学校赛热身赛解析

文章目录 Uzi 的真身D 基站建设 Uzi 的真身 分析&#xff1a;本来想使用动态规划算法的&#xff0c;但是由于数据计算过大&#xff0c;导致超时 正确的思想&#xff1a;直接线性遍历字符串&#xff0c;分别统计字符“j”的个数&#xff0c;后面对于统计字符“z”和字符“h” 的…

flutter中固定底部按钮,防止键盘弹出时按钮跟随上移

当我们想要将底部按钮固定在底部&#xff0c;我们只需在Widget中的Scaffold里面加一句 resizeToAvoidBottomInset: false, // 设置为false&#xff0c;固定页面不会因为键盘弹出而移动 效果图如下

[法规规划|数据概念]金融行业数据资产和安全管理系列文件解析(2)

“ 金融行业在自身数据治理和资产化建设方面一直走在前列。” 一直以来&#xff0c;金融行业由于其自身需要&#xff0c;都是国内开展信息化建设最早&#xff0c;信息化程度最高的行业。 在当今数据要素资产化的浪潮下&#xff0c;除了行业自身自身数据治理和资产化建设方面&am…

蓝牙模块HC-08+WIFI模块ESP-01S

蓝牙模块 又叫蓝牙串口模块。 串口透传技术&#xff1a;透传即透明传送&#xff0c;是指在数据的传输过程中&#xff0c;通过无线的方式使这组数据不发生任何形式的改变&#xff0c;仿佛传输过程是透明的一样&#xff0c;同时保证传输的质量&#xff0c;原封不动地道了最终接收…

Oracle sqlnet.ora配置文件

一、作用 这里可以看官网解释Parameters for the sqlnet.ora File (oracle.com) 该文件是配置文件配置文件。它驻留在客户端计算机和数据库服务器上。配置文件使用此文件进行存储和实现。可以使用文件中的访问控制参数配置数据库服务器。这些参数根据协议.sqlnet.orasqlnet.o…

项目经理【人】任务

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 【环境】任务 【环境】绩效 【人】概述 【人】原则 【人】任务 一、定义团队的基本规则&塔克曼阶梯理论 1.1 定义团队的基本规则 1.2 塔克曼阶梯理论 二、项目经理管理风格 …

CCE云原生混部场景下的测试案例

背景 企业的 IT 环境通常运行两大类进程&#xff0c;一类是在线服务&#xff0c;一类是离线作业。 在线任务&#xff1a;运行时间长&#xff0c;服务流量及资源利用率有潮汐特征&#xff0c;时延敏感&#xff0c;对服务SLA 要求高&#xff0c;如电商交易服务等。 离线任务&…

Pycharm链接远程服务器GPU跑深度学习模型

我们在学习深度学习时&#xff0c;常常会遇到自己笔记本电脑性能不够&#xff0c;显卡性能低&#xff0c;在运行深度学习项目的时候很浪费时间。如果实验室有可用于深度学习的服务器的话&#xff0c;会大大减少代码执行时间&#xff0c;服务器上的GPU算力一般都很高。 本文主要…

【IP:Internet Protocol,子网(Subnets),IPv6:动机,层次编址:路由聚集(rout aggregation)】

文章目录 IP&#xff1a;Internet Protocol互联网的的网络层IP分片和重组&#xff08;Fragmentation & Reassembly&#xff09;IP编址&#xff1a;引论子网&#xff08;Subnets&#xff09;特殊IP地址IP 编址: CIDR子网掩码&#xff08;Subnet mask&#xff09;转发表和转发…

智慧之巅:大数据与算力中心的融合演进

智慧之巅&#xff1a;大数据与算力中心的融合演进 1 引言 在这个数据驱动的时代&#xff0c;我们站在了一个前所未有的历史节点上。大数据和算力中心&#xff0c;这两个曾经各自为政的领域&#xff0c;如今正以一种前所未有的方式交织在一起&#xff0c;共同推动着数字经济的蓬…

MFC扩展库BCGControlBar Pro v34.1 - 可视化设计器、主题新升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v34.1已正式发布了&#xff0c;这个版本包含了对Windows 10/11字体图标的支持、功能区和…

有哪些方式可以有效地评估精益生产咨询公司的能力?

在寻求精益生产咨询服务的过程中&#xff0c;评估咨询公司的能力至关重要。这不仅关乎企业精益生产转型的成功与否&#xff0c;更直接影响到企业未来的竞争力和发展。那么&#xff0c;有哪些方式可以有效地评估精益生产咨询公司的能力呢&#xff1f; 首先&#xff0c;了解咨询公…

纯血鸿蒙APP实战开发——短视频切换实现案例

短视频切换实现案例 介绍 短视频切换在应用开发中是一种常见场景&#xff0c;上下滑动可以切换视频&#xff0c;十分方便。本模块基于Swiper组件和Video组件实现短视频切换功能。 效果图预览 使用说明 上下滑动可以切换视频。点击屏幕暂停视频&#xff0c;再次点击继续播放…

【排序算法】之快速排序

一、算法介绍 快速排序(Quick sort)是由C.A.R.Hoare提出来的。快速排序法又叫分割交换排序法&#xff0c;是目前公认的最佳排序法&#xff0c;也是使用“分而治之”的方式&#xff0c;会先在数据中找到一个虚拟的中间值&#xff0c;并按此中间值将所有打算排序的数据分为两部分…

Verilog中4位数值比较器电路

某4位数值比较器的功能表如下。 请用Verilog语言采用门级描述方式&#xff0c;实现此4位数值比较器 参考代码如下&#xff1a; &#xff08;CSDN代码块不支持Verilog&#xff0c;代码复制到notepad编辑器中&#xff0c;语言选择Verilog&#xff0c;看得更清楚&#xff09; t…

ESP8266固件烧写

概述 因为手上有块闲置的ESP8266开发板&#xff0c;想着拿来倒腾一下WIFI探针&#xff0c;倒腾了一阵测试成功&#xff0c;博文记录用以备忘 硬件 ESP8266 NodeMCU 环境 Windows 11 步骤 1.下载esp32_win32_msys2_environment_and_toolchain-20181001.zip 2.下载xtensa…