初学C++之概念了解(笔记)

由于先前熟悉过C语言与Java语言,可能对C++入门的理解产生有色思想。
突然想学习,不是因为其庞大的体系,也不是因为其不啰唆的语法,也不是因为其常用语系统底层设计,这都不是我现在所需要或者想接触的。当然不排除以后!而是因为在我在学习数据结构的时候,遇到了一定的阻碍。不过单独去理解是没有什么问题,比如“二叉树”的先序遍历、中序遍历、后序遍历,栈的后进先出特点(或者先进后出),队列等等。但是要实际运用于程序设计中,我显然缺乏一定实践。考程序员的失利是一个惨痛的教训,之后去查找数据结构大部分是用C++作例子举例,当然C++也是最强大的编程语言。

好了话也不多说,就算熟悉过C或者Java,有一定的通性,但也我也是这个起点的小白。学习工具书自然是用了C++ Primer Plus。边学边做笔记,养成一个好的习惯,回头再来看。

#include <iostream>
int main(){
    using namespace std;
    cout << "Come up and C++ me some time.";
    cout << endl;
    cout << "You won't regret it!" << endl;
    return 0;
}

我从书本中找到以自己认为是亮点的内容进行分享:

C++预处理器和 iostream文件

首先,iostream首先可以拆开来,io与stream,见名之意为 io流,而不要说去查翻译没显示结果,一般,个别的翻译也支持将其翻译为“输入输出流”。i就是指input,o就是指output。
C++与C一样,也使用一个预处理器,以#开头,不必执行任何特殊操作来调用该预处理器,它会在编译程序时自动运行。

#include <iostream>

该编译指令的作用是将 iostream 文件的内容添加到程序中,这是一种典型的预处理器操作:在源代码被编译之前,替换或添加文本。
为什么要将 iostream 添加到持续中去?答案设计程序与外部世界之间的通信。C++的通信方案比如cin、cout等涉及iostream文件的多个定义。为了使用cout来显示消息,第一个程序需要这些定义。#include指令作用就是将iostream文件的内容随源代码文件的内容一起被发送给编译器,而文件里面的内容将体会程序代码行#include <iostream>。原始文件不会被修改,而只是将源代码文件与 iostream组合成一个复合文件。

头文件名

C++ 旧风格:  以.h结尾               如 iostream.h   C++可以使用
C旧式风格:   以.h结尾               如 math.h       C、C++可以使用
C++新式风格: 没有扩展名             如 iostream     C++可以使用,使用namespace std
转换后的C:   加上前缀c,没有扩展名   cmath           C++可以使用,可以使用不是C的特性,如namespace std

名称空间

如果使用的是 iostream而不是 iostream.h ,则应使用下面的名称空间编译指令来使 iostream中的定义对程序可用:

using namespace std;

这叫做 using编译指令,最简单的方法是现在接受这个指令,以后再去考虑它。但是还是简要地介绍一下,以免您一头雾水。
名称空间是C++的一大特性,旨在让您编写大型程序以及将多个厂商现有的代码组合起来的程序时,更容易。可能两个已经封装好的产品都包含同命 wanda()函数,这样在使用 wanda()时编译器不知道指的是哪个版本。名称空间让厂商将其产品封装在一个名称空间的单元中,这样就可以通过名称空间来指明想使用哪个厂商的产品。因此 Microflot Industries 可以将其定义放到一个名为 Microflop 的名称空间中。这样 wanda()函数的全称为 Microflop::wanda();Puscine公司的可表示为 Piscine::wanda();

Microflop::wanda("go dancing?");
Piscine::wanda("a fish named Desire");

该到了我自己发表观点的环节!!显然这种做法不要说我,大多数人都不会买账!
按照这种方式,类、函数和变量便是C++编译器的标准组件,它们现在都被放置在 std中,仅当头文件没有扩展名 h时,情况才是如此。这意味着 iostream 中定义的 cout 变量实际上是 std::cout,而 endl实际上是 std:endl

std::cout << "Come up and C++ me some time";
std::cout << std::endl;

然而多数用户不喜欢,除非可以毫不费力的完成这种转换,using编译指令就应运而生。
下面的一行代码表面可以使用 std 名称空间中的名称而不必使用 std::前缀:

using namespace std;

使用 cout 进行C++输出

然后好像忘记介绍一下,endl是一个控制符,意思为换行,<< 是空值符号的意识,用于插入右侧字符或字符串到输出流中,cout是输出流。这边的意思不是C中的按位左移运算符,我们都知道Java中的方法可以重写,自然很多运算符也存在重载的情况,最主要编译器会根据上下文来确定符号的含义,比如学习C语言的时候“*”号加在变量前,与加在变量或者常量运算之间的含义不同。这个就不多解释了!