[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.xdnf.cn/news/1475484.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【AutoencoderKL】基于stable-diffusion-v1.4的vae对图像重构

模型地址&#xff1a;https://huggingface.co/CompVis/stable-diffusion-v1-4/tree/main/vae 主要参考:Using-Stable-Diffusion-VAE-to-encode-satellite-images sd1.4 vae 下载到本地 from diffusers import AutoencoderKL from PIL import Image import torch import to…

太实用了吧?手把手教你华为eNSP模拟器桥接真实网络!

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 晚上好&#xff0c;我的网工朋友。 今天聊聊eNSP桥接正式网络&#xff0c;就是把eNSP桥接进真实的网络&#xff0c;利用我们的物理网卡通过实体路…

昇思25天学习打卡营第5天|MindSpore网络模型构建

打卡 目录 打卡 模型类 模型网络&#xff1a;定义与使用 模型层级分解 nn.Flatten 张量转换-演示查看 nn.Dense 全连接层-演示查看 nn.ReLU 非线性激活层-演示查看 nn.SequentialCell 有序网络容器 nn.Softmax 多分类概率预测 模型参数 前置感受&#xff1a;总的来说…

Xilinx FPGA:vivado关于IIC的一些零碎知识点

一、简介 IlC(inter-Integrated circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线&#xff0c;用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信&#xff0c;在小数据量场合使用&#xff0c;传输距离短&#xff0c;任意时刻只能有一个主机等特性…

如何安全隐藏IP地址,防止网络攻击?

当您想在互联网上保持隐私或匿名时&#xff0c;您应该做的第一件事就是隐藏您的 IP 地址。您的 IP 地址很容易被追踪到您&#xff0c;并被用来了解您的位置。下面的文章将教您如何隐藏自己&#xff0c;不让任何试图跟踪您的活动的人发现。 什么是 IP 地址&#xff1f; 首先&am…

cv2.GaussianBlur()--sigmaX

目录 1 函数原型 2 原理 2.1 一维高斯分布 2 .2 二维高斯分布 3 总结 1 函数原型 def GaussianBlur(src, ksize, sigmaX, dstNone, sigmaYNone, borderTypeNone): # real signature unknown; restored from __doc__"""GaussianBlur(src, ksize, sigmaX[, …

C++·栈和队列

栈和队列是什么看这里&#xff1a; 数据结构栈和队列-CSDN博客文章浏览阅读948次&#xff0c;点赞25次&#xff0c;收藏26次。本节讲解了栈和队列的内容&#xff0c;其核心就是栈的特点是后进先出&#xff0c;队列的特点是先进先出。并用C语言实现了栈和队列的结构以及它们的各…

Mock.js 的使用方法代码示例

mock.js 的安装 npm install -D vite-plugin-mock mock.jsvite.config.ts配置&#xff1a; import { viteMockServe } from vite-plugin-mock import { userConfigExport, ConfigEnv } from viteexport default defineConfig(({ command }) > {return {plugins: [viteMock…

HTML5 学习笔记总结

1.1 什么是网页 1.2 什么是 HTML 1.3 网页总结 2.常用浏览器 3.Web 标准 3.1 为什么需要Web 标准 3.2 Web 标准&#xff08;重点&#xff09;

MyBatis的简介与使用

Mybatis JDBC操作数据库的缺点 存在大量的冗余代码。手工创建 Connection、Statement 等&#xff0c;效率低下。手工将结果集封装成实体对象。查询效率低&#xff0c;没有对数据访问进行优化。 Mybatis框架 简介 MyBatis 本是 apache 的一个开源项目 iBatis, 2010年这个项目由…

什么是静态住宅代理?一文看懂它

静态住宅代理&#xff08;也称为 ISP 代理&#xff09;是最流行的代理类型之一。它们也是隐藏身份和在线匿名的最佳方式之一。但是您需要了解它们什么&#xff1f;是什么让它们如此特别&#xff1f;为什么您要使用住宅代理而不是仅仅使用常规代理服务&#xff1f;如果你感兴趣&…

品牌推广必备:软文案例撰写与文案策划全解析!

做品牌推广&#xff0c; 不仅需要有推广渠道&#xff0c;文案的策划也是必不可少的一部分。文案是属于灵魂的部分。 作为一名手工酸奶品牌的创始人&#xff0c;目前全国也复制了100多家门店&#xff0c;这篇文章&#xff0c;详细和大家拆解&#xff0c;文案创作的要点&#xf…

OS-HACKNOS-2.1

确定靶机IP地址 扫描靶机开放端口信息 目录扫描 访问后发现个邮箱地址 尝试爆破二级目录 确定为wordpress站 利用wpscan进行漏洞扫描 #扫描所有插件 wpscan --url http://192.168.0.2/tsweb -e ap 发现存在漏洞插件 cat /usr/share/exploitdb/exploits/php/webapps/46537.txt…

STM32对数码管显示的控制

1、在项目开发过程中会遇到STM32控制的数码管显示应用&#xff0c;这里以四位共阴极数码管显示控制为例讲解&#xff1b;这里采用的控制芯片为STM32F103RCT6。 2、首先要确定数码管的段选的8个引脚连接的单片机的引脚是哪8个&#xff0c;然后确认位选的4个引脚连接的单片机的4…

【数据结构】栈的实现(含详细代码)

文章目录 1.栈1.1 栈的概念及结构1.2 栈的实现1.3 代码实现 1.栈 1.1 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守先进后…

[行业原型]线上药房系统高保真原型分享

​我国网上药店起步很早。 2005年12月份京卫大药店便率先拿到《互联网药品交易服务资格证书》&#xff0c;成为国内首家网上药店。随着互联网药品零售行业发展&#xff0c;2013年至2017年&#xff0c;网上药店市场规模从12亿元增至61亿元。 各家互联网药品零售企业在药品质量把…

pandas数据分析(8)

描述性统计量和数据聚合 描述性统计量 描述性统计量通过量化数据来概括数据集。DataFrame和Series可以通过sum、mean、count等方法来获取各种描述性统计量。在默认情况下会按照axis0返回一个Series&#xff0c;也就是说会得到一个有关列的统计量&#xff1a; 如果要计算行的统…

ubuntu 分区情况

ubuntu系统安装与分区指南 - Philbert - 博客园 (cnblogs.com)https://www.cnblogs.com/liangxuran/p/14872811.html 详解安装Ubuntu Linux系统时硬盘分区最合理的方法-腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1711884

C# modbus验证

窗体 还有添加的serialPort控件串口通信 设置程序配置 namespace CRC {public static class CRC16{/// <summary>/// CRC校验&#xff0c;参数data为byte数组/// </summary>/// <param name"data">校验数据&#xff0c;字节数组</param>///…

新增多种图表类型,新增插件管理模块,DataEase开源数据可视化分析工具v2.8.0发布

2024年7月8日&#xff0c;人人可用的开源数据可视化分析工具DataEase正式发布v2.8.0版本。 这一版本的功能变动包括&#xff1a;图表方面&#xff0c;新增组合图、热力地图、符号地图、K线图等图表类型&#xff0c;并对已有的仪表盘、明细表、指标卡、富文本等图表类型进行了功…