C++初阶-C++入门基础

目录

​编辑

1.C++的简介

1.1C++的产生和发展

1.2C++的参考文档

1.3C++优势和难度

1.4C++学习的建议

2.C++的第一个程序

[2.1打印Hello world](#2.1打印Hello world)

2.2头文件

2.3namespace命名空间

2.4::作用域限定符

2.5namespace的延伸

2.6C++的输入输出

3.总结


1.C++的简介

1.1C++的产生和发展

C++是在1997年发布的第一个成熟版本,C++是由Bjame Stroustrup(中文翻译为本贾尼·斯特劳斯特卢普)觉得C语言有太多限制而想出来改变的一个改进的语言,现在公司主要用的是C++98和C++11版本的,C++三年更新一次,下一次更新是在2026年。

1.2C++的参考文档

C++有些参考文档,链接有:https://legacy.cplusplus.com/referencehttps://zh.cppreference.com/w/cpphttps://en.cppreference.com/w/这三个文件都有自己的优势和不足,需要结合着使用。

1.3C++优势和难度

C++在TIOBE的排行榜上排名第二,仅次于Python,但是Python是解释型语言,不会编译,所以Python有一系列的不足,虽然它可以很快写出题目,但它性能不会用它不利于之后找工作,Python只能作为辅助性的语言而不能去作为竞争手段。此外,C++转其他语言不是很难。而且C++以后找工作有很多方向,如:测试开发、嵌入式、游戏引擎、服务端开发基本上用C++,哪怕是现在最火的人工智能,它的底层大多都用C++写的,所以C++前景好,但是C++学习难度非常高,相对难学难精的语言,但是这是相对于其他一些语言难度较高。自学难度极大,主流的另外一个语言如:Java虽然开始难度比较低,但是后面难度还是比较高的,所以要学习C++也需要花很多的时间,但是C++确实在一些刷题软件如:牛客、力扣上的刷题次数较多的,所以之后找工作面试的时候用C++也写了很多题目了,也可以作为一个竞争手段吧!但是如果坚持去学习C++的话也会让结果变得很好的。加油吧!

1.4C++学习的建议

C++建议不用自学,C++自学是很痛苦的,如果没有很强力的辅导基本上也没有什么作用。此外全部看博客也是没有什么太大用处的,因为博客总有一些不会提及到的知识,所以自学是非常不建议的。建议去报名一些课程,如果想要报名方式也可以找我私信,我不会去打广告,但是也不会让你们去一些非常吃亏的课程去上,如线下课,因为线下课不能随时随地去听,而且老师管的也太少了,所以我的建议就是报名课程。我写的博客可以自己去总结然后自己去实现这个代码,最好之后再写一篇自己的理解的博客,光看是没有什么用处的,主要是自己理解才能有用。

2.C++的第一个程序

2.1打印Hello world

C++编译器兼容C语言的,所以我们不必要去再写一个文件。我们要明白一个点:C++是C语言的进阶,所以C++的学习需要打好C语言的基础。之后的C++我都会在C语言的方向下改变思路,因为C语言有太多不足了,所以C++就相对于C语言有很大的优势了。我们学习C语言的第一个程序就是打印Hello world然后我们再进行语法解析,所以C++我们也是这样的,对比一下C++和C语言吧!

cs 复制代码
#include<stdio.h>
int main()
{
	printf("Hello world\n");
	return 0;
}
cpp 复制代码
#include<iostream>
using namespace std;
int main()
{
	cout << "Hello world" << endl;
	return 0;
}

两个代码的执行结果都为这个,接下来我将逐步解析这个C++代码。

2.2头文件

为什么我们不需要包含<stdio.h>了?

C++确实也可以包含这个头文件,但是<iostream>这个文件就包含了<stdio.h>这个文件的内容。

C++的头文件为什么不用加.h结尾了?

这个问题不重要,我们可以看一下我之前提供的链接里面的函数,里面都没有.h文件,所以我们不需要管这个问题,问题太多了也不是一件好事,语言规定了这个头文件是什么你就用就可以了。

2.3namespace命名空间

在C语言中有个很关键的问题,我们如果命名重复就会导致报错,如:

cs 复制代码
#include<stdlib.h>
int rand = 0;
int main()
{
	int a = rand();
	return 0;
}

我们会发现在C语言文件中int a=rand();那个语句会报错,因为我们在stdlib.h文件中有个函数是rand()函数来生成随机数,但是我们又定义了一个rand变量,这会让编译系统不知道到底是哪个rand,在C语言的解决办法就是把rand放到其他的如结构体或成为临时变量取改变它所在的域,这样才不会报错,但是在C++中就需要一个关键字为namespace,这个关键字创建的是另一个域,因为编译器语法规定要找到它的声明或定义,而且是先在局部域开始寻找这个变量或函数(这个函数),最后再到全局域去寻找这个变量或函数,而不会去其他域寻找,只有我们要求它查找才会去寻找这个域。而namespace可以用来创造一个域,里面可以包含变量,函数,结构体等等,其结构和结构体差不多,主要是结构体不能包含函数,且namespace最后的}不需要加;,所以示例如下:

