初始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;
}

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

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

总结:

        今天就到这,加油各位!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SD-WAN对云服务的优化

在云服务日益普及的当下&#xff0c;SD-WAN技术正成为众多企业优化网络连接的首选方案。其通过优化云集成和连接&#xff0c;以及增强应用程序性能&#xff0c;为企业带来了前所未有的业务效益。这种革新性的云连接方式极大地促进了企业对全球劳动力和潜在客户的触达能力。 软件…

Java中Maven的依赖管理

依赖介绍 是指当前项目运行所需要的jar包&#xff0c;一个项目中可以引入多个依赖 配置 在pom.xml中编写<dependencies>标签 在<dependencies>中使用<dependency>引入标签 定义坐标的groupId、rtifactId、version 点击刷新按钮、引入新坐标 例如引入下…

git bash各分支修改内容不同但合并后不显示冲突问题

在跟着廖雪峰老师的git学习时&#xff0c;按部就班的执行明后&#xff0c;发现 而不是出现原文的结果 解决方法&#xff1a; 切换位feature分支&#xff0c;再合并 git switch feature1 git merge master 此时我们发现&#xff1a; 后面再跟着原文敲就可以了

【spark RDD】spark 之 Kryo高性能序列化框架

文章目录 一. RDD序列化的原因二. Kryo序列化框架三. spark 配置 kryo 序列化1. 设定kryo序列化2. 注册序列化类&#xff08;非必须&#xff0c;但是强烈建议做&#xff09;3. 配置 spark.kryoserializer.buffer 一. RDD序列化的原因 Spark初始化工作是在Driver端进行的&#…

机器人系统ros2-开发实践07-将机器人的状态广播到 tf2(Python)

上个教程将静态坐标系广播到 tf2&#xff0c;基于这个基础原理这个教程将演示机器人的点位状态发布到tf2 1. 写入广播节点 我们首先创建源文件。转到learning_tf2_py我们在上一教程中创建的包。在src/learning_tf2_py/learning_tf2_py目录中输入以下命令来下载示例广播示例代码…

【机器学习与实现】线性回归示例——波士顿房价分析

目录 一、创建Pandas对象并查看数据的基本情况二、使用皮尔逊相关系数分析特征之间的相关性三、可视化不同特征与因变量MEDV&#xff08;房价中值&#xff09;间的相关性四、划分训练集和测试集并进行回归分析 一、创建Pandas对象并查看数据的基本情况 boston.csv数据集下载&a…

Grotesque系列靶机Grotesque1

第一步信息收集&#xff1a; 靶机ip&#xff1a;192.168.108.131 攻击机IP&#xff1a;192.168.108.128 nmap扫描靶机的可用端口&#xff1a; 发现http服务的端口存在66端口和80端口 扫描一下靶机端口的http服务&#xff1a; 可以看到&#xff0c;默认的80端口是不存在的&am…

25_Scala集合Tuple

文章目录 tuple1.元组定义2.Tuple元素访问3.如果元素的len2&#xff0c;称之为键值对对象&#xff0c;也称之为对偶元组4.补充上节Map5.Map集合遍历6.集合之间相互转化 tuple 概念&#xff1a;scala语言采用特殊的方式将无关的数据作为一个整体&#xff0c;组合在一起’ 1.元…

【Git】Git学习-13:Gitee和GitLab的使用

学习视频链接&#xff1a;【GeekHour】一小时Git教程_哔哩哔哩_bilibili​编辑https://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780 流程 1. 创建仓库/已有仓库 2. 克隆到本地/在远程仓库关联 git clone 仓库地址 git remote add 仓库别…

小语言模型的潜力

想象一下这样一个世界&#xff1a;智能助手不在云端&#xff0c;而是在你的手机上&#xff0c;无缝了解你的需求并以闪电般的速度做出响应。这不是科幻小说&#xff0c;而是科幻小说。这是小语​​言模型 (SLM) 的希望&#xff0c;这是一个快速发展的领域&#xff0c;有可能改变…

聪明与诚实:社会信任的桥梁

