[C++]入门基础(1)

Hello大家好,今天通过本篇文章,我们来初步学习C++,C++可以说是对C语言的一个升级,我们会一步一步的由浅入深的学习C++。

目录

1.第一个C++程序

2.命名空间

2.1 命名空间出现的意义

2.2 namespace的定义

2.3 命名空间的使用

3.C++输入&输出

4.缺省参数

5.函数重载

总结:


1.第一个C++程序

大家都知道,每一个语言都有我们的第一个程序,也就是hello world,那么我们C++的helloworld程序应该怎么写呢,我们可以看一下,代码如下。

#include<iostream>
using namespace std;
int main()
{cout << "hello world" << endl;return 0;
}

 观察上面的代码,我们可以与C的程序进行比较,我们可以发现,二者比较相似,因为C++就是由C语言发展而来的,C++包含的头文件并不是<stdio.h>,C++的标准头文件是<iostream>,还有namespace命名空间的使用,以及输入输出的不同,我们都会在后面讲到。

大家可能有疑问,为什么C++头文件没有.h后缀呢,这是由于在C++的发展中,最早之前的头文件也是含有.h后缀的,但是之后为了区分新老版本,就在新版本中将头文件的后缀去掉了,如果你在一些比较老的编译器中,还是可以使用<iostream.h>的,只是已经比较少了。

我们接着向下讲C++知识

2.命名空间

我们通过上面的第一个C++程序,或者如果之前见到C++语言,我们都很容易发现都会有这句话

using namespace std;

那么这句话到底是干什么的呢?这就涉及命名空间的知识了。

2.1 命名空间出现的意义

正如名字命名空间描述的一致,命名空间实质上像是一个空间,即一作用域。

我们在之后的C++程序中,会使用到大量的函数和类变量,这些变量都会存在于全局作用域中,可能会导致许多命名冲突,这时如果我们将变量,函数放到不同的命名空间中,我们就能避免这些冲突  ,这就是namespace出现的意义。

举个具体的例子

在后面我会用命名空间,来解决这个问题

2.2 namespace的定义

  •  定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。

如图所示,我们自己创建了一个命名空间lmd,里面可以放变量,函数,以及创建的结构体类型

  • namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。

我们可以试着解决一下,刚才函数名和变量名冲突的问题

很显然这个问题以及解决了

同时我们也发现,要使用作用域里的东西,需要在变量名前加 :: 这个符号,标明你所用的变量出自那个作用域

  • C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑,还会影响变量的声明周期,命名空间域和类域不影响变量声明周期。
  •  namespace只能定义在全局,当然他还可以嵌套定义。

  • 项⽬⼯程中多⽂件中定义的同名namespace会认为是⼀个namespace,不会冲突。

多文件种定义同名的namespace会被合并为同一个namespace,并不会发生冲突。

  • C++标准库都放在⼀个叫std(standard)的命名空间中。

也就是我们平常使用的using namespace std;

2.3 命名空间的使用

命名空间的使用即使用using namespace + 命名空间的名字

这个操作相当于将命名空间展开

注意:这里的展开与C语言中头文件的展开并不一致

命名空间相当于一个带边界的空间,当我你们使用using时,会将这个边界打开,即命名空间的使用,并不是将namespace中的各中变量拷贝到文件中去。

但是请注意:展开命名空间中全部成员,项目不推荐,冲突风险很大,日常小练习程序为了方便推荐使用。

3.C++输入&输出

  • <iostream> 是 Input Output Stream 的缩写,是标准的输入、输出流库,定义了标准的输入、输出对象。
  • std::cin 是 istream 类的对象,它主要⾯向窄字符(narrow characters (of type char))的标准输入流。
  • std::cout 是 ostream 类的对象,它主要⾯向窄字符的标准输出流。
  • <<是流插入运算符,>>是流提取运算符。(C语⾔还⽤这两个运算符做位运算左移/右移)

在C++中,有许多符号在不同的地方有不同的含义,这里>>和<<就是一个例子

  • 使⽤C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动指定格式,C++的输⼊输出可以自动识别变量类型(本质是通过函数重载实现的,这个以后会讲到),其实最重要的是C++的流能更好的支持自定义类型对象的输入输出。

如图所示,在C++由于可以字段识别类型,可以减少冗杂的代码量,让我们非常的舒适。

  • cout/cin/endl等都属于C++标准库,C++标准库都放在⼀个叫std(standard)的命名空间中,所以要通过命名空间的使方式去使用他们。 
  • ⼀般⽇常练习中我们可以using namespace std,实际项目开发中不建议using namespace std

这样可以将std::cin,std::cout直接写为cin和cout非常的方便,但是如果在开发项目中,使用命名空间,可能会导致变量冲突不建议使用。

  • 这里我们没有包含<stdio.h>,也可以使用printf和scanf,在包含<iostream>间接包含了。vs系列编译器是这样的,其他编译器可能会报错。

