从C语言到C++①(第一章_C++入门_上篇)C++学习介绍(命名空间和C++输入输出流)(上)

简介: 从C语言到C++①(第一章_C++入门_上篇)C++学习介绍(命名空间和C++输入输出流)

前言

拖了这么久终于开始更传说中的C++了,虽然可能听说C++是掌控一切的,很难,但是认真学还是能学好的。未来改变世界的能力就交给各位了。


本系列文章默认已经学过C语言,并且对数据结构的一小部分知识有简单了解,(只要看过前面的专栏绝对够了)建议在正式开启学习C++之前,可以复习一下C语言相关的知识。

1.认识C++

C语言是结构化、模块化的语言,适合处理较小规模的程序。对于复杂和规模较大的程序,需要高度的抽象和建模时,C语言就太不合适了。C语言是面向过程的程序设计语言。

为了解决软件危机,20世纪80年代,计算机提出了 OOP(Object Oriented Programming),即面向对象思想,支持面向对象的程序设计语言C++就应运而生了。C++是由C语言发展而来的,所以C++兼容C语言,C++ 在西方称为C Puls Puls(CPP)

下图是C++之父---本贾尼

1979年,贝尔实验室的本贾尼等人在试图分析 Unix 内核的时候,试图将内核模块化,于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为 C with classes。后面在C++的发展中发展到了很多的阶段。下面在1998年定的标注,这个版本之后的 C++ 就相对比较完善了。支持了泛型编程,引入了STL标准模板库。 目前下面阶段重要的是C++98和C++11。

6664930468514c23b874dfd38e10d67a.png

之后C++的更新其实是有点慢的, 比如 C++03 和 C++05 主要是修订一些东西。直到 C++11 才开始新增了新的东西,在这之后 14 17 也是在修订……如今出了 C++20,也是一个备受吐槽的版本,因为没有加啥特性。所以这里主要讲的是C++98和C++11。

2.C++的重要性

C++ 到现在为止已经将近有40年了,目前最主流的两门语言 C/C++ 和 Java,其次就是 Python了,近几年机器学习的算法,上层是用 Python 写的,再其次就是 Go,也是蛮火的。

C# 当年是微软搞出来为了对抗 Java 的语言,C#最大的限制就是他是 Windows 上的,发展路径可能不好。

从语言发展的角度来说,C++是主流语言。再说,学完C++上手其他语言也是非常快的。服务端开发、大型软件、游戏开发……其中游戏开发里很多用的也都是C++。

3.如何学习C++

多敲代码,多总结。记笔记、画思维导图。

常看书:

入门推荐看:高质量程序设计指南————C++/C语言


进阶推荐看: EffectiveC++   C++Primer


看看别人是怎么学的,以及掌握C++的各个阶段:


以下引用自2010年8月号《程序员》刊登的拙文《C++强大背后》最后一段:


C++缺点之一,是相对许多语言复杂,而且难学难精。


许多人说学习C语言只需一本K&R《C程序设计语言》 即可,但C++书籍却是多不胜数。我是从C进入C++,皆是靠阅读自学。在此分享一点学习心得。个人认为, 学习C++可分为4个层次:


第一个层次,C++基础  (平平常常)


挑选一本入门书籍,如《C++ Primer》、《C++大学教程》或Stroustrup撰写的经典《C++程序设计语 言》或他一年半前的新作《C++程序设计原理与实践》,而一般C++课程也止于此,另外《C++ 标准程 序库》及《The C++ Standard Library Extensions》可供参考;


第二个层次,正确高效的使用C++ (驾轻就熟)


此层次开始必须自修,阅读过《(More)Effective C++》、《(More)Exceptional C++》、 《Effective STL》及《C++编程规范》等,才适宜踏入专业C++开发之路;


第三个层次,深入解读C++ (出神入化)


关于全局问题可读《深入探索C++对象模型》、《Imperfect C++》、《C++沉思录》、《STL源码剖析》,要挑战智商,可看关于模版及模版元编程的书籍如《C++ Templates》、《C++设计新思维》、 《C++模版元编程》;


第四个层次,研究C++  (返璞归真)


阅读《C++语言的设计和演化》、《编程的本质》(含STL设计背后的数学根基)、C++标准文件 《ISO/IEC 14882:2003》、C++标准委员会的提案书和报告书、关于C++的学术文献。


建议不要把「精通C++」作为一个一年目标,应该要把学习语言作为一个持续的过程,同时要把语言运用在具体的应用场合中。  

4.编写Hello World!

新生婴儿会以自己独特的方式向这个崭新的世界打招呼,C++刚出来后,也算是一个新事物,

C++是否也应该向这个美好的世界来声问候呢?来看下C++是如何来实现问候的。

打开编译器创建完新项目后,右键源文件,点击 "添加新建项" 。

以前取得是Test.c现在名称我们就取为 Test.cpp,这样代码就能很好地创建出来了:

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

1eed1b36309b4fa9810478c1b279223d.png

以上iostream是c++输入输出流的头文件,和C语言的stdio.h类似

using namespace std;是展开std的命名空间

cout 与printf 类似 ,<< 是流输出运算符, endl是换行

和刚学C语言一样,写C++也应该先把框架敲出来,下面详细介绍框架内容。


5.关键字

C++ 标准共计有 63 个关键字 (C++11),其中包括 C 语言的 32 个关键字。

这里不对关键字进行具体的讲解,后续都慢慢会学到的

