C++应该学什么?

如题所述

大一学习的c++,工作之后也一直用的c++。

1. 涵盖c++入门到精通的图书列表

《The C programming language》必读
《C++ Primer》,号称是一本可以让你从C或JAVA程序员转为一个真正的C++程序员的入门参考书,必读。
《The C++ programming language》,C++之父,人称B教主著作,在看过C++ primer后,应该可以跳章选读。
《Think in c++》,网上说此书的中文版翻译质量奇差,推荐看影印版,选读。
《Effective c++》,类似 Effective java,讲的是最佳实践,程序员必读。


《More effective c++》,上书的补充。
《The C++ standard library》,会写C,不会用标准库怎么行。这就跟java程序员不会用java.util包一样,必读。
《Effective STL》,STL库的最佳实践。Effective C++作者又一力作,必读。
《The annotated STL source》,STL源码分析,这本书应该算是深入/精通类了,选读。
《Generic programming and STL》,号称C++编程里,就是跟模板,泛型打交道,那么精通泛型是势在必行。

《C++ Template》,C++模板编程,代码复用的经验之道,必读。

《Exceptional C++》,跟Effective C++类似,属于最佳实践和难题解析,书中列出了许多应用场景和实例代码供读者揣摩,选读。

《More Exceptional C++》,上书的补充。

《Exceptional C++ Style》,上上书的补充

《Inside The C++ Object Model》,有了上面这些书做铺垫,那么终于可以读此神书了。它会带你游览C++对象模型的底层实现机制。读完此书,任何C++代码看起来如同行云流水,必读。

2. 优秀的C/C++开源项目(阅读代码)

OS:Linux kernel LVS、Linux应用程序

DB:Mysql、PostgreSQL

Complier:VM、GCC

Framework:OpenSip、SipProxy、

Net:ACE(Java Mina、Netty)、TCP/IP、HTTP协议栈

Cache:Memcached、Redis、

Library:STL(java util package)、Boost、Qt(UI)、

balance:Apache、Nginx

GSL

地址:https://github.com/microsoft/GSL

Boost文档

地址:https://www.boost.org/doc/libs/

wxWidgets官网

地址:http://wxwidgets.org/

gtkmm

地址:https://www.gtkmm.org/en/

CopperSpice

地址:https://www.copperspice.com/

Qt

地址:https://www.qt.io/Eigen

地址:http://eigen.tuxfamily.org/index.php?title=Main_Page#Documentation

Plot utils

地址:https://www.gnu.org/software/plotutils/

Asio

地址:https://think-async.com/Asio/

POCO

地址:https://pocoproject.org/

abseil

地址:https://abseil.io/

C++开源库汇总列表

地址:https://en.cppreference.com/w/cpp/links/libs

除了这些开源项目,也可以找一些免费的公开课,那这里也推荐一个ACM金牌大佬讲授的免费C++课程,可以去体验一下:

学好C++才是入职大厂的敲门砖! 当年要是有这课,我的C++也不至于这样

已失效 

