【C++学习】C++入门 | C++该怎么学 | 命名空间 | 输入输出

这篇具有很好参考价值的文章主要介绍了【C++学习】C++入门 | C++该怎么学 | 命名空间 | 输入输出。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

欢迎来到C++的世界,这是一门令人兴奋的语言。

好吧,每当我开始阅读C++的书籍的时候,开头的第一句话必定是这个,

也不知道其他语言的编程书籍是不是这样,那就让这句话也作为我C++分享之路上的第一句话吧。

目录

写在前面

1. C++怎么学?

1. C语言

2. Object-Oriented C++

3. Template C++

4. STL

2. 第一个C++程序

3. 命名空间

namespace的用法

4. 输入输出

写在最后:


1. C++怎么学?

这篇文章我也打算将一点C++入门的语法,不过在那之前,我想聊一聊,C++该怎么学?

最近我阅读了Scott Meyers大佬写的Effective C++,觉得他写的非常不错,

我就以他书中的第一条条款作为C++的介绍,也就是回答C++怎么学这个问题。

条款1:视C++为一个语言联邦

学C++你学要从这四个方面入手:

1. C语言

是的,C++是基于C语言的一门语言,如果你没有一个扎实的C语言基础,那你学C++会很难受,

这边建议赶紧去学好C语言,再来学C++,不要贪快。

2. Object-Oriented C++

说人话就是面向对象,C++包含了面向对象的特性,即所谓封装,继承,多态,

在这个C++学习的专栏中,我也打算从类和对象入手,开始讲解C++。

3. Template C++

也就是模板,这里是C++的泛型编程的部分,实际上模板的威力强大,它带来了崭新的编程规范,

即:模板元编程,但是我这里就不这么深入了,学好模板的特性就基本够用了

4. STL

STL是一个标准模板库,这是C++非常重要的组成部分,每个C++程序员都需要和STL一起工作,

学好STL自然非常必要,之后我会探索STL一些经典容器/适配器的底层,让我们更好的理解STL。

当然,

学好了上述的几个知识,你就可以说你是一个会C++的程序员了,虽然离精通还远远算不上,

C++的知识自然不止这几个部分,还有C++11的新语法,未来C++也会继续更新(虽然很慢)

它还有许多重要的,区别于C语言的新特性, 而这些新特性,就是我接下来准备介绍的,

C++入门的内容,衔接C语言,让我们一起走进C++的世界!

(PS:瞻仰一下C++祖师爷的帅照,感谢一下祖师爷赏饭吃,不然都没有C++程序员这个工作)

【C++学习】C++入门 | C++该怎么学 | 命名空间 | 输入输出

2. 第一个C++程序

#include <iostream>
using namespace std;

int main()
{
	cout << "hello world!" << endl;
	return 0;
}

输出:

hello world!

怎么说呢,其实C++跟C语言确实是不分家的,

学过C语言的我们都知道,最上面的是头文件,下面是主函数,还有return 0,

那个cout和cin一看就知道是输入输出相关的东西,

那么第二行是个啥呢?

这就要说到C++的第一个知识点了:

3. 命名空间

我们来看这段代码:

#include <stdio.h>

int printf = 0;

int main()
{
	return 0;
}

很显然,这段代码是编译不通过的,

因为printf是stdio.h里面的一个函数,这就是C语言中命名冲突的问题,

1. 我们的跟库里的冲突

2. 我们与其他人协作项目的时候冲突

你没办法知道库里究竟用了啥名字,你也不知道其他人用了啥名字,

C++为了解决这样的问题,就提供了这样一个关键字:namespace

namespace的用法

比如说,我们想让前面那段代码不再冲突:

【C++学习】C++入门 | C++该怎么学 | 命名空间 | 输入输出

 我们发现这样是可以运行成功的,

这个就是命名空间,在这个命名空间的{ }内,是一个域。 

实际上我们在C语言阶段就学过变量的作用域,(还记得局部优先的原则吧)

比如说这段代码:

#include <stdio.h>

int a = 10;

int main()
{
	int a = 1;
	printf("%d\n", a);
	printf("%d\n", ::a);

	return 0;
}

我们直接访问a,优先选择的是局部域内的变量,

如果我们偏要访问全局变量a呢?

可以用域作用限定符,用法如上,

输出:

1
10

再比如说,看这段代码:

#include <stdio.h>

namespace xl {
	int a = 10;
}

