C++/初识C++

目录

一、前言

二、正文

1C语言第一个程序: 

1.1C++的第一个程序:

2.命名空间

2.1 namespace的价值

2.2namespace的定义

2.3namespace的正常使用

3.C++输出和输入

 三、结言


一、前言

点来不及悼念C语言,接下来出场的是新的语言C++。不同于C语言的是,C++中增加了许多新的知识例如继承和对象并且支持面向对象编程。本人也是初学C++,如果有什么讲错的地方,还望大家嘴下留情。并欢迎大佬们的指点。

二、正文

如同初学C语言一样,我们的第一个程序你还记得吗?没错就是我们的老盆友“Hello World”

同样在学习C++的时候,我们同样写出我们第一个C++程序。 

1C语言第一个程序: 

#include<stdio.h>
int main()
{
	printf("Hello World\n");
	return 0;
}

1.1C++的第一个程序:

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

  •  在C++输出函数printf被cout取代。换行符\n被endl取代。当然这并不意味这printf和\n在C++程序中不能运行,众所周知C++兼容C语言,因此C语言中的关键词和函数在C++中都能正常使用。

2.命名空间

2.1 namespace的价值

  • 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称都存在于全局变量中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字感染,namespace关键词的出现就是针对这个问题的。
  • C语言类似下面程序这样的命名冲突是普遍存在的问题,C++引入namespace就是为了更好的解决这样的问题:

  • 这是为什么呢?原来rand原来是被定义在头文件是stdlib.h中的的一个函数。如今我们重新定义一个rand的变量就会发生重定义的问题。那我们有什么办法可以解决这样的情况呢?这里就要使用到我们的命名空间namespace了。

  • 现在你看我们就可以正常使用rand变量了。

2.2namespace的定义

  • 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字(这个名字可以根据自己的需求任意取),然后接一对{ }即可,{ }中即为命名空间的成员。命名空间可以定义变量/函数/类型等。
  • namespace本质是定义出一个域, 这个域跟全局域各自对立,不同的域可以定义同名变量,所以上面的rand不再冲突了。
  • C++中有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找一个变量/函数/类型出处(声明或定义)的逻辑,所以有了域隔离,名字冲突的问题就解决了。局部域和全局域除了会影响编译查找逻辑,还会影响变量的生命周期,命名空间域和类域不影响变量声明周期。
  • namespace只能定义在全局,当然它也可以嵌套定义。
  • 项目工程中多文件中定义的同名namespace会认为是一个namespace,不会冲突。
  • C++标准库都放在一个叫std(standard)的命名空间中。

2.3namespace的正常使用

  • 我们定义了一个命名空间school,又在school的命名空间中又定义一个命名空间student1。
  • 这也是印证了命名空间可以嵌套定义的话。
  • 当然了那么namespace还可以定义函数,例如这样:

  • 仔细看你会发现namespace有点像结构体,不过值得注意的是结构体的{ }后面要有“;”这个符号,而命名空间不需要。其次,结构体中的成员的直接引用需要用到“ .”这个符号,而命名空间需要用到“::”这个符号。
  • 关于访问namespace中的空间,有三种情况:
#include<stdio.h>
#include<stdlib.h>
namespace school
{
	namespace student1
	{
		char name[20]="胡图图";
		char addres[20]="翻斗花园";
		int age = 8;
	}
	int ADD(int x, int y)
	{
		return x + y;
	}
}
//一、指定命名空间访问
int main()
{
	printf("%d\n", school::ADD(1,2));
	return 0;
}
//二、using将命名空间中的某个成员展开
using school::ADD;
int main()
{
	printf("%d\n", ADD(1,2));//展开后可以直接使用命名空间school中的函数成员ADD
	return 0;
}
//三、展开命名空间中的全部成员
using namespace school;
int main()
{
	printf("%d\n", school::student1::age);//可以直接使用命名空间中的所有成员
	printf("%d\n", ADD(1, 2));
	return 0;
}

