勿在浮沙筑高台
课程:C++ 面向对象程序设计。
面向对象,它是一个观念。那么我们要用这种观念来写程序,需要面向对象的语言,而 C++ 就是一个支持面向对象观念的一种语言。
上这门课你该具备什么样的基础呢?只要你有这些基础就够了,你曾经学过某一种 procedure language,最好是 C 语言,但是其他语言也可以。这个 C++ 语言,从名称就可以知道是建构在 C 之上的,所以我们后面谈到的一些术语,或者一些关键词,会跟 C 有关,所以虽然在过程式语言(procedure language),很多观念是共通的,但是如果你学过 c 语言的话,你对于我所讲的东西会更快的,一下子就融入。那么既然你学过这种结构式的,过程式的语言,当然也就表示你已经懂了这些东西。你懂得什么叫变量;你懂得什么叫类型,类型比如说整数,浮点数,字符,结构,这种就是类型;你懂得什么是作用域,像以前我们写一个函数,函数有大括号,大括号里头,变数在这里头的生命,这个就是它的作用域;你也已经懂得了循环(loop),在 C 里面 while loop, for loop; 你也应该已经懂得了流程控制,你怎么样在执行到一个地方的时候,把你的流程拉到另外一个地方去,你应该已经懂得 if else 或者switch case。假设你已经有了这些基础,我们就可以进行这一门课程了,那当然这就表示你已经写过程序了,所以你应该也已经知道了,一个程序它是需要编译,需要链接才能够被执行的。而且你也已经知道了,怎么样去编译和链接一个程序。现在的软件开发工具很发达,所以有很多的集成环境,不管你过去是用一种比较比较低阶的,用命令行的模式和形式去做去编译链接,或者是你在集成环境底下去建立一个程序,只要你曾经有过这样的经验就可以,如果你都没有这些经验的话,我们在课程的最后,我也会附几张投影片来引导你,选一个平台来引导你来做这些事情。
那么我们这门课程的目标是什么呢,希望我们能够培养出正规的,大气的一种编程习惯,虽然也许我们写的代码是小小的,毕竟一开始嘛我给各位的范例也不是太大,但是在即使是一个小的程序,我们也希望一起手一出手,就是有大家风范的一种正规的写法,所以在我们的目标啊,我的目标要引导各位以良好的方式来写 C++ 的 class ,那这里为什么它谈论 class 呢,因为 C++ 代码里面的每一个单元,最重要的每一个单元就是一个 class ,所以这边就出现了这个字眼。
而 class 有分为两个很经典的呃一的分类,这也是我们后面马上就要讲到的,一种 class 是带有 pointer,一种 class 是不带 pointer,这两种在设计上呢在思考上了截然不同,那这一种对于单一 class 的设计,我们又有一个名字叫做 object base,object base program,那相对应的呢面向对象叫叫做 object oriented ,如果你写好几个 class ,彼此之间有关联,有某种关联的话,我们就可以说是object oriented的面向对象,所以当然是我们首先要培养好的,对单一 class 的正规的好的习惯写法,然后我们才可以扩大,好几个 class 之间,好几个类之间,他们彼此有什么样的关系,所以整个课程呢是分为两大类,一个是基于对象,一个是面向对象。这是我们的目标。
这个课程上完之后,你可以下载这些东西,我给大家三个例子,一个是这是我们在高中数学的都学过复数,我要把这个数学里面的复数,搬到我们这个语言上来,把它实现出来啊,这是 complex,所以每一个例子都有一个头文件,和一个实现文件,这是第一个例子。那第二个例子呢,因为刚刚我有提过 class 的经典分类,一种是不带指针的,一种是带指针的,所以这里就有两个例子了,那第三个例子呢,oop 这个就谈到开始发展很多的 class,彼此有关联的话,这是第三部分,我们可以啊,各位可以下载到这些文件,而我后面的对于语言设计的解说呢,也就以这三个例子的内容来解说。
很快的谈一下 C++ 的历史,那么这个既然叫 C++ ,它一定是base on,他一定是建立在c之上,而是c a b c c排在第三,前面有没有b呢,真的有一个b语言啊,1969年,那前面有没有a呢,呃我没有查到有a开头的a大,但是好像没有一个叫a的语言好,所以b语言有c语言有1972年,然后 C++ 语言是在1983年,他早期不叫 C++ ,早期叫做c with class ,所以从这名称就更清楚了啊,他是以c语言为基础,并且带有 class class ,就是我们学习的重点啊,面向对象语言呢不是只有 C++, C++ 可能是第一个最大规模的,被被被全世界广泛接受的语言,在它的后面还有很有名的啊,也很多人在使用的是java语言,跟 c# 以及其他的语言,那事实上这些语言呢嗯精神都一样,关键字也都差不多,所以我们学了一种语言,基本上也就可以了解另外的两三种语言了,当然它细节会有所不同,所以这门课程呢呃也很适合你已经了解其呃,比如说java或 c# 其他语言,但是你想你想到 C++ 这边来弄得更清楚一些,也适合这样的人,这是 C++ 的历史。
我们这张投影片来跟大家介绍 C++ 的演化,也就是说这个语言它有什么样的版本,他这个出现的时间其实刚刚各位已经看到了,1983年就有了,但是它真正正规化变成有一个国际规范呢,是在1998年,我们叫 C++ 九八,也就是一点, C++ 一11,2011年才出现二点,这中间还有一些小的版本,这里有02003年有一个t r y t r one,叫做technical report one,那2014年呢又有一个小版本,而我们现在这门课所要讲的,以及目前大部分在业界,大部分的程序员所使用的呢,其实大家不必太在乎版本,而我现在要讲的是,大部分的程序员所用的几乎都是 C++ 98,2011的这个版本呢出现了很多新的关键字,很多新的概念,在标准库上也出现了很多的新的工具,新的东西给大家用啊,也许因为太新了,毕竟现在才2015啊,2011呢这中间才4年啊,所以使用的人使用这些新特性的人并不是太多,而我们这门课程讲的都是非常根本的东西啊,是从 C++ 98 就有了,所以大家这边只是给大家一个概念,说这个语言在正规化的发展上面呢有这个进程。
我们看到下面这边有一张图,我们学习 C++ 可以分为语言的部分,还有标准库的部分,现在几乎学任何一个语言都是这样子,要把这两个分开来。在比较早期,也许在 C 的时代呢,大家很关注的是语言的部分,那当然了,其实你也脱不开标准库的部分,C 也有它的标准库。所以我现在要传传达的概念是,像现在语言越来越复杂,所以他们的标准库,所给各位的东西也是越来越多,那使用这些这些标准库,也是一个非常非常重要的事情。我们现在 在这门课程上,主要谈语言,我们用到标准库的部分,只有最简单的的一些东西的输出,那事实上标准库是非常庞大,非常有用的。可以说这么一句话,如果你是一个 C++ programmer程序员,但是你不怎么去用标准库的话,也不能算是一个合格的、有生产力的 C++ 程序员,你可能不能算是,当然这个要到各位我们进入业在学生时代啊,或者进入业界,你开始大量的写比较大型的语言,你就会知道标准库的重要性。
课程开始之前,我想跟大家介绍一些很经典的书籍,对大家会有帮助的,在语言的部分,这两本书可能是全世界卖的最好的读者最多的 C++ 的百科全书籍,百科全书等级的这种语言书。 C++ 的书籍实在太多太多了,通常我们学一个东西都会去想,要知道这个某某之父啊, C++ 之父他所写的书,那就是右边这本 C++ programing language 这边有个标题,写 C++ 11,就是它涵盖了最新的标准规格,那这个是前一两年出来的啊,当然是要在2011之后才出来的,目前最新版本是第四版,第四版,另外这本书呢是 C++ 的第一个编译器的作者,所写的书籍,所以他也有相当的呃,这个这个说服力是一个经典的书籍,这个书已经到了第五版啊,这两本书现在打出来的封面,都是目前最新的版本,所以它当然也涵盖了 C++ 11,刚刚不是说还有一个 2014 吗,2014是一个小小改版,所以最重要大家谈论就是1998的,和2011的这个封面啊,我也是跟大家一样,在这边努力的找,也没有找到,说它是涵盖2011呢没找到,然后我发现这个封面这边有个一一哈哈,其实有这么大的一个字,告诉大家,这是涵盖了2011年哦,其实这边有个小字了,2011 C++ 一等的好,这是语言的部分。
那么我们其实学了语言之后呢,很希望得到专家的建议,在这个课程里面呢,我也扮演这种角色,告诉你什么东西该写什么东西,怎么样写比较好,但毕竟我们在课程里面,涵盖的是非常还算是非常小的一部分,你呀还是需要更多的这方面的信息,这边有一本书可以给大家带来很好的帮助,effective C++ 这个书,目前这个是最新版本,就是第三版,它里面以条款的方式告诉你什么该做,什么不该做,你如果做什么动作会影响什么样的效率啊,所以这是专家给给我们的心得,给我们的经验非常好啊,右边这个人是他的中文版。
刚刚提到语言 C++ 语言除了语法本身好,语法以及它的语义,另外呢有一个很重要的是标准库,标准库现在是很庞大,所以我们也需要好的书籍来帮助学习,我也看过很多很多的这方面的书,我很推荐这一本叫做 C++ standard library,就是标准库,这个也是标题,这个封面上告诉各位了,这涵盖了 C++ 一11,那么再深入下去,对于初学者来讲,这条路已经很遥远了啊,再深入下去的话,深入到什么,如果你有兴趣想要看看标准库的源代码,那这种书就很少了啊,就是很很深的部分,有这么一本书,stl源码剖析s t l啊,我现在就不解释太多,他其实就是标准库的前身,现在你可以想象,标准库里面大概百分之七八十啊,或者说八九十也可以,这在以前叫做标准,叫做s t l,叫standard temperate library的标准模板库,其实就是现在的标准库,简单的话可以这么讲,好书籍非常多啊,这样子只讲了只介绍了这六本,6本呢肯定有遗珠之憾,主要就是这是最有名的呃,或者说某些主题很少见啊,这像刚刚那个源码剖析啊,所以跟大家做一个推荐。
总结:
基础
- 最好有 c 语言基础;可以编译和链接一个程序
目标
- 培养出正规的、大气的一种编程习惯
- 以良好的方式写 C++ 的 class
class 分类
- C++ class
- class without pointer members
- Complex
- class with pointer members
- String
- class without pointer members
基于对象和面向对象
- 基于对象是 单一 class
- 面向对象是 几个 class ,彼此之间有关联
- 继承 (inheritance)
- 复合 (composition)
- 委托 (delegation)
三个学习的例子
- 基于对象
- 不带指针的 class
- 复数
- 带指针的 class
- 字符串
- 不带指针的 class
- 面向对象
- OOP
C++ 的历史
- C 语言 (1972)
- C++ 语言 (1983)
- C with Class -> C++
C++ 的演化
- C++ 98 (1.0)
- C++ 03 (TR1, Technical Report 1) 小版本
- C++ 11 (2.0)
- C++ 14 小版本
学习 C++ 分为哪些部分
- 语言(本课程主讲)
- 标准库(非常重要,代表生产力)
经典书籍
百科全书等级
C++ primer 第五版
是 C++ 的第一个编译器的作者所写的书籍。涵盖 C++ 11。The C++ Programming Language 第四版
C++ 之父写的
专家的建议
Effective C++ 第三版
,右边是 侯捷翻译的 中文版
标准库
C++ standard library
STL 源码剖析