int main()
{
	int a = 1;
	printf("%d\n", a);
	printf("%d\n", xl::a);

	return 0;
}

我们可以这样访问命名空间内的变量,

实际上,我们的程序是不会主动到命名空间域搜索的,

只有我们自己指定,才会前往:

#include <stdio.h>

namespace xl {
	int a = 10;
}

int main()
{
	printf("%d\n", a);

	return 0;
}

这样的代码时无法编译的。

这个时候你大概就知道命名空间的左右了,

除了直接指定命名空间使用变量,也可以将命名空间展开,

(其实就是将变量暴露到外面)

来看代码:

#include <stdio.h>

namespace xl {
	int a = 10;
}

using namespace xl;

int main()
{
	printf("%d\n", a);

	return 0;
}

这样子,我们也能访问a变量,

 这个时候,我们应该也能大概知道最开始那段代码,

using namespace std; 是什么意思了,其实就是展开了C++标准库的命名空间。

当然,像我们这样直接展开只是方便我们平时练习代码,

其实在做项目的时候,我们不会直接将这样一个大的命名空间直接展开的,

不然还加这个命名空间干啥。

来看看不展开的代码:

#include <iostream>

int main()
{
	std::cout << "hello world!" << std::endl;
	return 0;
}

这样我们就解决了这个问题,来看代码:

#include <stdio.h>

namespace xl {
	int printf = 10;
}

int main()
{
	printf("hello\n");
	printf("%d\n", xl::printf);
	return 0;
}

输出:

hello
10

实际上,C语言可解决不了这样的情况。

补充:

命名空间是支持嵌套的,来看例子:

#include <stdio.h>

namespace xl {
	namespace me {
		int printf = 10;
	}
}

int main()
{
	printf("hello\n");
	printf("%d\n", xl::me::printf);
	return 0;
}

这个就是命名空间的嵌套,有些场景还是会用到的。

另外,同名的命名空间会自动合并在一起,来看例子:

#include <stdio.h>

namespace xl {
	int x = 10;
}

namespace xl {
	int y = 20;
}

int main()
{
	printf("%d\n", xl::x);
	printf("%d\n", xl::y);
	return 0;
}

扩展知识:

不知道你有没有想过,为什么C++的头文件不像C语言头文件,

C语言的头文件都有.h的后缀,例如:stdio.h,string.h等等,

而C++的头文件却没有.h,例如:iostream, vector等等,

实际上,在一些很老的编译器下,是支持所谓#include <iostream.h>这种带.h的头文件的,

比如说 VC6.0,这些头文件是没有被命名空间包裹的,但是后来,

C++把所有的这些头文件的内容都塞到std命名空间里面了,为了和以前区分,

就把塞进命名空间的这部分头文件改成没有.h结尾的,像#include <iostream>

然后带命名空间确实很好用,C++就慢慢把带.h结尾的头文件淘汰了,

所以现在C++标准库的头文件基本就都不带.h了。

补充:

如果我们不展开整个命名空间,但是有一些变量,对象或者函数我们需要经常调用,

该怎么解决?我们可以指定访问

来看例子:

#include <iostream>
using std::cout;
using std::endl;

int main()
{
	cout << "hello world" << endl;
	return 0;
}

用using std::,就能指定访问了。

这样就不用把整个命名空间展开,展开常用的就行。

4. 输入输出

cout,cin这些是对象,

cout这些对比printf,他能自动识别类型。

我们直接来看例子:

#include <iostream>
using namespace std;

int main()
{
	//   << 流插入运算符   endl 我们可以直接理解成 \n
	cout << "hello world" << endl;
	
	int n = 10; //自动识别类型
	cout << n << endl;

	double x = 1.1;
	//  >> 流提取运算符,他也能自动识别类型
	cin >> x;
	cout << x << endl;

	return 0;
}	

输入:

2.22

输出:

hello world
10
2.22
2.22

补充:

有人可能会问,cout 能像printf一样指定精度吗?

答案是可以,但是很麻烦,如果有这样的需求,建议直接用printf

因为C语言和C++ 是兼容的,哪个方便用那个就行。

补充:

有人可能会说C语言的printf,scanf比C++的cin,cout快,

确实是这样,因为C++需要对C语言进行兼容和同步,就会比较慢,

不过也有方法能关掉C++对C语言的同步,

如果在一些算法竞赛的话,C语言确实会快,