3.C++输出和输入

  • ciostream>是Input Output Stream的缩写,是标准的输入、输出流库,定义了标准的输入、输出对象。
  • std::cin 是istream 类的对象,它主要面向窄字符(narrow characters (of type char)) 的标准输入流。
  • std::cout是ostream类的对象,它主要面向窄字符的标准输出流。
  • std:endl是一个函数,流插入输出时,相当于插入一个换行字符加刷新缓冲区。
  • <是流插入运算符,2>是流提取运算符。(C语言还用这两个运算符做位运算左移/右移)
  • 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动指定格式,C++的输入
  • 输出可以自动识别变量类型(本质是通过函数重载实现的,这个以后会讲到),其实最重要的是C++的流能更好的支持自定义类型对象的输入输出。
  • 10流涉及类和对象,运算符重载、继承等很多面向对象的知识,这些知识我们还没有讲解,所以这里我们只能简单认识一下C++10流的用法,后面我们会有专门的一个章节来细节10流库。
  • cout/cin/endI等都属于C++标准库,C++标准库都放在一个叫std(standard)的命名空间中,所以要通过命名空间的使用方式去用他们。
  • 一般日常练习中我们可以using namespacestd,实际项目开发中不建议using namespace std。这里我们没有包含<stdio.h>,也可以使用printf和scanf,在包含<iostream=间接包含了。vS系列编译器是这样的,其他编译器可能会报错。

值得一提的是C++的输入、输入 都是自动识别变量的类型的,不用我们手动为他们匹配类型:

 三、结言

 咱们C++第一章就结束了,小伙伴咱们下次再见。

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

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

相关文章

【数据采集工具】Sqoop从入门到面试学习总结

国科大学习生活&#xff08;期末复习资料、课程大作业解析、大厂实习经验心得等&#xff09;: 文章专栏&#xff08;点击跳转&#xff09; 大数据开发学习文档&#xff08;分布式文件系统的实现&#xff0c;大数据生态圈学习文档等&#xff09;: 文章专栏&#xff08;点击跳转&…

unity Gpu优化

不一样的视角&#xff0c;深度解读unity性能优化。unity性能优化&#xff0c;unity内存优化&#xff0c;cpu优化&#xff0c;gpu优化&#xff0c;资源优化&#xff0c;资源包、资源去重优化&#xff0c;ugui优化。 gpu优化静态批处理静态批处理原理规则静态合批的原理静态合批的…

2023年华为杯数学建模竞赛B题论文和代码

DFT类矩阵的整数分解逼近 离散傅里叶变换&#xff08;Discrete Fourier Transform&#xff0c;DFT&#xff09;傅里叶分析方法是信号分析的最基本方法&#xff0c;傅里叶变换是傅里叶分析的核心&#xff0c;通过它把信号从时间域变换到频率域&#xff0c;进而研究信号的频谱结构…

SSM四川工商学院学生宿舍管理系统---附源码54633

摘 要 从20年代开始&#xff0c;计算机疯狂的出现在人们的生活以及工作当中&#xff0c;成为人们生活、工作的好帮手&#xff0c;计算机深入到每家每户当中&#xff0c;网络办公&#xff0c;网络教学更是替换了传统手工记录管理的方式&#xff0c;使用计算机办公可以不必局限于…

MySQL-12.DQL-聚合函数

