C++ Primer Plus 读书笔记 (1 -2 章)

 

1预备知识

 

1.2.2 C语言编程原理

计算机语言要处理的两个重要概念---数据和算法;

C语言最初是过程式(procdural)语言,意味着它强调编程的算法方面;

C语言:结构化编程(structured programming) + 自顶向下(top - down)

结构化编程技术反应了过程性编程的思想,根据执行的操作来构思一个程序。

1.2.3 面向对象编程

OOP 强调的是数据,其试图让语言来满足问题的要求,而不是让问题满足语言的过程性方法;

OOP的一个重要任务是设计有用,可靠的类;

1.2.4 C++与泛型编程(generic programming)

泛型编程OOP的目标相同,即使用重用代码和抽象通用技术使设计更简单,但OOP强调的是编程的数据方面,而泛型编程强调的是算法。

术语泛型(generic )指的是创建独立于类型的代码。C++的模板即提供了这样的机制。

1.2.5 C++的起源

名称C++来自于C语言中的递增操作符++,该操作符将变量加1。名称C++表明,她是C的扩充版本。

在模板特征被使用和改进以后,人们才逐渐意识到,它们和OOP同样重要---甚至比OOP还重要,但有些人不这么认为。

C++融合了OOP、泛型编程和传统的过程式编程方法。

1.3 可移植性和标准

制定 ANSI/ISO C++ 标准的工作始于1990年。

19954月,委员会草案(Committee Draft, CD)发表。

2003年,C++标准第二版(IOS/IEC 14882:2003)发布。

1.4程序创建的技巧

C++程序运行的大体步骤:

1) 编写并保存源代码;

2) 编译源代码并生成目标代码(object code)

3) 链接源代码并生成可执行代码;

通常,IDE允许在辅助窗口中运行程序。程序在执行完毕后,有些IDE将关闭该窗口,而有些IDE则不关闭。如果编译器关闭窗口,而为了查看输出,必须在程序的最后加上一些代码:

    cin.get(); //add this statement

    cin.get(); //and maybe this, too

 return 0;

}

cin.get()语句读取下一次键击,因此上述语句让程序等待,直到按下Enter键(在按下Enter键之前,键击将不被发送给程序,因此按下其他键都不管用)。如果程序在常规输入后留下一个没有没有被处理的键击,则第二条语句是必要的。例如,如果要输入一个数字,则需要输入该数字,然后按Enter键。程序将读取该数字,但Enter键不被处理,这样他被第一个cin.get()读取。(*详见流)

IDE提供了用于创建源代码文件的文本编辑器、用于生成可执行文件的编译器和链接器以及其他资源,如工程管理和调试功能。然而,这些任务也可以在命令行环境中通过核实的工具来完成。

 

2开始学习C++

 

2.1.1 main() 函数

预处理编译指令 #include 编译指令 using namespace. ???

通常,main() 被启动代码调用,而启动代码是编译器添加到程序中的,是程序和操作系统之间的桥梁。事实上,函数头 int main()描述的是main()和操作系统之间的接口。

Windows 编程中,动态链接库(DLL)模块不是独立的程序,因此不需要 main(),而用与专用环境的程序---如机器人中的控制器芯片---可能不需要main()。但常规的独立程序都需要main()

2.1.3 C++与处理器和iostream文件

#include <iostream> // a Preprocessor directive

该编译指令导致预处理器将iostream文件的内容添加到程序中。这是一种典型的预处理器操作:在源代码被编译之前,替换或添加文件。实际上,iostream文件的内容将取代程序中的代码行 #include <iostream>。原始文件没有被修改,而是江源代码文件和 iostream 组合成一个符合文件,编译的下一个阶段将是使用该文件。

2.1.4 头文件名

iostream 这样的文件叫做包含文件 (include file) ---由于他们被包含在其它文件中: 也叫做头文件 (header file) ---由于它们被包含在起始处。C++编译器自带了很多头文件,每个头文件都支持一组特定的工具。C语言的传统是,头文件使用扩展名 h, 将其作为一种通过名称表示文件类型的简单方式。最初C++也是这样做的,不过,最近,C++的用法发生了变化。现在,对老式C的头文件保留了扩展名h(C++ 程序仍可以使用这种文件),而C++头文件则没有扩展名ANSI/ISO委员会在头文件使用那种扩展名(.hx .hxx)产生分歧,所以最终他们一致同意不使用任何扩展名(-_”)