3.C++语法讲解

    语言基础
    详细介绍变量、表达式、语句、指针、数组、流程控制、函数、文件组织等。

    抽象机制 - 面向对象编程
    深入讲解C++的抽象机制,封装(类)、继承、多态;操作符重载、函数对象、异常处理等。

    模板 - 泛型编程
    详细介绍C++的模板机制,类模板、函数模板、模板特化等方面的内容。

    4.深入c++面向对象

    4.1、从C到C++

    引用和指针:为什么引用很重要

    const关键字:为什么const很重要

    名字空间 (namespace)

    4.2、深入C++对象

    关于C++对象
    内置类型的对象,如int、double对象,自定义类型的对象

    对象类型的定义
    关键字class和struct
    类成员:成员函数和数据成员
    静态数据成员
    成员的访问控制
    对象的size
    关于this指针
    onst成员函数、const究竟修饰什么
    mutable数据成员
    4种特殊成员函数:constructor、destructor、copy constructor、operator=
    对象的构造、初始化列表
    对象的析构
    对象的复制
    什么情况下有必要显式定义4种特殊函数
    C++对象生命周

    4.3、操作符重载

    关于C++中操作符重载机制

    重要操作符重载
    算术运算:+, -, *, /, %, ++, --, ...
    关系运算:>, <, ==, !=
    下标存取:[ ]
    函数调用:(),函数对象
    类型转换、单参数构造函数与隐式转换、阻止隐式转换 -- explicit关键字

    友元与成员

    4.4、面向对象基础 -- 继承

    基类与派生类

    再谈对象的构造与析构

    虚函数、纯虚函数

    派生类的内存布局、虚函数表

    多态、多态类型、如何体现多态

    虚析构、为什么虚析构很重要

    4.5、关于继承更多的话题

    多继承

    虚继承与虚基类

    对基类的访问、public / protected / private继承

    Down cast:static_cast<>和dynamic_cast<>

    运行期类型识别 (RTTI)

    4.6、C++与面向对象设计

    C++语言机制提供了完整的OOP支持

    超越继承

    OOP若干法则和设计模式

    5.C++泛型编程与STL

    5.1、C++ 模板机制

    5.2、STL 概要

    5.3、STL容器
    5.4、STL迭代

    5.5、STL算法

    5.6、预与定义STL数对象

    5.7、STL适配器

    6. C++进阶

    《C++ Primer》


    最新版本:第三版(第四版国外已上架, 国内一些网上书店也在预订中)


    适合有丰富C经验,缺乏C++经验的。不过我个人一直认为此书带着过于强烈的C语言的痕迹,对于C++的学习未必是 好事。


    《The C++ Programming Language》/《C++程序设计语言》


    最新版本:第三版特别版


    简称 TC++PL,有其他语言的丰富经验的。(也有人简称之为“TCPL”,但需与另一本《The C Programmer Language》区分开来)


    《Essential C++》


    《Accelerated C++》


    这两本薄一些,都是不错的选择。《Accelerated C++》本人没有读过,从各方面的评价来看,完全值得推荐。


    以上几本书都有相应的中文版,而且翻译的质量都不错。上面的书未必都需要读一遍,但无论如何,TC++PL是应该阅读的。



    《Effective C++》


    最新版本:第二版(第三版国外已上架,国内一些网上书店也在预订中)


    简称EC。C++程序员必读!很多时候,我们说C++圣经不是指TC++PL,而是这一本。《The Pragmatic Programmer》一书中写到:“一旦你发现自己要参与C++项目的开发,赶快跑(不要走)到书店去购买Scott Mayer的《Effective C++》,可能还要《More Effective C++》”。


    《C++ Coding Standards: 101 Rules, Guidelines, and Best Practices》/《C++ 编程规范》


    个人认为此书应为C++程序员必备的案头书。几乎Effective系列和Exceptional系 列都在这里得到了总结。最新的模版、异常的业界经验都在这里的到了体现。可能的唯一缺陷就是对一个新手而言,关于“为什么这么做”的问题,解释的不够。


    我 的看法是:如果你不理解其中的条款,记忆,并且照做;如果你理解其中的条款,我猜你一定会同意书中的观点。我认为这本书中的内容至少在2009年以前都不 会过时,人们将广为传诵它制定的101条戒律。


    还不知道他的简称,也许“101”会成为一个候选者?


    提到《Effective C++》,那么另外三本书一一浮出水面:


    《More Effective C++》


    《Exceptional C++》


    《More Exceptional C++》。


    新书《Exceptional C++ Style》也是值得一看的好书。


    上 述几本书,一本也不应该放过。


    个人建议上述书籍按顺序阅读。并且,在将来反复阅读这几本书。

    《Thinking in C++》/《C++编程思想》
    这本书及其中文版传言好坏都有,没有认真看过,不做评价,如果确有兴趣,不妨尝试 一下该书。

    以下几本书基本上涉及的都是语言本身,大体上可以按照以下的顺序阅读。

    《C++必知必会》
    如果早一年,这本书将是重量级的,然而它被101和《Exceptional C++ Style》盖过一头。

    《C++ Gotchas: Avoiding Common Problems in Coding and Design》/《C++程序设计陷阱》
    这又是一本我未曾读过,而且广受好评的书。

    《STL 源码剖析》
    这本书我刚到手,就被人"借"走,以至于到现在也没有看过。看过这本书的朋友,可以给一个合适的评价。

    7. C++进阶之数据结构基础

    这是所有编程语言中最应该学习的部分,程序组成的基础之一。

    顺序存储、链式存储、循环链表;

    双向链表、栈(顺序和链式)、队列(顺序和链式);

    栈的应用、树基本概念及遍历、二叉树;

    排序算法、并归算法、选择、插入、快速、希尔。

    以上这些内容你知道吗?

    8. C++进阶之UI界面开发

    掌握QT类库构架,图形界面开发模型;

    掌握QT开发技巧,消息机制,图形处理;

    掌握QT网络编程,UDP,TCP使用方式;

    掌握QT文件处理方式,序列化;

    掌握QT在windows,linux,ios,android不同平台下的移植技术。

    9. C++进阶之Unix/Linux网络服务器

    掌握Unix/Linux平台开发方式;

    熟练使用系统调用;

    熟练Unix/Linux内存管理,进程,线程调度;

    熟悉网络服务器开发方式,熟练编写TCP,UCP网络服务程序;

    掌握同步/异步IO模型在网络编程中的使用方式。

    10.C++进阶之数据库开发

    掌握SQL语言的实用技巧。Oracle,MySQL数据库的使用方式。

    如果你能熟练掌握以上列出的技能,具备解决复杂问题和技术难点的能力,而且你能独立开发一些比较复杂的功能模块,那么很荣幸地告诉你,你已经达到中级水平,薪资过万对你来说简直是小菜一碟。

    11.C++标准参考

    C++ reference

    地址:https://en.cppreference.com/w/

    C++ Coding Standard

    地址:http://www.possibility.com/Cpp/CppCodingStandard.html

    Standard C++

    地址:https://isocpp.org/

    State of C++ Evolution

    地址:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2597.html

    The C++ Resources Network

    地址:http://www.cplusplus.com/

    Draft C++ Standard: Contents

    地址:http://eel.is/c++draft/

    需要资料私聊我

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-20
首先要选则一门重点的学习语言,我在学习编程期间。接触过C,C++。JAVA,Python。也自己做过小的android应用开发。终于还是选择了以C++为重点学习方向,由于我认为这门语言太强大并且足够优雅。以下就说说须要阅读并理解的经典书籍,尽管有非常多我也没有读完。可是或多或少读了一部分,认为确实经典,如今也仍在学习中。
首先必备的入门书籍就是这本《C程序设计语言》,这本书也是公认的C语言圣经。大多数人都是以谭浩强那么书入门,我也看过谭浩强版的那本书,尽管讲的非常清晰易懂,可是感觉并不能算上经典,书中错误的地方也非常多。课后题出的也非常水。所以还是向推荐这本机械工业出版社出版的《C程序设计语言》。