一.DQL-分组查询 二.聚合函数 -- DQL:分组查询 -- 聚合函数 -- 1.统计该企业员工数量 count select count(id) from tb_emp; select count(job) from tb_emp;select count(A) from tb_emp; select count(*) from tb_emp;-- 2.统计该企业最早入职的员工 min select min(entr…

SQL第18课挑战题

1. 创建一个名为customerswithorders的视图&#xff0c;其中包含customers表中的所有列&#xff0c;但仅仅是那些已下订单的列。提示&#xff1a;可以在orders表上使用join来仅仅过滤所需的顾客&#xff0c;然后使用select来确保用有正确的数据。 创建视图&#xff1a;

电影台词摘抄(十一)——Banana!

Scarlet&#xff1a;Do you know who this is? Kevin&#xff1a;Uh. La cucaracha? n.伊丽莎白(女子名) Scarlet&#xff1a;This is Queen Elizabeth, ruler of England.Oh, I love England, Their music, the …

Linux - 环境变量 | 命令行参数 | 进程基础

文章目录 一、了解冯诺依曼体系结构1、概念2、对数据层面3、实例二、操作系统1、概念2、设计OS的目的3、定位4、操作系统怎么管理&#xff1f; 三、进程1、概念2、怎么管理进程3、描述进程-PCB4、描述进程怎么运行&#xff08;粗略&#xff09;5、进程属性6、创建子进程7、创建…

bash之基本运算符

一.算术运算符 vim test.sh #!/bin/basha10 b20valexpr $a $b echo "a b : $val"valexpr $a - $b echo "a - b : $val"valexpr $a \* $b echo "a * b : $val"valexpr $b / $a echo "b / a : $val"valexpr $b % $a echo "b % a …

c++STL——map与set的使用及介绍

目录 前言&#xff1a; 1. 关联式容器 2. 键值对 3. 树形结构的关联式容器 3.1 set 3.1.1 set的介绍 3.1.2 set的使用 1. set的模板参数列表 2. set的构造 3. set的迭代器 4. set的容量 5. set修改操作 6. set的使用举例 3.2 map 3.2.1 map的介绍 3.2.2 map的…

Vue3浮动按钮(FloatButton)

效果如下图&#xff1a;在线预览 APIs FloatButton 参数说明类型默认值left按钮定位的左边距&#xff0c;单位 pxnumber | stringundefinedright按钮定位的右边距&#xff0c;单位 pxnumber | string24top按钮定位的上边距&#xff0c;单位 pxnumber | stringundefinedbottom…

spring 如何将mutipartFile转存到本地磁盘

两者的区别和联系 MutipartFile是spring的一部分&#xff0c;File则是java的标准类MutipartFile用于接收web传递的文件&#xff0c;File操作本地系统的文件 MutipartFile 转换File的三种方式 使用MutipartFile 自带的transferTo方法使用java自带的FileOutPutStream流使用java自…

使用Langchain-chatchat搭建RAG应用,并使用postman进行测试验证

Github地址&#xff1a;https://github.com/chatchat-space/Langchain-Chatchat 一、概述 LangChain-Chatchat (原 Langchain-ChatGLM)&#xff0c;一种利用 langchain 思想实现的基于本地知识库的问答应用&#xff0c;目标期望建立一套对中文场景与开源模型支持友好、可离线运…

React(一) 认识React、熟悉类组件、JSX书写规范、嵌入变量表达式、绑定属性

文章目录 一、初始React1. React的基本认识2. Hello案例2.1 三个依赖2.2 渲染页面2.3 hello案例完整代码 二、类组件1. 封装类组件2. 组件里的数据3. 组件里的函数 (重点)4. 案例练习(1) 展示电影列表 三、JSX语法1. 认识JSX2. JSX书写规范及注释3. JSX嵌入变量作为子元素4. JS…

android app执行shell命令视频课程补充android 10/11适配-千里马android

(https://blog.csdn.net/learnframework/article/details/120103471) https://blog.csdn.net/learnframework/article/details/120103471 hi&#xff0c;有学员在学习跨进程通信专题课程时候&#xff0c;在实战app执行一个shell命令的项目时候&#xff0c;对课程本身的android …

推荐算法的学习

文章目录 前言1、模型1.1 从本领域模型的发展历史中学习1.1.1 在历史中总结发展规律和趋势1.1.2 发现模型之间的共性&#xff0c;方便记忆 1.2 从其他领域的发展中学习1.2.1 注意力机制1.2.2 残差网络 1.3 实践该怎么办&#xff1f; 2、 特征2.1 数据源的选择与建立2.2 特征构造…

Element中el-table组件设置max-height右侧出现空白列的解决方法

之前就出现过这个情况&#xff0c;没理过&#xff0c;因为不影响啥除了不美观...但今天看着实在是难受&#xff0c;怎么都不顺眼(可能是我自己烦躁--) 试了很多网上的方法&#xff0c;都不得行&#xff0c;后面发现了这篇文章&#xff0c;解决了! 感谢&#xff01; Element中t…

PageHelper循环依赖问题

1. 问题 2. 原因 项目中SpringBoot的版本为2.7.18。 SpringBoot2.6.x后不推荐使用循环依赖&#xff0c;也就是说从2.6.x版本开始&#xff0c;如果项目里还存在循环依赖&#xff0c;SpringBoot将拒绝启动&#xff01; 3. 解决 去pageHelper github看&#xff0c;才看到新版本…

Pandas缺失值处理

目录 NaN 加载包含缺失的数据 查看缺失值 通过info函数查看缺失值 通过isnull函数查看缺失值 通过notnull函数查看缺失值 通过isnull().sum()统计空值 缺失值处理 准备数据 dropna删除缺失值 fillna平均值填充缺失值 fillna前后值填充缺失值 interpolate线性插值 …

C++中的vector二维数组(全面详解)

目录 二维数组概念&#xff1a; 二维数组格式&#xff1a; 二维数组的初始化&#xff1a; 在创建的时候就进行初始化&#xff1a; resize初始化&#xff1a; 构造v的时候只给行数&#xff0c;列数用resize开辟 构造v的时候不给行数不给列数&#xff0c;都用resize来开辟…