C++入门:从C语言到C++的过渡(1)

目录

1.什么是C++

2.C++的标准库

3.命名空间

3.1为什么要存在命名空间

3.2命名空间的定义

3.3命名空间的使用

3.3.1域作用限定符

 3.3.2using关键字引入某个成员

3.3.3using关键字引入命名空间名称

3.4命名空间的嵌套

3.5命名空间的合并

4.C++中的输入与输出


1.什么是C++

C++(c plus plus)是一种计算机高级程序设计语言,由C语言扩展升级而产生 ,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。它完善了C语言的许多缺陷,并且引入了面向对象的程序设计思想,包括面向对象的四个特性:封装继承多态抽象。

2.C++的标准库

标准的 C++ 由三个重要部分组成:

  • 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。
  • C++ 标准库,提供了大量的函数,用于操作文件、字符串等。
  • 标准模板库(STL),提供了大量的函数,用于操作数据结构等。

这三个部分包含了C++这门语言的核心,我们后面的内容就主要围绕上面三个部分展开。

3.命名空间

3.1为什么要存在命名空间

在使用C和C++时,由于变量、函数、和后面要学到的类都是大量存在的,这些变量、函数、和类的变量名称都在全局作用域中,很容易引起很多冲突。我们使用命名空间的目的就是对标识符的名称进行本地化以避免命名冲突或名字污染,namaspace关键字的出现就是针对这一问题。

如下图所示,这段代码出现了重定义的问题,我们定义的全局变量和stdlib中的函数发生了命名冲突。

因此,在CPP中,我们使用namespace来解决这一问题。一个命名空间就定义了一个新的作用域,命名空间的所有内容都只能在命名空间中使用。

3.2命名空间的定义

定义命名空间,需要用的namaspace关键字,后面跟命名空间的名字,然后接一对花括号{},花括号中即为命名空间的成员。

如如下代码:

//duanku即命名空间的名字,一般开发中是用项目名字做命名空间名
namespace duanku
{
	int rand = 10;
	int Add(int left, int right)
	{
		return left + right;
	}
}

那么,命名空间中可以定义什么呢?

答案是:命名空间中可以定义变量/函数/类型

namespace duanku
{
	int rand = 10;//变量
    int N=1;
	int Add(int left, int right)//函数
	{
		return left + right;
	}
	struct Node//结构体-->类型
	{
		struct Node* next;
		int val
	}duan;
}

学习了命名空间的定义了之后,就可以开始学习如何使用命名空间了。

3.3命名空间的使用

3.3.1域作用限定符

我们首先介绍域作用限定符

域作用限定符是两个英文引号::

其作用是明确某个名称所属的作用域

使用规范为引号左边为作用域名称,引号右边为作用域内部成员名称。如下所示

   // 命名空间::命名空间内部成员
printf("%d", duanku::rand);//使用duanku命名空间内部rand成员

 3.3.2using关键字引入某个成员

using关键字可以引入,我们可以将duanku命名空间内部的某个成员引入。

//通过using关键字引入了duanku空间内部的N
using duanku::N;
int main()
{
    //N被引入之后,我们就可以直接使用,不需要再加域作用限定符
	printf("%d", N);
}

3.3.3using关键字引入命名空间名称

using既然可以引入命名空间中的某个成员,自然也可以引入一整个命名空间了。

引入命名空间的格式为:

using namespace 命名空间名称;

现在我们先介绍一下std命名空间

std是标准命名空间,它包含了C++标准库中的所有内容,比如输入输出流、字符串、容器等。很多库的类和函数都被定义在std命名空间下。

这里我们引入一下std命名空间。

using namespace std;
int main()
{   //这里的cout和<<会在后面讲解,在这里大家知道可以这么用即可。
	std::cout << "hello kuzi" << std::endl;
	cout << "hello kuzi" << endl;
	cout << "hello kuzi" << endl;
	cout << "hello kuzi" << endl;
}

3.4命名空间的嵌套

命名空间是可以嵌套命名空间的,如下所示:

namespace duanku
{
	int N = 1;
	int rand = 10;//变量
	int Add(int left, int right)//函数
	{
		return left + right;
	}
	struct Node//结构体-->类型
	{
		struct Node* next;
		int val;
	}duan;
    //在kuzi的命名空间内定义了一个trousers的命名空间
	namespace trousers
	{
		int a=1;
	}
}

嵌套命名空间的使用,我们就要通过连续使用域作用限定符访问了。