cpp 复制代码
namespace we
{
	//定义变量
	int rand = 10;
	//定义函数
	int Add(int x, int y)
	{
		return x + y;
	}
	//定义结构体
	struct Node
	{
		struct Node* next;
		int val;
	};
}

如何用namespace创造出来的域里面的变量/函数/结构体呢?

2.4::作用域限定符

::域作用限定符指定访问一个域中的东西,如

cpp 复制代码
int main()
{
	printf("%d", we::rand);
	return 0;
}

2.5namespace的延伸

(1)namespace只能定义在全局,当然也可以嵌套定义。

前面那个原因我就不说了,这是个规定,没有为什么。第二个我加个示例:

cpp 复制代码
#include<iostream>
using namespace std;
namespace we
{
	//定义变量
	int rand = 10;
	//定义函数
	int Add(int x, int y)
	{
		return x + y;
	}
	//定义结构体
	struct Node
	{
		struct Node* next;
		int val;
	};
	namespace you
	{
		int rand = 10;
		int jiang(int x, int y)
		{
			return x - y;
		}
	}
}
int main()
{
	cout << we::rand << endl;
	cout << we::you::rand << endl;
	return 0;
}

我们在we这个里面又定义了一个you,其中在you里面我们又可以定义变量,函数等等,而且由于作用域不同,我们还可以再在里面定义一个rand,其中如果想要继续到you里面去查找的也可以再加上一个::去访问里面的元素。

(2)如果我们名称(we)在多文件中都有namespace定义了,会被认为是同一个namespace,不会冲突,因为二者都会合并,但是里面的元素不能同名哦,这和C语言差不多的,因为域也相同。

(3)C++标准库都放在一个叫std的命名空间中,所以我们之前打印用的cout,endl都是在std这个命名空间中,我们不需要包含其他的头文件,因为这个里面本来就有,但是我们如果不用using namespace std的话也要加std::,这样更麻烦,但是我们如果用来写很大的文件中就不要加这句话了,这是为什么呢?

using namespace std中的using把std命名空间全部展开,这样我们就不用一直std::了,当然我们也可以用using把std里面的函数cout展开如:using std cout这样之后打印的时候就不用在用cout这个函数的时候再std::了,而其他的就仍然需要std::,这个方法适用于一些使用较多的函数或变量或结构体,但是如果展开全部成员这就比较危险了,因为我们本来就想把二者放在不同的作用域,而全部展开就没有作用了,但是只要你不怕命名冲突就可以展开。

所以如果我们不去加using namespace std;的话我们可以这样打印Hello world:

std::cout << "Hello world" << std::endl;

2.6C++的输入输出

在C语言中我们了解到<<和>>分别是左移右移操作符,但是在C++中<<是输入,>>是输出。其中cout << i是自动识别类型的,所以我们可以让i 为字符串等等,而printf需要自己去输入类型很麻烦,而且之后我们可以自定义类型,用C语言就不能自定义类型,识别不出来。其中输出的函数是std::cin比如我们想在键盘中输入3赋值给i,把4赋值给d有:

cpp 复制代码
int main()
{
	int i, d;
	cin >> i >> d;
	cout << i << endl << d << endl;
}

我们发现如果我们两个之间加空格输入的方式是可以的,那换行呢?

这样输入也是可以的,所以C++的灵活性也是可以的。

endl这个是什么?

endl是换行函数,我们如果把endl改为"\n"或者'\n'也是可以换行的,但是endl好写一些,如果我们两个<<之间不写任何东西是不可以的,但是我们可以输入一个空格的,如果觉得这样不方便也可以用printf的方式输出,每种方式都有各自的优势吧!

3.总结

C++开始涉及一个点就需要引申到另外一个点,所以思维连贯性较强,这一节不是很难,但是也需要去理解基本用法,下一节就有点难度上升了哦,下讲再见!喜欢的可以一键三连哦!

相关推荐
极客先躯22 分钟前
高级java每日一道面试题-2025年3月31日-微服务篇[Nacos篇]-Nacos集群模式下的部署方案有哪些?
java·开发语言·微服务
go_bai24 分钟前
list的常见接口使用
开发语言·c++·经验分享·笔记·list
鑫—萍40 分钟前
数据结构与算法——链表OJ题详解(2)
c语言·开发语言·数据结构·学习·算法·链表
大锦终1 小时前
【C++】继承
c语言·开发语言·数据结构·c++
stevenzqzq1 小时前
kotlin扩展函数
android·开发语言·kotlin
Hello姜先森1 小时前
Kotlin日常使用函数记录
android·开发语言·kotlin
FL16238631291 小时前
[python]通过whl文件安装pyheif安装教程和简单使用案例
开发语言·python
希望_睿智1 小时前
C++网络编程之SSL/TLS加密通信
c++·网络协议·安全
努力学习的小廉1 小时前
我爱学算法之——滑动窗口攻克子数组和子串难题(下)
c++·算法
发誓要做读书人1 小时前
生物信息Rust-01
开发语言·笔记·rust