4.缺省参数

什么是缺省参数?

  • 缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参,缺省参数分为全缺省和半缺省参数。(有些地方把缺省参数也叫默认参数)
void Func(int a = 0)
{
cout << a << endl;
}

如图所示即一个缺省参数,当调用Func时,若不给参数,则默认a = 0,若给参数,a就等于所给的参数。

  • 全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。

可以看到不能间隔跳跃给缺省值 

  • 带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参。

可以看到在调用缺省函数时,不能跳跃给实参。

  • 函数声明和定义分离时,缺省参数不能在函数声明和定义中同时出现,规定必须函数声明给缺省值。

5.函数重载

C++支持在同⼀作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。这样C++函数调用就表现出了多态行为,使用更灵活。C语言是不支持同⼀作用域中出现同名函数的。

 

以上便是函数重载的一个实例,可以发现函数重载十分方便,能用一个函数名完成多种内部实现

要实现函数重载必须满足一个及以上下面的条件

  1. 参数类型不同
  2. 参数个数不同
  3. 参数类型顺序不同

注意:返回值不能作为重载条件,因为在调用时也无法区分

总结:

以上便是,我们初识C++入门基础的第一章内容,主要讲了命名空间,输入输出,缺省参数及函数重载,希望对你有所帮助。

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

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

相关文章

亚信安全:《2024云安全技术发展白皮书》

标签 云计算 安全威胁 云安全技术 网络攻击 数据保护 一句话总结 《云安全技术发展白皮书》全面分析了云计算安全威胁的演进&#xff0c;探讨了云安全技术的发展历程、当前应用和未来趋势&#xff0c;强调了构建全面云安全防护体系的重要性。 摘要 云安全威胁演进&#xff…

c#第五次作业

目录 1. 实现通用打印泛型类&#xff0c;可以打印各个集合中的值&#xff0c;方便调试 2. 计算遍历目录的耗时 3. 有哪些算术运算符&#xff0c;有哪些关系运算符&#xff0c;有哪些逻辑运算符&#xff0c;有哪些位运算符&#xff0c;有哪些赋值运算符 1&#xff09;算术运算…

电商数据仓库

目录 1.数据仓库的数据来源为业务数据库&#xff08;mysql&#xff09; 初始化脚本 2.通过sqoop将mysql中的业务数据导入到大数据平台&#xff08;hive&#xff09; 在hive中建立映射的数据库 导入数据 3.通过hive进行数据计算和数据分析 形成数据报表 补全用户信息表中的…

【密码学】流密码的基本概念

在介绍流密码之前&#xff0c;我们先来弄明白一个基础前置知识点——异或运算。 一、异或运算&#xff08;XOR&#xff09; 运算规则&#xff1a;相同为0&#xff0c;不同为1 特点&#xff1a;一个比特进行两次异或运算&#xff0c;可以恢复成原来的比特。 明文&#xff1a;110…

降Compose十八掌之『飞龙在天』| Layout

公众号「稀有猿诉」 原文链接 降Compose十八掌之『飞龙在天』| Layout 页面布局是GUI应用开发的核心&#xff0c;决定着一个UI具体如何实现。今天将延着路线图来练习『降Compose十八掌』的第二招式&#xff0c;学习一下如何使用Compose中的布局来构建页面。 基础骨架 基…

Jenkins教程-15-常用插件-Blue Ocean

上一小节我们学习了Jenkins定时任务构建的方法&#xff0c;本小节我们讲解一下Jenkins常用插件Blue Ocean的使用方法。 Blue Ocean 提供了一套可视化操作界面来帮助创建、编辑 Pipeline 任务。 Blue Ocean 特性&#xff1a; 流水线编辑器&#xff1a;用于创建贯穿始终的持续交…

游戏软件缺少d3dx9_42.dll怎么修复?五种方法助你轻松解决

D3DX9_42.dll的丢失是一种常见的操作系统异常问题&#xff0c;由于日常使用电脑时的不当操作&#xff0c;可能会导致一些dll文件的丢失&#xff0c;D3DX9_42.dll就是其中之一。对于这种情况&#xff0c;我们可以通过谨慎的修复来解决。以下是一种科学的解决D3DX9_42.dll丢失的方…

小白学C++(第一天)基础入门

温馨提醒&#xff1a;本篇文章&#xff0c;请各位c基础不行的童鞋不要贸然观看 C的第一个程序 第一个关键字namespace namespace 是定义空间的名字的关键字&#xff0c;使用格式格式如下&#xff1a; namespace 空间名 { } 其中{ }内的命名空间的成员&#xff0c;可以定义…

初识数组!

