如何学习c++

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何学习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,iosandroid不同平台下的移植技术。

    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/

    需要资料私聊我

参考技术A 学习C++的话,看你目前的水平,我说一下从完全不懂到最后高手的专家推荐路线吧:
1. 《C++ Primer》Lippman写的,经典中的经典,C++入门的宝典,读完这本书,基本语法过关,部分技巧掌握。
2.《The C++ programming language》C++的创始人Bjarne Stroustrup写的,这本书的权威性毋庸置疑,而且这里面讲到了一些比较底层的东西,如果你看过了《C++ Primer》的话,这本书可以跳着看,懂的就跳过。
3.《Effective C++》 Scott Meyers顶级大师用活泼幽默的语言写的书,这本书中讲到了许多应该注意的问题,这是十分值得购买的书。(Lippman曾把程序员分为看过effective c++的和没看过的两类。由此可见此书的重要性)
4.《More Effective C++》上书的姊妹篇,这本书里讲到了许多关键性的技术,对提高程序的效率是非常有帮助的。
5.《Advanced C++》这是一本神奇的书,里面讲到了许多连C++设计者都没想到的妙法,解决了许多看似不可能解决的问题。Scott Meyers曾隆重推荐过的书。
6.《Inside the C++ Objects Model》又是Lippman的大作!这本书讲到了他在开发第一个C++编译器时的许多想法,彻底解析了C++底层机制是如何实现对象模型的,看过这本书,你对C++的了解会有质的飞跃!从这刻起,你有权力说你是一个C++程序员了!

光学C++语言基本上看完上述的书就是高手了,其他经验要在实践中累积,你在看这些书的同时就应该多做一些小程序,小项目,提高水平的速度是飞快的.这是我个人的经验。另外,你学了C++还要开发程序,开发软件,无疑要使用MFC之类的东西
《API Programming》和《MFC Windows 程序设计》两书值得一看。这两本书能迅速提高你的实践水平。

最后,不要被这么多书吓倒,用起心来,很快能搞定!祝你早日成功!!本回答被提问者和网友采纳
参考技术B 建议一定要把C语言基础打牢,如果C没学好,学C++会很受挫,打击自信心,可以循序渐进! 参考技术C 楼上说的挺好 顶一个,另外还有就是 别被垃圾书 给误导了 呵呵 参考技术D 多看多做吧

原创 | 如何系统学习C++?

            C++ 真的是一门备受争议的语言,关于 C++ 的书籍也是浩瀚如海。

那几本 C++ 的四书五经想必大家也早已在各路学习路线中见过了。

不过没关系,今天你依然会看见它们的身影哈哈哈。

C++ 最大的缺点就是语法复杂,而且难学难精。

学习 C 语言也许一本 K&R 的《C程序设计语言》就够了,但是在 C++ 世界里,找不到这样一本书。

这是一个爱速成的年代,大多数人很难耐得住寂寞花很长时间去学习一门语言,所以《21天学通C++》的销量还蛮不错的。

但是很遗憾,别说 21 天,就是一两年也很难学通 C++ 。

学好过程,一定离不开读大量的书籍甚至标准库文档,

在这里,我也把 C++ 学习初略的分为几个层次:

一、入门

如果你之前没有 C 或者其它语言的基础,我建议看看网上的 C++ 入门教程,比如菜鸟教程、C 语言中文网上面。

这个过程你需要了解并且掌握所有编程语言中共同的、最基本的那些概念:

变量、常量、类型、循环、判断、数组、字符串、对象、输入输出等

然后还有 C++ 中一些特有的东西,比如命名空间 namespace、引用、模板等。

以及如何使用一些 STL 中的类库,比如 string、vector、find 之类的东西。

然后就是辅以大量的练习。

就那种 C++ 教程的课后练习题就足够了,类似水仙花数、四则运算计算器之类的东西。

如果对这些没什么兴趣,可以试试这个网站,

https://www.codewars.com/kata/search/cpp

有点像 LeetCode 刷算法题一样,这里针对每一个语法知识点都有一系列的练习题可供选择。

而且不仅包含 C++,其它几乎所有语言都可以在这里进行练习:

应该两三周就能过完菜鸟教程这种级别的指引吧。

到这里,你对 C++ 包含了哪些知识点大概有了一个整体的印象。