//trousers本质上还是命名空间,不可以这样引入
//using duanku::trousers;
//正确的引入方式
using namespace duanku::trousers;
int main()
{
    //通过连续的域作用访问符也可以访问到a!
	cout << duanku::trousers::a << endl;
	cout << a << endl;
}

3.5命名空间的合并

同名的命名空间是可以合并的,也就是说,我们可以写两个叫duanku的命名空间。

namespace duanku
{
	int c = 1;
}
namespace duanku
{
	int N = 1;
	int rand = 10;//变量
	int Add(int left, int right)//函数
	{
		return left + right;
	}
	struct Node//结构体-->类型
	{
		struct Node* next;
		int val;
	}duan;
	namespace trousers
	{
		int a=1;
	}
}

 现在我们就写了两个叫duanku的命名空间,这两个命名空间会在预处理阶段合并。也是因为这个原因,如果我们在两个同名的命名空间内给同名变量初始化不同的值,会报错

4.C++中的输入与输出

在C++中,我们有了新的输入和输出的方法。我们分别使用cin和流提取操作符输入对象,使用cout和流插入操作符输出对象

//先输入a  b  c
//再打印a b  c
int main()
{
	int a, b;
	char c;
	cin >> a >> b;
	cin >> c;
	cout << a << ' ' << b << ' ' << c << endl;
	return 0;
}

 在使用cin和cout时,有以下注意事项

  1. 1使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件,以及按命名空间使用方法使用std。
  2.  cout和cin是全局的流对象endl是特殊的C++符号,表示换行输出,他们都包含在包含<iostream >头文件中。
  3.  <<是流插入运算符,>>是流提取运算符。
  4.  使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。C++的输入输出可以自动识别变量类型
  5.  实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识,这些知识我们我们后续再进行讲解,这里只简单学习他们的使用。

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

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

相关文章

BatBot智慧能源管理平台,更加有效地管理能源

随着能源消耗的不断增加&#xff0c;能源管理已成为全球面临的重要问题。BatBot智慧能源管理作为一种的能源管理技术&#xff0c;促进企业在用能效率及管理有着巨大的提升。 BatBot智慧能源管理是一种基于人工智能技术的能源管理系统&#xff0c;通过智能分析和优化能源使用&…

7. 3 层神经网络的实现和输出层的激活函数

目录 1. 3 层神经网络的实现 1.1 输入层数据到 1 层神经元 1.2 1 层神经元到 2 层神经元 1.3 2 层神经元到输出层神经元 2. 输出层的激活函数 2.1 恒等函数 2.2 softmax 函数 2.2.1 softmax 函数表达式 2.2.2 softmax 代码实现 2.2.3 softmax 的改进 2.2.3 softmax 函…

Mixiy(米思齐)安装

Mixiy(米思齐)安装 官网地址&#xff1a;爱上米思齐 打开官网&#xff0c;选择下图的软件进行下载 复制提取码&#xff0c;点击链接跳转到网盘进行下载&#xff0c;选择(RC4完整版) 下载完成后&#xff0c;解压到合适的位置&#xff0c;进入文件夹&#xff0c;双击Mixly.exe即…

Spark SQL【Java API】

前言 之前对 Spark SQL 的影响一直停留在 DSL 语法上面&#xff0c;感觉可以用 SQL 表达的&#xff0c;没有必要用 Java/Scala 去写&#xff0c;但是面试一段时间后&#xff0c;发现不少公司还是在用 SparkSQL 的&#xff0c;京东也在使用 Spark On Hive 而不是我以为的 Hive O…

C++数据结构——哈希表

前言&#xff1a;本篇文章将继续进行C数据结构的讲解——哈希表。 目录 一.哈希表概念 二.哈希函数 1.除留取余法 三.哈希冲突 1.闭散列 线性探测 &#xff08;1&#xff09;插入 &#xff08;2&#xff09;删除 2. 开散列 开散列概念 四.闭散列哈希表 1.基本框架 …

一.ffmpeg 将内存中的H264跟PCM 数据流合成多媒体文件

在有一些嵌入式平台中&#xff0c;H264数据流一般来自芯片内部的硬编码器&#xff0c; AAC音频数据则是通过采集PCM进行软编码&#xff0c;但是如何对它实时进行封装多媒体文件 &#xff0c;参考ffmpeg example&#xff0c;花了一些时间终于实现了该功能。 流程图如下&#xf…

es问题汇总--待完善