目录 1.概念 2.一维数组的创建和初始化 1&#xff09;数组创建 2&#xff09;数组的初始化 3&#xff09;数组的类型 3.一维数组的使用 1) 数组下标 2) 数组元素的打印 3) 数组的输入 4.一维数组在内存中的存储 5.sizeof计算数组元素个数 6.二维数组的创建 1.概念 …

【qt】获取主机信息系统

话不多说,先一睹芳颜! 如果你也想达到这种效果,那咱们就开始吧! 目录 一.登录界面设计1.ui登录设计 二.加载界面1.lineEdit的密码输入模式2.lineEdit按回车跳转的信号3.密码的判断4.创建加载界面5.创建定时器来进行进度条的移动6.定时器执行的槽函数 三.主机信息界面1.主机信息…

解析java128陷阱

一、提要 在java开发时&#xff0c;由于基本类型不能调用方法&#xff0c;在某些方面很不方便&#xff0c;因此产生了包装类。我们把基本类型和对应的包装类的转换叫装箱、拆箱。 1.装箱 基本类型转成包装类对象 关键字valueOf->装箱,可以指定进制&#xff1a; Integer…

非参数检测5——双输入检测系统

在很多情况下&#xff0c;信号常常存在于两个带有独立噪声的信道中。所以很有必要研究双输入系统。双输入系统广泛应用于无线电天文学、水下声波检测和地球物理学等领域。

视频融合共享平台LntonCVS视频监控汇聚平台工业视频监控系统

LntonCVS是一款功能强大、灵活部署的安防视频监控平台&#xff0c;具备广泛的扩展性和视频能力。它支持多种主流标准协议&#xff0c;如国标GB28181、RTSP/Onvif、RTMP&#xff0c;同时还能兼容厂家的私有协议和SDK&#xff0c;如海康Ehome、海大宇等。除了传统的安防监控功能外…

HSG金属表面缺陷检测

HSG金属表面缺陷检测 1. 项目背景1.1 项目简述1.2 项目目标 2. 解决方案3. 数据集3.1 收集各种缺陷的图片3.2 利用有限图片创造更多可能3.3 分割图像3.4 打标签 4. 部分代码4.1 数据集划分4.2图像分割4.3 训练模型4.4 预测 5. 预测结果 1. 项目背景 1.1 项目简述 iPad HSG 的…

Qt json和xml操作

学习目标&#xff1a; 认识json和xml读写操作 前置环境 运行环境:qt creator 4.12 学习内容 XML XML&#xff08;Extensible Markup Language&#xff09;是一种标记语言,是一种用于描述数据结构的语言。它非常适合用于存储和传输数据。 XML 的主要特点如下: 可扩展性:XM…

数组算法(二):交替子数组计数

1. 官方描述 给你一个二进制数组nums 。如果一个子数组中 不存在 两个 相邻 元素的值 相同 的情况&#xff0c;我们称这样的子数组为 交替子数组 。 返回数组 nums 中交替子数组的数量。 示例 1&#xff1a; 输入&#xff1a; nums [0,1,1,1] 输出&#xff1a; 5 解释&#…

项目一单机安装基于LNMP结构的WordPress网站 web与数据库服务分离

网站的类型&#xff1a; Jave:LNMT PHP:LNMP Python: LNMU 项目部署&#xff1a; 1.项目的类型&#xff08;项目的开发语言&#xff09; 2.项目运营平台的技术选择 3.尽快让项目运行起来 all in one部署 4. 架构的优化 配置ansible管理环境 配置nginx 配置数据库服务…

leetcode:编程基础0到1

文章目录 交替合并字符串str.length();StringBuilder类型 ,toString()append() &#xff0c;chatAt()题目描述 交替合并字符串 str.length(); 输出字符串str的长度 StringBuilder类型 ,toString() append() &#xff0c;chatAt() 题目描述 class Solution {public String …

python获取文件列表按照文件修改时间进行排序,默认按照文件名时间戳排序

python获取文件列表按照文件修改时间进行排序,默认按照文件名时间戳排序 1、流程 1、获取文件绝对路径下的所有文件 2、通过os.path.getmtime获取每个文件的修改时间,并与文件组成元组,方便后续排序 3、默认按照时间戳降序,否则按照按修改时间排序文件列表(从最晚到最早)…

开个技术外挂|用技术轻松实现GPU显卡冷却风扇噪声控制

GPU显卡冷却风扇噪声分析 游戏玩家可能有这样的体验&#xff1a;当显卡卖力工作的时候&#xff0c;明显感觉到从机箱传来的噪声变大了。这是因为系统监测到芯片有过热风险&#xff0c;从而自动提升了冷却风扇的转速。 如下图所示&#xff0c;当GPU显卡处于 20C 时&#xff0c;风…