[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.mfbz.cn/a/784425.html

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

相关文章

【Java系列】深入解析 Lambda表达式

简化这个代码 这个就是Lambda表达式,可以简化匿名内部类的写法 package lambda;public class demo2 {public static void main(String[] args) {//第二个参数是一个接口,所以我们在调用方法的时候,需要传递这个接口的实现类对象--接口多态// 但是这个实现类,我只要用一次,所以我…

C++基础(十二):string类

这一篇博客&#xff0c;我们正式进入STL中的容器的字符串类的学习&#xff0c;C标准模板库&#xff08;STL&#xff09;中的std::string类是一个用于表示和操作字符串的类。它封装了动态分配的字符数组&#xff0c;提供了丰富的成员函数来进行字符串的操作&#xff0c;例如拼接…

身边的故事(十五):阿文的故事:再消失

物镜人非&#xff0c;沧海桑田。像我们这些普通的凡人&#xff0c;哪有什么试错的机会&#xff0c;每走一步都是如履薄冰&#xff0c;小心谨慎&#xff0c;错一步可能就会万劫不复。唉&#xff0c;如果...唉...哪有什么如果... 阿文的房子很快装修完成&#xff0c;入新房那天就…

世界商用飞机机型大全-使用Java抓取FlightAware后的答案

目录 前言 一、数据说明 1、实时航班飞机机型数据 2、网页结构分析 二、使用Java进行信息抓取 1、定义页面PageVO对象 2、爬取属性定义 3、启动信息抓取组件 三、成果分析 1、商业飞行的飞机机型的种类 2、飞机种类排名前十名 3、航班数排名后十名 4、看中国国产大飞…

Typora篇-忍痛开启

语雀专业会员即将到期, 我看着99元的学费款, 我决定重新用回Typora。 虽然里面有一些文件但是我还是舍不得ಥ_ಥ 99元巨款。 下面开启我的Typora整活历程&#xff0c; 大家有什么好用的插件快捷方式一起来分享啊。

Profibus转Modbus模块连SmartPLC接汇川630伺服案例

一、环境&#xff1a;Modbus转Profibus模块&#xff08;XD-MDPB100)是一种通讯协议转换器&#xff0c;能够实现Modbus 协议与Profibus-DP协议的信息共享。汇川630伺服作为一种先进的运动控制设备&#xff0c;其平稳性和准确性获得了充分肯定。本文将详细分析怎么使用Profibus转…

U盘管理软件有哪些?3款好用的软件亲测有效!

在数字化办公与数据交换日益频繁的今天&#xff0c;U盘作为便携的存储设备&#xff0c;其重要性不言而喻。 然而&#xff0c;U盘的使用也带来了数据泄露、病毒感染等安全隐患。为了有效管理U盘&#xff0c;确保数据安全与合规性&#xff0c;市场上涌现出了众多U盘管理软件。 小…

代码随想录(day1)二分法

if语句的基本语法 if 要判断的条件: 条件成立的时候&#xff0c;要做的事举例&#xff1a; if nums[middle]<target:leftmiddle1 while语句的基本语法&#xff1a; while 判断条件(condition)&#xff1a;执行语句(statements)举例&#xff1a; while left<right:midd…

ctfshow web入门 nodejs web334--web337

web334 有个文件下载之后改后缀为zip加压就可以得到两个文件 一个文件类似于index.php 还有一个就是登录密码登录成功就有flag username:ctfshow password:123456因为 return name!CTFSHOW && item.username name.toUpperCase() && item.password passwor…

tkinter给按钮设置背景图片

tkinter给按钮设置背景图片 效果代码 效果 代码 import tkinter as tk from PIL import Image, ImageTk# 创建主窗口 root tk.Tk() root.title("按钮背景图片示例")# 加载图片 image Image.open("new.png") photo ImageTk.PhotoImage(image)# 创建按钮…

谷歌云 | Gemini 大模型赋能 BigQuery 情感分析:解码客户评论,洞悉市场风向

情感分析是企业洞察客户需求和改进产品服务的重要工具。近年来&#xff0c;随着自然语言处理 (NLP) 技术的飞速发展&#xff0c;情感分析变得更加精准高效。Google 推出的 Gemini 模型&#xff0c;作为大型语言模型 (LLM) 的代表&#xff0c;拥有强大的文本处理能力&#xff0c…

day02_员工管理

文章目录 新增员工需求分析和设计代码开发功能测试代码完善录入的用户名已存在&#xff0c;抛出异常后没有处理新增员工的时候&#xff0c;创建人id和修改人id设置为了固定值ThreadLocal&#xff08;面试题&#xff09; 分页查询问题解决 启用禁用员工账号需求和分析代码设计 编…

腾讯发布2024大模型十大最新趋势!

近日&#xff0c;在2024世界人工智能大会上&#xff0c;腾讯正式发布了《2024大模型十大趋势——走进“机器外脑”时代》报告。目前&#xff0c;这一报告正在AI产业界各大社群快速传播。 报告中&#xff0c;腾讯研究院试图通过10个关键性的趋势&#xff0c;去理解全世界范围内正…

【React Hooks原理 - useCallback、useMemo】

介绍 在实际项目中&#xff0c;useCallback、useMemo这两个Hooks想必会很常见&#xff0c;可能我们会处于性能考虑避免组件重复刷新而使用类似useCallback、useMemo来进行缓存。接下来我们会从源码和使用的角度来聊聊这两个hooks。【源码地址】 为什么要有这两个Hooks 在开始…

HBuilder X 小白日记03-用css制作简单的交互动画

:hover选择器&#xff0c;用于选择鼠标指针浮动在上面的元素。 :hover选择器可用于所有元素&#xff0c;不只是链接 :link选择器 设置指向未被访问页面的链接的样式 :visited选择器 用于设置指向已被访问的页面的链接 :active选择器 用于活动链接

观察者模式(Observer Pattern)

观察者模式&#xff08;Observer Pattern&#xff09; 定义 观察者模式定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能够自动更新自己。别名&#xff1…

AI语言处理的双刃剑:Tokens令牌化技术解析

生成式人工智能模型&#xff0c;如GPT-4o&#xff0c;采用基于Transformer架构的复杂处理方式&#xff0c;这与人类处理文本的方式存在明显差异。这些模型依赖于一种称为“令牌化”的过程&#xff0c;将文本分解为更小的片段&#xff0c;称为“令牌”&#xff0c;以便更有效地处…

BP神经网络的实践经验

目录 一、BP神经网络基础知识 1.BP神经网络 2.隐含层选取 3.激活函数 4.正向传递 5.反向传播 6.不拟合与过拟合 二、BP神经网络设计流程 1.数据处理 2.网络搭建 3.网络运行过程 三、BP神经网络优缺点与改进方案 1.BP神经网络的优缺点 2.改进方案 一、BP神经网络基…

XDMA原理学习(1)——DMA技术详解

目录 一、什么是DMA&#xff1f;为什么需要DMA&#xff1f; 二、DMA分类 2.1 Block DMA 2.2 Scatter-Gather DMA 2.3 Ring buffer DMA 三、实际案例 3.1 STM32微处理器 3.1.1 Block DMA 3.1.2 Scatter-Gather DMA 3.1.3 使用场景举例&#xff1a; 3.1.4 配置与实现 …

香橙派OrangePi AIpro测评:我的高性能AI开发板实操

香橙派OrangePi AIpro测评&#xff1a;高性能AI开发板的实际应用与操作指南 前言 在物联网和人工智能领域飞速发展的背景下&#xff0c;开发板作为硬件开发的重要工具&#xff0c;越来越受到开发者的青睐。香橙派OrangePi AIpro因其强大的性能和丰富的接口&#xff0c;成为了…