在现代社会中&#xff0c;我们经常听到这样的评价&#xff1a;“某人真聪明。”然而&#xff0c;当我们深入思考时&#xff0c;会发现“聪明”这个词背后所承载的含义并不单一。聪明和狡诈往往被混淆&#xff0c;而诚实的价值却时常被忽视。在一个高度诚信的社会里&#xff0c;…

CentOS 自建gitlab仓库:安装相关工具

所需环境 Node 安装项目依赖、项目打包运行Nginx 前端项目部署&#xff08;正向代理、反向代理、负载均衡等&#xff09;Git 自动化部署时 拉取代码使用GitLab 代码仓库GitLab-Runner GitLab的CI/CD执行器 一、安装Node 检测是否已安装 常用node -v 命令检测。 如果已安装&a…

【挑战30天首通《谷粒商城》】-【第一天】03、简介-分布式基础概念

文章目录 课程介绍 ( 本章了解即可&#xff0c;可以略过)1、微服务简而言之: 2、集群&分布式&节点2.1、定义2.2、示例 3、远程调用4、负载均衡常见的负裁均衡算法: 5、服务注册/发现&注册中心6、配置中心7、服务熔断&服务降级7.1、服务熔断7.2、服务降级 8、AP…

NVIDIA: RULER新测量方法让大模型现形

1 引言 最近在人工智能系统工程和语言模型设计方面的进展已经实现了语言模型上下文长度的高效扩展。以前的工作通常采用合成任务,如密钥检索和大海捞针来评估长上下文语言模型(LMs)。然而,这些评估在不同工作中使用不一致,仅揭示了检索能力,无法衡量其他形式的长上下文理解。 …

(1day)致远M3 log 敏感信息泄露漏洞(Session)复现

前言 系统学习web漏洞挖掘以及项目实战也有一段时间了,发现在漏洞挖掘过程中难免会碰到一些历史漏洞,来帮助自己或是提高自己挖洞和及时发现漏洞效率,于是开始创建这个专栏,对第一时间发现的1day以及历史漏洞进行复现,来让自己更加熟悉漏洞类型以及历史漏洞,方便自己在后续的项…

为什么会查询不到DNS信息?怎么排查?

DNS&#xff08;域名系统&#xff09;是将域名转换为相应 IP 地址的关键系统。查询 DNS 信息具有重要作用&#xff0c;通过查询 DNS 信息&#xff0c;我们可以知道域名对应的 IP 地址&#xff0c;这是最主要的信息&#xff0c;使设备能与目标服务器进行通信&#xff1b;其次是域…

微信小程序03: 获取不限制的小程序二维码

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.1 上文小总结1.1.2 上文传送门 2. 获取不限制二维码操作2.1 准备工作2.1.1 请先复制00篇的统一封装代码2.1.2 修改配置文件中的参数 2.2 具体代码使用与注释如下2.2.1 业务代码如下2.2.2 代码解释(一)[无需复制]2.2.3 创建Base6…

每日一题5:Pandas-修改列

一、每日一题 一家公司决定增加员工的薪水。 编写一个解决方案&#xff0c;将每个员工的薪水乘以2来 修改 salary 列。 返回结果格式如下示例所示。 解答&#xff1a; import pandas as pddef modifySalaryColumn(employees: pd.DataFrame) -> pd.DataFrame:employees.loc[…

C语言之数据结构之栈和队列的运用

目录 1. 用队列实现栈1.1 思路讲解1.2 代码实现 2. 用栈实现队列1.1 思路讲解1.2 代码实现 总结 •͈ᴗ•͈ 个人主页&#xff1a;御翮 •͈ᴗ•͈ 个人专栏&#xff1a;C语言数据结构 •͈ᴗ•͈ 欢迎大家关注和订阅!!! 1. 用队列实现栈 题目描述&#xff1a; 请你仅使用两个…

uniapp 自定义App UrlSchemes

需求&#xff1a;外部浏览器H5页面&#xff0c;跳转到uniapp开发的原生app内部。 1、uniapp内部的配置&#xff1a; &#xff08;1&#xff09;打开manifest->App常用其他设置&#xff0c;如下&#xff0c;按照提示输入您要设置的urlSchemes&#xff1a; &#xff08;2&am…