Please "Learning Standard C++ as a New Language", and "Speaking C++ as a Native"
朋友的公司还在用C++的环境编写着“带类的C”代码,每天回来就倒苦水,我曾经工作过的一家公司也有动辄几千行的C风格的函数
这里概述一下C++最最基本的用法,只能算是入门前的准备工作
一、编程本身
描述问题,用于与人交流
描述解决方案,用于与计算机交流
假设解决方案就是问题的描述本身,那么,这是完美的,例如 Select * From books;
而目前主流开发平台还做不到这一点,于是存在两个我们需要处理的空间,“问题空间”和“算法空间”
小说的描述依赖于自然语言,凡不可言说者必保持沉默,程序的表达依赖于编程语言
学习C++,就是用C++的术语、词汇来描述这两个空间,而不是C语言的术语、词汇;其它语言也是如此
因此,你应该首先熟悉C++本身
二、语言本身
不要理会面向对象,不要理会泛型编程,不要理会函数式编程,不要理会产生式编程,在上学学习母语语法前,你已经学会了用人类的语言表达高兴愤怒,而不是用小狗或别的动物的语言,也已经学会了如何用人类的语言讨要你心爱的玩具;让我们用C++的语言做个玩具程序:
读入一个文本文件,将每一行文本形成的字符串按字母顺序从小到大排序,然后将排序后的内容写入另一个文件
分析:
问题空间中的对象:输入文件,字符串,输出文件
算法空间中的对象:读,缓冲,排序,写
用C++描述:
输入文件:ifstream
字符串:string
输出文件:ofstream
读:getline
缓冲:vector, vector.push_back
排序:sort
写:copy
最终的程序:
int main()
{
ifstream fin("in.txt") ; //输入文件
vector<string> buf; //缓冲区
string d; //字符串临时对象
while(getline(fin,d)) buf.push_back(d) ; //读,并缓冲
sort(buf.begin() ,buf.end()) ; //排序
ofstream fout("out.txt") ; //输出文件
copy(buf.begin() ,buf.end() ,ostream_iterator<string>(fout,"\n")) ; //写
}
没有char*[],scanf,printf,OpenFile等非我族类的词汇
三、入门
至少有四本教材可用于“正确的C++的正确的入门”,推荐阅读
Essential C++
C++ Primer
The C++ Programming Language
The C++ Standard Library
四、提高
定理的证明依赖于基础数学语言,但也可以依赖于其它已经被证明的定理,入门之后,就可以学习如何用C++来表达面向对象,表达通用算法,像前文的sort,copy等,或用来实现其它更高层的抽象,如用它来实现一种DSL,使我们能够将上面程序的描述和解决方案用下面的语句统一起来:
Write (Read * From in.txt Orderby alpha) To out.txt;