但是在平时的话,以我们现在电脑的配置,我觉得可以忽略不计。

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~文章来源地址https://www.toymoban.com/news/detail-496775.html

到了这里,关于【C++学习】C++入门 | C++该怎么学 | 命名空间 | 输入输出的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 详解从0开始的嵌入式学习路线,学什么、怎么学?

    嵌入式是个大筐,什么都可以往里面装,电子、机械、计算机、自动化、测控、通信、物联网……很多很多专业都和嵌入式沾边,硬件、驱动、操作系统、网络、应用、算法……很多同学越学越迷糊,越学越感觉什么也不会。 首先要记住一句话,嵌入式学习奥义: 先观其广

    2024年02月02日
    浏览(63)
  • C++入门:命名空间与输入输出

    目录 1.命名空间 1.1 命名空间的定义 1.2 命名空间的使用 1.3 标准命名空间 std 2.C++输入输出 我们在初学C++时,经常会在代码开头看到这样的一行代码: 这行代码到底什么意思呢?我们学完命名空间就可以理解了。 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些

    2024年02月11日
    浏览(44)
  • 【C++入门系列】——命名空间和输入输出

    📚lovewold少个r博客主页     ⚠️ 本文重点 : c++入门第一个程序和基本知识讲解 😄 每日一言 :忙,不会死,人只有越忙越活,流水不腐,户枢不蠹。 ​作者主页 前言 谈谈我个人对语言和职业的看法 C++的历史发展 C++第一个程序 命名空间 定义命名空间 使用此命名空间 命

    2024年02月05日
    浏览(45)
  • 【C++初阶】C++入门——C++介绍、命名空间、输入输出

     C语言是 结构化 和 模块化 的语言,适合处理 较小规模 的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代,计算机界提出了 OOP (object oriented programming: 面向对象 )思想,支持面向对象的程序设计语言应

    2024年02月11日
    浏览(43)
  • 后端开发怎么学?

    后端开发怎么学? 后端开发可以简单地理解为与前端开发相对应的开发方向。前端开发主要负责构建用户界面、维护用户体验等方面的工作,而后端开发则主要负责处理数据、逻辑和算法等方面的工作。后端开发旨在为前端应用程序提供支持,以帮助实现可靠、安全且高效的

    2024年02月20日
    浏览(30)
  • 大数据专业应该怎么学

    随着互联网大潮走向低谷,同时传统企业纷纷进行数字化转型,基本各个公司都在考虑如何进一步挖掘数据价值,提高企业的运营效率。在这种趋势下,大数据技术越来越重要。所以说,未来大数据是我们打工人的必备技能之一。 1、什么是大数据? 关于大数据的解释,比较

    2024年02月11日
    浏览(47)
  • golang云原生怎么学?

    一.好处有哪些? 1.高效性能:Golang是一门编译型语言,具有卓越的执行效率和并发处理能力。在云原生环境中,高效的性能对于应对大规模和高负载的分布式系统至关重要。 2.轻量级部署:Golang生成的二进制文件相对较小,并且不需要依赖额外的运行时环境,这使得应用程序

    2024年02月14日
    浏览(38)
  • C++入门(1):命名空间,IO流 输入输出,缺省参数

    一、命名空间 1.1 命名空间的作用: ​ 避免标识符命名冲突 1.2 命名空间定义: :namespace PS: 命名空间可以嵌套. 在同一工程中,编译器会把 相同名称 的命名空间 合并 成到同一个命名空间中。 1.3 命名空间的使用 一个命名空间相当于定义了一个作用域,其中的所有内

    2024年02月07日
    浏览(45)
  • 网络安全是什么?怎么学

    安全的定义: 1)一种能够识别和消除不安全因素的能力; 2)安全是一个持续的过程 网络安全 是一门涉及计算机科学、网络技术、通信技术、密码技术、信息安全技术、应用数学、数论、信息论等多种学科的综合性科学。 1.从内容上来看,大致分为4个方面: 网络实体安全

    2024年02月09日
    浏览(43)
  • 嵌入式一开始要怎么学?

    今日话题,嵌入式一开始要怎么学?废话不多说,我认为学习嵌入式编程无需观看视频,拥有好的文档比视频更有帮助。掌握一门编程语言是学好嵌入式的关键。现今有许多计算机编程语言可供选择,比如C语言和C++等。如果你刚刚入门,我建议先学好C语言。学好C语言后,你

    2024年01月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包