欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Essential C++ Primer

程序员文章站 2022-03-29 20:39:25
...

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;