第一讲:概述
(文章中的带底色斜体字是我的感悟、感受或个人补充,代表了我个人的观点;非带底色斜体字是我的上课笔记,这部分力求贴近原意)
课程名称:C++面向对象程序设计
通过这门课程你能获得什么?
培养正规、大气的编程习惯
这门课程无时无刻不在提醒你好的c++编程习惯是什么,让人第一眼看到你的代码就觉得你很nice。课程中会有c++编程作业,这些作业会帮助你把这些细碎的知识点串接起来。
以良好的方式编写c++ class
按照class是否包含指针而将class分为两大类,课程中会重点强调这两种class的区别以及处理方法。
作为一门c++面向对象程序设计课程,c++ class无疑算是重点,在这里侯捷老师开门见山,在第一讲中就给出了c++ class的一种经典分法,之后的大部分课程都会紧紧围绕这个分法来讲解知识。这种风格让我有一种提纲挈领地感觉,更对c++ class有了一个更为清晰的认识,非常受用。
掌握class之间的3种关系-继承、复合、委托
当class之间具备某种关系的时候就是面向对象的,反之单一class就是基于对象的,学习面向对象要从基于对象开始,先要能写出正确的单一class,这也是这门课程的学习顺序。
学习这门课程需要具备哪些条件?
有一门procedural language基础(c语言最佳),知道变量、类型、作用域、循环、流程控制。
按照我上这门课的学习经验来看,如果你翻开《c++ primer》第五版,对第一部分的知识理解起来不感到困难,就基本达到学习这门课程的基础了。
知道程序要经过编译、链接之后才能被执行。
知道如何编译和链接源代码。
侯捷老师的这门课程不会现场敲代码,而是采用ppt的方式进行传授,而且给出的示例代码大多是代码片段,所以需要学习者有基本的生成可执行文件的能力。
学习完这门课程后将会得到什么材料?
学习完后你会获得以下几个文件
complex.h complex-test.cpp
string.h string-test.cpp
opp-demo.h opp-test.h
这几个文件是侯捷老师上课时候精心讲解的对象,讲完后会作为学习资料提供给大家。对通过complex和string的学习,能够掌握基于对象的知识,通过opp-demo的学习能够掌握面向对象的知识。
我记得《c++ primer(第四版)(评注版)》陈硕的序言里面讲到c++里面有几个练习值得一做,其中就包括了侯捷老师精讲的复数与字符串,当然他还提到了其他几个,下面是他的原话:
就学习c++语言本身而言,我认为有几个练习非常值得一做。这不是“重复发明轮子”,而是必要的编程练习,帮助你熟悉、掌握这门语言。一是写一个复数类或者大整数类,实现基本的加减乘运算,熟悉封装与数据抽象。二是写一个字符串类,熟悉内存管理与拷贝控制。三是写一个简化的vector<T>类模版,熟悉基本的模版编程,你的这个vector应该能放入int和std::string等元素类型。四是写一个表达式计算器,实现一个节点类的继承体系,体会面向对象编程。前三个练习是写独立的值语义的类,第四个练习时对象语义,同时要考虑类与类之间的关系。
这门课程会讲到C++ 11吗?
C++目前有两个大版本,C++98(1.0)和C++11(2.0),这本课程讲解的是最根本的内容,C++11中涉及到的新特性不是本课程讲解的重点,所以不会涉及。
这门课程会讲到C++标准库吗?
这门语言不会。
但是GeekBand中有专门讲解标准库的课程。
学习C++有什么好的参考书籍吗?
《C++ Primer》百科级 最新是第五版 作者参与了C++第一个编译器的实现
《The C++ Programming Language》最新是第四版,作者是C++之父,目前还没有中文版
《Effective C++》最新是第三版,告诉你什么改写,什么不该写
《The C++ Standard Library》这本书已经有中文版
《STL源码剖析》市面上少有同类书籍