1. 查询某个索引库中数据总量 方式一&#xff1a; CountRequest 鄙人喜欢这种方式 public long getTotalNum(String indexName) throws IOException {CountRequest countRequest new CountRequest(indexName);// 如果需要&#xff0c;你可以在这里添加查询条件// countReques…

内脏油脂是什么?如何减掉?

真想减的人&#xff0c;减胖是很容易的&#xff0c;但想要形体美又健康&#xff0c;还是得从减内脏油脂开始&#xff0c;那么&#xff0c;问题来了&#xff0c;什么是内脏油脂&#xff1f; 油脂它分部于身体的各个角落&#xff0c;四肢、腹部、腰、臀部、脸、脖子...等&#xf…

暴雨信息液冷计算解决方案亮相CCIG 2024

5月24日&#xff0c;2024中国图象图形大会&#xff08;CCIG&#xff09;在陕西西安正式开幕。作为涵盖图像图形各专业领域的综合性的全国性学术会议&#xff0c;CCIG面向开放创新、交叉融合的发展趋势&#xff0c;为图像图形相关领域的专家学者和产业界的同仁&#xff0c;搭建了…

深入用户内心:设计师如何通过可用性测试洞察用户需求

可用性测试是指让用户体验产品的原型或成品。设计师通过观察和分析用户的使用行为和感受&#xff0c;进一步合理地改进产品的设计方法。你可能会想知道我们可以用什么方法来测试可用性&#xff1f;随着互联网行业的快速迭代更新&#xff0c;可用性测试衍生出了许多类型和方法。…

【C++初阶】—— 类和对象 (下)

&#x1f4dd;个人主页&#x1f339;&#xff1a;EterNity_TiMe_ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 类和对象 1. 运算符重载运算符重载赋值运算符重载前置和后置重载 2. 成员函数的补充3. 初始化列…

报错:找不到或无法加载主类 com.example.SpringbootApplication(idea)

OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 错误: 找不到或无法加载主类 com.example.SpringbootApplication 原因: java.lang.NoClassDefFoundError: com/example/SpringBootAppli…

C++---运算符重载

运算符重载介绍 在类中重新定义运算符&#xff0c;赋予运算符新的功能以适应类的运算&#xff0c;就称为运算符重载。 运算符重载是一种形式的C多态,它使得对象操作更直观,本质上也是属于函数重载。 实际上&#xff0c;我们已经在不知不觉之中使用了运算符重载。例如&#xff…

【JAVA |再谈接口、Object、内部类】Object类中子类重写,Cloneable 接口、比较器、内部类

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; &#x1f388;丠丠64-CSDN博客&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起…

python写页面自动截图

from selenium import webdriver def take_screenshot(url, file_path):driver webdriver.Chrome()driver.get(url)driver.save_screenshot(file_path)driver.quit() if __name__ __main__:take_screenshot(http://baidu.com, D:\桌面\wang.png)要安装selenium还要安装google…

React类组件生命周期详解

在React的类组件中&#xff0c;从组件创建到组件被挂载到页面中&#xff0c;这个过程react存在一系列的生命周期函数&#xff0c;最主要的生命周期函数是componentDidMount、componentDidUpdate、componentWillUnmount 生命周期图例如下 1. componentDidMount组件挂载 如果你…

网络安全资源和参考指南

由美国国防部&#xff08;DoD&#xff09;发布的《网络安全资源和参考指南》&#xff0c;旨在为美国政府、商业部门以及美国盟友和伙伴之间的安全合作提供有用的、现成的参考资料。文档涵盖了网络安全规范、最佳实践、政策和标准&#xff0c;这些都是由美国联邦政府、国防部以及…

KubeSphere 社区双周报|2024.05.09-05.23

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2024.05.09-05.23…

CCF20230301——田地丈量

CCF20230301——田地丈量 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,a,b;cin>>n>>a>>b;int x1,x2,y1,y2,x,y,sum0;for(int i0;i<n;i){cin>>x1>>y1>>x2>>y2;xmin(x2,a)-max(x1,…

【科普知识】伺服电机中的内置制动器

在工业自动化和机器人技术快速发展的今天&#xff0c;伺服电机作为核心驱动元件&#xff0c;其性能与功能直接影响整个系统的运行效率与稳定性。 近年来&#xff0c;一体化伺服电机技术不断融合创新&#xff0c;并逐步加入了许多新的硬件和软件的功能&#xff0c;为工业自动化领…