人体艺照片,不为人知的碰触,洛克王国欢乐谷在哪里
首先是一本好的c++书籍(accelerated c++, c++ primer),然后以及尽量多的完成书籍的习题,可以帮助完成c++语法的学习。虽然前面的书籍涵盖了标准库,但是不够完善,这个时候你可以选择在线查阅c++标准库这种泛型的学习方式,也可以选择《c++标准库》的方式进行学习。通过这样的步骤,你应该可以完成c++的初步学习了。
然后,由于c++是一门级语言,我想你需要到大三学习操作系统的时候,才会明白栈与堆、内存管理等更深层次的含义。但是,在明白这些概念之前不会妨碍你利用c++做一些事情,比如写一个简单的xml parser。这个时候,你应该会发现很多问题,如效率,代码规范等,这个时候,你可以研究effective c++,google c++ code standard等,只有自己犯了错,回过头反省才会更加深刻。
随后,你可以更加深刻的去思考c++,你需要阅读《the design and evolution of c++》。这本书的阅读,会教会你很多,是对你影响最大的c++书籍。如果你对c++编译器的一些细节有兴趣,深入c++对象模型可以推荐。如果你对stl的一些实现有兴趣,可以去翻翻stl源代码(很多人推荐stl剖析,但是我没有阅读过,我没有办法发表是否应该推荐的观点,列出来供你自行判断是否应该阅读)。
到这一步骤,我想你应该可以称为c++ programmer了,剩下的就是实践中发现问题,然后补足自己。
此外,由于c++博大精深,应用的范围多如牛毛,特定方向所需要的知识未列举。比如你要研究android的ndk什么的,那就是属于你后面的事情了。
下面转来一些另一位的关于c++学习书籍的建议作为参考:
不了解c++的人先认识一下c++(系统学习材料附后)。为了理解c++,你必须认识其主要的次语言。幸运的是总共只有四个:
c。说到底c++ 仍是以c为基础。区块(blocks)、语句(statements)、预处理器(preprocessor)、内置数据类型(built-in data types)、数组(arrays)、指针(pointers)等统统来自c。许多时候c++ 对问题的解法其实不过就是较高级的c解法(例如条款2谈到预处理器之外的另一选择,条款13谈到以对象管理资源),但当你以c++ 内的c成分工作时,高效守则映照出c语言的局限:没有模板(templates),没有异常(exceptions),没有重载(overloading)……
object-oriented c++。这部分也就是c with classes所诉求的:classes(包括构造函数和析构函数),封装(encapsulation)、继承(inheritance)、多态(polymorphism)、virtual函数(动态绑定)……等等。这一部分是面向对象设计之古典守则在c++ 上的最直接实施。
template c++。这是c++ 的泛型编程(generic programming)部分,也是大多数程序员经验最少的部分。template相关考虑与设计已经弥漫整个c++,良好编程守则中"惟template适用"的特殊条款并不罕见(例如条款46 谈到调用template functions时如何协助类型转换)。实际上由于templates威力强大,它们带来崭新的编程范型(programming paradigm),也就是所谓的template metaprogramming(tmp,模板元编程)。条款48对此提供了一份概述,但除非你是template激进团队的中坚骨干,大可不必太担心这些。tmp相关规则很少与c++ 主流编程互相影响。
stl。stl是个template程序库,看名称也知道,但它是非常特殊的一个。它对容器(containers)、迭代器(iterators)、算法(algorithms)以及函数对象(function objects)的规约有极佳的紧密配合与协调,然而templates及程序库也可以其他想法建置出来。stl有自己特殊的办事方式,当你伙同stl一起工作,你必须遵守它的规约。
系统学习之
c++ primer 第五版 (豆瓣) stanley b.lippman规范使用之
effective c++ 第三版 (豆瓣) meyers分类学习之
1. c++标准程序库:自修教程与参考 (db) nicolai m. josutti stl使用必看!
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论