做了几年的单片机C语言开发,慢慢发现此类开发越来越规范,开始引入了面向对象和模块化等编程思想,这对我的工作也是一项挑战,毕竟在嵌入式软件领域,“不进则退”是基本原理。而讨论到这些面向对象和模块化等高级编程语言具有的特性,很容易就想到了C++。其实很早之前就对C++很感兴趣,相信很多和我类似的工程师也是一样,最初的兴趣起因一定是C后面的两个++,这让人很容易与C语言产生关联,但C++和C的关系真的就如我想的那么简单吗,我想不学习完C++我还是不会有答案的。Anyway,既然我有兴趣学C++,而且工作上也需要用到,Let me start it right now!
我对C++并非完全的0基础,获取有0.01的基础,毕竟熟练使用了几年的C,零零散散也学点C++的名词。日记以《C++Primer the 5th Edition》为提纲进行学习。
1. 开始
提出一个书店问题,给出需求并指出处理该问题应有的部分:定义变量、进行输入和输出、使用数据结构保存数据、监测两条记录是否有相同的编号、包含一个循环来处理数据中的每条记录。
1.1编写一个简单的C++程序
操作系统会调用main函数,函数后的括号内为函数参数,函数前定义函数返回值的类型,函数参数后面的花括号为函数体,以上说明与C一致。
1.1.1 编译、运行程序
简要介绍了IDE, IDE中程序源文件的后缀名一般为.cc .cxx .cpp .cp和 .C。 编译器将程序源文件编译成可自行文件。
1.2 初识输入输出
C++语言本身没有输入输出语句,该功能通过标准库实现(类似于C标准控中printf)。一般使用iostream库做输入输出,stream为流,一个流就是一个字符序列,流表示随时间的推移,字符是顺序生产或消耗的。
istream为输入流类型,标准输入cin为istream类型的对象;ostream为输出流类型,标准输出cout为ostream类型的对象。标准错误cerr是输出告警和错误消息的ostream类型的对象,clog是输出程序运行时一般性信息的ostream类型的对象。
一个简单程序,输入两个数字,并输出他们的和。该程序需要使用iostream的库,所以在程序的第一行使用了#include<iostream>,这里需要说明一下,iostream和iostream.h的区别:iostream是标准输入输出流,C++中引入了命名空间(namespace)来避免命名冲突,使用iostream时需要指定命名空间“std”;而iostream.h是非标准输入输出流,继承与C的标准库,没有命名空间的概念,所以无法识别“std”而导致编译不过。
<<是输出运算符,运算符左侧必须是ostream类型的对象,右侧为需要输出的值;该运算符的结果为左侧的ostream对象。也正是该特点,可以在一条语句中连续输出多个打印信息。std::cout << "Hi world!" << std::endl; 等价于(std::cout << "Hi world!") << std::endl;或std::cout << "Hi world!"; std::cout << std::endl;
endl为操纵符(manipulator),向ostream对象写入endl会结束当前行,并将buffer的内容刷到设备中,该操作可以确保需要写入的值刷新到设备中而不是buffer中。
std为命名空间,标准控定义的所有名字都在命名空间std中。使用命名空间需要注意强调命名空间std,然后通过“::”(作用域运算符)来 指定某个命名空间的某个变量。
cin的内容基本与cout一致。
1.3 注释简介
C++采用两种注释:1、//单行注释,该行中//后面的内容将被注释;2、/* */界定符注释,在两个界定符之间的内容将被注释,该法继承于C。
1.4 控制流
程序是自上而下顺序执行的,但也可以通过下列控制流语句实现复杂的执行路径。
1.4.1 while 语句
介绍了while语句的功能、比较运算符<=,符合赋值运算符+=,递增运算符++
1.4.2 for语句
介绍了for语句的功能
1.4.3 读取数量不定的输入数据
讲解了一个简单的程序用于把输入的任意个数的数字进行累加,输入时如果得到的不是一个数字(比如字母)或收到一个文件结束符EOF(键盘上ctrl+D,或两次ctrl+Z,原因百度一下即可)后,就可以将之前的数字求和。
1.4.4 if 语句
介绍了if语句的功能
1.5 类简介
C++中通过类(class)来定义数据结构及其关联的一组操作。C++最初的一个设计焦点就是能定义使用上像内置类型一样自然的类类型(class type)。使用类需要了解三件事:1、类名是什么? 2、它在哪里定义的? 3、它支持什么操作?
1.5.1 Sales_item类
Sales_item item:其中Sales_item是一个类,定义了一个名为Sales_item的类型,item是一个类型为Sales_item的对象。
1.5.2 初识成员函数
成员函数是类的一部分,也称为方法,该方法向外提供了类的操作。
1.6 书店程序
结合以上的说明,讲解了书店问题的程序。
第一章节讲解了若干个基本概念,抛出问题,分析解决问题的思路和最小必要程度的概念讲解,最后提供程序解决问题,意在让读者能有个感性的认识,搭建了一个框架供日后丰富。