并且能够写上百行左右的程序,但是还是很难写出一个优秀的类。

接下来需要进行全面和深入的学习,算是真正的入门:

  • 《Accelerated C++》(美国斯坦福大学的经典教材)

  • 《C++ Primer》(大而全)

  • 《The C++ Programming Language》(C++之父 Bjarne Stroustrup 所著)

这三本,其实各有优缺点,第一本优点是简短,仅仅两三百页,只有最为核心和主干的知识点。

而后两本则都是大而全,尤其是《The C++ Programming Language》。

这两本区别在于,一个是 C++ 大师所著,一本是 C++ 之父所著。

网上有人说 《C++Primer》是目前市面上唯一一本真正的从入门到精通的书,适合初学者;

《C++ Programming language》 是C++专家自学指南,顾名思义,适合有较深厚 C++ 功底的读者。

所以小北推荐的顺序是:

《Accelerated C++》->《C++ Primer》->《The C++ Programming Language》

对于这种上前页大部头我推荐的阅读方式是,以主题为划分,比如 C++ Primer 就明确的分为了:

  • C++ 基础
  • C++ 标准库
  • 类设计者的工具
  • 高级主题

如果有一定的基础的话,可以看着目录,看一些自己感兴趣的章节,完全没有必要从第一页开始挨着挨着读。

入门结束你应该掌握以下内容:

  • 基础语言

  • 类与面向对象

  • 输入输出

  • 字符串处理(类库和正则表达式)

  • 容器类库

  • 泛型算法

看着只有几个关键字,实际上每个展开都有很多内容需要学习。

学习过程中把后面的每一个练习题都自己敲一遍,自己多思考对比一下。

多用代码去验证自己的想法,尤其是指针、引用、构造、析构这些地方。

学习 C++ 以及日常开发一定要记得这几个网站,可以随时查阅一些语法的用法和标准库:

  • cppreference
  • cplusplus
  • isocpp

二、提高

看完 C++ Primer 这类书,写出来的代码在效率、规范上还是没那么 “C++”。

甚至会有内存方面的 Bug。

比如返回函数内局部变量的引用,经常 pass-by-value 而非 pass-by-reference-to-const

由于 C++ 是一门系统级编程的语言,你需要掌握一些 OS 方面的知识才能更好的使用。

尤其是内存编译链接这一块,比如堆、栈、静态链接、动态链接等等。

还有一些 C++ 里比较特殊的概念,比如 RAII 的资源管理方式、值语义与生命期、引用、右值引用等等。

这些东西似乎没有一本很系统的书籍可以帮助你掌握,只能在不同的书里吸收完善。

这一块,我也在路上。

这里给出一些在这些方面有帮助的书籍:

  • 《Effective C++》

一言概括,就是帮助你快速习得一些 C++ 里正确的姿势。

否则你可能需要用几万行代码的经验才能慢慢悟出来。

  • 《程序员自我修养》& 《CSAPP》

帮助你掌握一些系统级编程的知识。如内存管理、堆栈、链接这类在 C、C++ 中极其重要的概念。

  • 《Linux多线程服务端编程》

这本书严格来说不是纯讲 C++ 的。

但是里面会有一些章节,关于 C++ 多线程编程、锁、线程安全、C++ 一些工程实践经验还不错。

  • 《Google C++ Style Guide》

谷歌的 C++ 代码规范,写代码是一件专业的事,把代码写得漂亮、专业也是一项能力。

谷歌的代码规范算是 C++ 领域一个标杆了。

鹅厂很多代码规范也是基于谷歌的代码规范做了一些适应性的改进。

在学习编程之初就掌握良好的编码规范大有裨益。

三、进阶

上面提到的这些书重点在于如何使用、用好 C++ 这一个范畴。

而进阶,我认为则是研究语言一些 case 的具体实现,深刻的思考语言设计和演进本身。

这里分为三个部分:

Part1. STL 源码

侯捷老师说:源码之下,了无秘密。

为了更好的使用 STL,一个方法就是阅读 STL 源码 或者掌握部分实现:

《STL源码剖析》

这本书讲解了 STL 五大组件的底层实现。

包括内存管理、各类容器的数据结构实现、算法的实现等。