目前只需要注意一点:命名时要避开这些关键字。

如果把变量命名为关键字,编译器将无法识别这个标识符。从而导致编译错误

注意下面这些关键字,对于刚学完 C 的初学者来说有很多 "生词" ,先混个眼熟:

这里把关键字表列出来,是为了在初学 C++ 时少踩命名的坑。


6.命名空间(namespace)

在 C/C++ 中,变量、函数和类都是大量存在的,这些变量、函数和类的名称,


都会存在于全局作用域中,这么一来就会导致 命名冲突 问题……


C++ 引入了 namespace,只要合理使用,就可以有效地避免命名冲突问题。


使用命名空间的目的:对标识符的名称进行本地化,以避免命名冲突或名字污染。


刚才 Hello World ! 代码中的 namespace 的出现,就是针对这个问题的。


比如在 stdlib 库中有一个生成随机数的函数 rand() ,


相信大家都认识,但是假装某个人不知道 stdlib 库中有一个叫 rand 的函数存在,


因此在定义变量时给变量取名为 rand 。

#include<stdio.h>
#include<stdlib.h>
 
int rand = 525;
 
int main()
{
  printf("%d\n", rand);// 这里到底是打印我们自己定义的rand,还是stdlib里的?
  return 0;
}

我们知道,#include 包含头文件,头文件里的内容是会被展开来的。


当展开头文件时,stdlib 库中有一个叫 rand 的函数,我这里又定义了一个叫 rand 的变量,


此时就冲突了,那么问题来了,这里 printf 打印出来的会是什么呢?


编译器的寻找规则: 局部找 → 全局找 → 找不到(报错)。


问题是在C语言里几乎没有办法很好地解决这种问题。


所以为了很好地解决这种冲突的问题,C++ 就加入了命名空间的特性。


在 C++ 里,我们就可以利用 "命名空间" 来解决这个问题,


所以 C++ 提出了一个新语法 —— 命名空间 namespace。

6.1命名空间的定义

定义命名空间,肯定得用到我们刚才提到的 namespace 关键字,

namespace 后面可以取一个空间名,然后再接上一对大括号就可以了

我们该如何使用它呢?修改上面的代码:

#include<stdio.h>
#include<stdlib.h>
 
namespace rtx // 自己定义的命名空间可以自己随意命名
{
  int rand = 525;
}
 
int main()
{
  printf("%d\n", rtx::rand);//这样就能打印我们定义的rand了
  return 0;
}

这里的 : :  叫做 "作用域限定符" 。这么一来,就不怕冲突了,问题就这么轻松地解决了。

命名空间能够达到一种类似于 "隔离" 的效果。

注意事项:①命名空间必须在全局作用域下定义。其次,正是因为命名空间是全局的,所以这个 rand 变量也自然而然地变成了全局变量。

②命名空间长得有点像结构体,但是它和结构体不是一个东西,结构体是定义一个类型,它们的性质是完全不一样的。还有,命名空间大括号外不用加分号。


从C语言到C++①(第一章_C++入门_上篇)C++学习介绍(命名空间和C++输入输出流)(下):https://developer.aliyun.com/article/1513633?spm=a2c6h.13148508.setting.24.5e0d4f0emCh6wU

目录
相关文章
|
3月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
74 2
|
18天前
|
算法 网络安全 区块链
2023/11/10学习记录-C/C++对称分组加密DES
本文介绍了对称分组加密的常见算法(如DES、3DES、AES和国密SM4)及其应用场景,包括文件和视频加密、比特币私钥加密、消息和配置项加密及SSL通信加密。文章还详细展示了如何使用异或实现一个简易的对称加密算法,并通过示例代码演示了DES算法在ECB和CBC模式下的加密和解密过程,以及如何封装DES实现CBC和ECB的PKCS7Padding分块填充。
43 4
2023/11/10学习记录-C/C++对称分组加密DES
|
1月前
|
算法 编译器 C语言
【C语言】C++ 和 C 的优缺点是什么?
C 和 C++ 是两种强大的编程语言,各有其优缺点。C 语言以其高效性、底层控制和简洁性广泛应用于系统编程和嵌入式系统。C++ 在 C 语言的基础上引入了面向对象编程、模板编程和丰富的标准库,使其适合开发大型、复杂的软件系统。 在选择使用 C 还是 C++ 时,开发者需要根据项目的需求、语言的特性以及团队的技术栈来做出决策。无论是 C 语言还是 C++,了解其优缺点和适用场景能够帮助开发者在实际开发中做出更明智的选择,从而更好地应对挑战,实现项目目标。
61 0
|
3月前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
|
3月前
|
Java 编译器 C++
c++学习,和友元函数
本文讨论了C++中的友元函数、继承规则、运算符重载以及内存管理的重要性,并提到了指针在C++中的强大功能和使用时需要注意的问题。
31 1
|
3月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
21 0
|
3月前
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
31 0
|
1月前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
66 10
|
1月前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
51 9
|
1月前
|
存储 Unix Serverless
【C语言】常用函数汇总表
本文总结了C语言中常用的函数,涵盖输入/输出、字符串操作、内存管理、数学运算、时间处理、文件操作及布尔类型等多个方面。每类函数均以表格形式列出其功能和使用示例,便于快速查阅和学习。通过综合示例代码,展示了这些函数的实际应用,帮助读者更好地理解和掌握C语言的基本功能和标准库函数的使用方法。感谢阅读,希望对你有所帮助!
41 8