接下来推荐的这本书《C陷阱与缺陷》,尽管被誉为经典。可是我自己认为读完后收获不能算太大,所以说不是必需刻意去学习,只是有多的时间也能够阅读一下,书内容非常少,两到三天就能看完整本书。

既然是C++的学习路线,那么《C++ Primer》这本书肯定是必学不可的,这个就不用不说了。只是书的内容相当多,印象中有800多页,我大概花了一个月左右时间才学完。

学习玩了C++的基础知识,当然就须要进行延伸了。接下来就须要看这本书《Effective C++》,非常经典,相信学习C++的人差点儿都是人手一本,书中讲了非常多C++使用条款,教你怎样更高效地使用C++。

C++的C语言最大的不同当然就是C++支持面向对象的设计方法,所以,学习C++面向对象的语法和使用当然就是必须的,这里推荐经典《深度探索C++对象模型》,里面讲了虚函数的实现原理,函数重载实现原理等非常多重要知识。

个人认为STL是C++的精髓。因此,学习STL是必须的。
推荐经典书籍《STL源代码剖析》。这本书主要学习前面部分内存的分配。容器的实现原理。

学完了这些之后就对C++的基础掌握的非常不错了。接下来就须要学习一下C++体系结构里面另外一些重要的基础知识了。比方操作系统。
这里推荐一本最经典的操作系统书籍《深入理解计算机系统》。
这本书我认为适合重复研读多变。由于非常难做到看一次就掌握书里的全部内容。

操作系统是必须掌握的基础知识。当然另一项必须掌握的基础知识。那就是计算机网络了。
推荐这本书《TCP/IP 具体解释 卷1:协议》。

当然,我们还须要了解一些经常使用的数据结构和算法。推荐《数据结构与算法分析 C语言描写叙述》,事实上说实话用这本书入门难度有点偏大,须要耐心学习。

到这里。我们整个基础体系就学习得几乎相同了。可是C++的应用方向大多都是后台或者server开发,所以我认为必须要学会Linux系统。甚至压根不要在Windows环境下编程。多使用Linux系统。
学习Linux首先须要学习基本操作。入门首选书籍《鸟哥的linux私房菜》。

掌握了基本操作。我们就要学习在Linux环境下进行编程,推荐经典《Unix环境高级编程》。《Unix网络编程》两套系列书籍,加起来总共三本。

以上就是我总结出来的C++学习路线。个人感觉还是非常不错的。应该是适合大多数想要学好C++的人,一起学习一起进步。
第2个回答  2019-07-20
首先是语言本身,语法等等。如果可以推荐看《C++ Primer》。这本书内容相当丰富,也不只是表面的知识。C++方面的GUI库是要学习的。深入了解一种GUI库,另外的就可以举一反三了。数据结构和算法,尤其是一些编程语言的库做的非常好。最开始的时候不需要深入,但基本的算法和数据结构一定要知道。数据库也是要有学习的。之后就是并行,网络编程,设计模式,库的使用还有一些操作系统的知识。具体内容可以参考黑马程序员的C/C++的学习线路图,邮箱一些项目的话,一个项目可能会需要你吧各项的技术综合运用。并且从中还要学一些别的知识,基础是一定要扎实的。如果要想初步的学一些C++的知识的话,如果打算买个一两千的视频的话,我建议你可以看看黑马程序员的视频库。里面内容都是免费的,并且知识点并非很浅显,都是很深入的内容。还可以要到PPT课件、笔记和源码什么的。项目也是老师手把手带着教。本回答被提问者采纳
第3个回答  2022-07-29
读那么多C++的书,学很多C++的算法,其实用处不大。
个人认为应该先从基础算法学起(排序等),再入手搜索、dp等算法。
相似回答