建议列为必读,可以帮助深入理解 STL 底层。

其中也有很多面试常考的知识点,如内存池、traits 技法、vector 动态扩容、set、map 等实现原理等。

Part2. 对象模型

《深度探索C++对象模型》

这本书其实就是围绕一个点:C++ 里的对象是在内存中是如何组织的。

这是每个章节内容:

  • 关于对象
  • 构造函数语意学
  • Data语意学
  • Function语意学
  • 构造、解构、拷贝语意学
  • 执行期语意学

我第一次看见这本书就被深深的吸引了,当时在学校,每天看八九个小时,花了大概一周刷完了。

看完这本书感觉自己对于 C++ 的底层实现机制有了更深的理解。

比如多重继承、菱形继承、虚函数底层的实现机制等等。

当然了,也有人会认为对象如何在底层实现属于 C++ 编译器实现细节,而非语言标准,不应该以实现细节倒推标准。

诚然如此,掌握实现细节还是会对你理解 C++ 有促进作用。

Part3. 语言设计与演化

这里重点是思考 C++ 语言很多语法的设计和演进方向,可以看看 C++ 之父 Bjarne Stroustrup's FAQ、《C++设计与演化》。

设计与演化这本书重点在于通过 C++ 之父去窥见 C++ 的前世今生。

看完这本书的意义,功利一点来说,或许对于提高 C++ 编程能力没有太多帮助的,不像 Effective 是立竿见影的效果。

但是,对于加深对 C++ 的理解很有帮助。

想要更好的使用 C++ 构建好的、高效的系统,对语言本身的深入理解是先决条件。

另一方面,书中提到了很多语言设计的思想、哲学,这些,相信在学习其他编程语言的时候也是有帮助的。

四、关于书单

这篇文章中对于书籍,我的一个原则就是能省则省,因为 C++ 相关的优秀书籍实在太多了,我只想挑出每个阶段最有用的的书。

书不在多,贵在精。

看书也是一样的,我推荐书不一定都需要去看完,深入细致的阅读完一本技术书比走马观花似的阅读 N 本更有效。

当然了,后面我也会推出一份分门别类整理后的 C++ 书单供大家索引。

四、关于视频

对于初学者来说看书也许确实很难 get 到那个点,就像我大一看 C 语言的教材里说文件分为文本流文件和二进制流文件,当时我愣是理解不了。

很多对于会的人是常识的东西,对于初学者就是无法理解、很难的概念。

那也许通过别人讲授、视频的方式会更容易入门一点,这里推荐浙大翁凯的 C++ 视频。

翁凯老师无论是 C、C++、Java 的视频都讲得非常深入浅出,只能说水平越是高的人讲的课越容易明白。

https://study.163.com/course/introduction/271005.htm

另外还要推荐侯捷老师的一些列课程:

我当时看见这些标题:《内存管理》、《C++11》、《STL源码分析》......

简直如获至宝一样,一个寒假就把这些视频全看完了,对于 C++ 和内存管理方面理解提高了很多。

真的非常感谢 B 站、感谢这些讲师和分享者,甚至要感谢互联网时代!

他们让知识的传播变得更加的便捷,降低了后来者的学习门槛,当然啦也变相加重了内卷化hahah(逃

还有一个我最近发现的一个视频,是一个国外 C++ 游戏引擎开发工程师录制的一套偏向 talk 类型的教程,比较通俗易懂和深入浅出,

推荐一下:

https://www.bilibili.com/video/BV1Ay4y1i7Z6

END

送给学习 C++ 的同学一段翁凯老师讲课说的话:

学 C++ (计算机)一定要有一个非常强大的心理状态

什么呢

C++ (计算机)的所有东西都是人做出来的,别人能想出来的我也一定想得出来,在 C++(计算机)里头没有任何黑魔法,所有的东西只不过是我现在不知道而已

总有一天我会把它里面的细节搞明白的!

好啦,以上就是今天的分享啦,觉得不错的话,不要吝啬你的点赞和在看哟~


以上是关于如何学习c++的主要内容,如果未能解决你的问题,请参考以下文章

如何系统学习C++?

这些年,我是如何学习C++的?

如何学习c++

如何学习C++编程

如何快速学习C++?

如何通过编写编辑器来学习 C++? [关闭]