2.15 名称空间

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

using namespace std;

这叫做 using 编译指令 (directive)

名称空间支持是C++ 中一项比较新的特征,它是为了使编写将多个厂商已有的代码组合起来的程序更简单而设计的。名称空间让厂商能够将其产品封装在一个叫做名称空间的单元中,这样就可以使用名称空间的名称来指出想使用那个厂商的产品。如:

Microflop::wanda (“go dancing”); //use Microflop namespace version

Piscine::wanda (“a fish named Desire”); //use Piscine namespace verion

按这种方式,类、函数和变量便是 C++ 编译器的标准组件,他们现在都被放置在名称空间 std 中,仅当头文件没有扩展名 h 时。这意味着在 iostream 中定义的、用于输出的 cout 变量实际上是 std::cout, endl 实际上是 std::endl.因此,可以省略 using 编译指令,以下述方式进行编码:

 std::cout << “Come up and C++ me some time”;

std::cout << std::endl;

当然,亦可以使用 using 编译指令:

 using namespace std;

更好的方法是,只使所需的名称可用,这可以通过使用 using 声明来实现:???

 using std::cout;  //make cout available

 using std::endl; //make endl available

using std::sin; //make cin available

2.1.6 使用 cout 进行 C++ 输出

 cout << “Come up and C++ me some time”;

cout 是一个预定义的对象,知道如何显示字符串、数字和单个字符等。于是,我们可以体会到对象的长处之一---不了解对象的内部情况,就可以使用它,只需要知道它的接口。cout 对象有一个简单的接口,如果string 是一个字符串,则下面的代码将显示该字符串:

cout << string;

以上两个语句实际上是将一个字符串插入到输出流中。<< cout的对象属性的一员,是一个操作符重载的例子。

诸如 endl等对于 cout 来说有特殊函数的特殊符号被称为控制符 (manipulator)

换行符/n是一种被称为 转义序列的按键组合。

2.1.7 C++ 源代码的格式化

  C++ 中,回车的作用就和空格或制表符相同。也就是说,在 C++ 中,通常可以在能够使用回车的地方使用空格,反之亦然。

一行代码中不可分割的元素叫做标记 (token)。通常,必须用空格、制表符或回车将两个标记分开,空格、制表符和回车统统称为空白(white space)

2.2 C ++ 语句

编译器负责分配和标记内存的细节。C++ 可以处理多种类型的数据,而 int 是最基本的数据类型。在C Pascal 中,所有的变量声明通常都位于函数或过程的开始位置,但 C++ 没有限制,实际上,C++ 通常的做法是,在首次使用变量前声明它。

2.2.3 cout 的新花样

看如下语句:

carrots = 25;

cout << carrots;

首先, cout carrots 替换为其当前值 25;然后,把值转换为合适的输出字符。

记住,cout 可用于数字和字符串。但整数25与字符串,” 25” 有天壤之别。字符串存储的是书写该数字时使用的字符,即字符25。程序在内部存储的是字符25的编码。要打印字符串,cout 只需打印字符串中各个字符即可。单证书25被存储为数值,计算机不是单独存储每一个数字,而是将25存储为二进制。在打印之前,cout必须将整数形式的数字转换为字符串形式。另外,cout很聪明,知道carrots是一个需要转换的整数。与老式printf区别在于cout 的聪明程度,如printf必须用特殊代码 (%s %d)来指出是要打印字符串还是整数。Cout的智能行为源自于C++的面向对象特征。

实际上, C++ 插入操作符 (<<) 将根据气候的数据类型相应的调整其行为,这是一个操作符重载的例子。另外,cout 是可扩展的 (extensible)。也就是说,可以重定义 << 操作符,使 cout能够识别和显示所开发的新数据类型。

2.3 其他 C++ 语句

输入时,cin 使用 >> 操作符从输入流中抽取字符。

2.3.3 类简介

C++ 之所以有如此的吸引力,很大程度上是由于存在大量支持 UNIXMacintosh Windows 编程的类库。

C++提供了两种发消息的方式:一方式是重定义操作符,另一种是使用类方法。cout cin 使用的是前者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值