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 首先,可以找一本稍微薄一点的书入门,经典的有《Essential C++》。掌握基本的语法和概念,对C++有一个初步的认识。
然后,就可以看《C++ Primer》了。这本书强烈推荐。这本书有点厚,需要耐心。一定要认真读完,并且尽量实现一些例子,自己动手去写,去debug。这本书吃透C++的基础基本掌握了。编写常用的程序不是问题。
接下来可以进阶了。面向对象程序设计,侯捷翻译的《深度探索C++对象模型》必读,这本书讲的是底层编译器C++面向对象 的实现原理,继承、虚函数等等的机制。这本书比较有难度,个人认为需要至少读2遍。然后是《Effective C++》,讲了55条准则,提高C++编程质量的。如果有一定的C++开发经验,读起来更有感触。关于泛型编程,可以先读《C++标准程序库》,对STL有个基本认识,学会使用,然后可以去研究stl源码,侯捷的《STL源码剖析》值得推荐。源码面前,了无秘密。阅读经典源码往往能获得很大的收获。
如果有精力,可以再学学boost库,号称准标准。
参考技术B C++技术探讨
奔向C++
如何 学习C++
我们在学习C++的时候,有很多人不知怎样学习它、怎样学好它,也不知应先从那里开始学起,关于C++的入门其实很简单,你只要一步步按照你手中的那本C++教材来学就可以了,也许你把C++学的很烂,这时你千万不要认为我好像很精通C++了。

我个人认为要想学习C++,最好直接学习它,不要先学习C语言,然后在学习C++,虽然C++是从C语言上发展过来的,但如果你对C语言了解的越多,在你写C++程序的时候,你很难摆脱C的风格,既使你是一位很有经验的程序员,如果你对C很了解,在学习C++的时候,尽量使用C++的风格,我这样并不是说C不好,关键我们现在要了解的是C++而不是C。

现在让我们深入学习C++吧!C++的难学,不仅在它那广博的语法、语法背后的语义、语义背后的深层思维、深层思维背后的对像模型;C++的难 学,还在与它提供了四种不同的编程思维模型。当我们找来一本C++教材时,当我们翻开第一页时,这时我们已进入了C++的世界,我们现在开始探索,开始在追求新技术的旅程中!

想学好C++,熟练掌握它的语法是不可少的,当你掌握了C++的语法时,那么我要恭喜你,你已正正进入了C++的世界,要想学好C++,你只有努力的学习,经常的思考多多的实践,这时你会问了,我应该还要学习什么呢? C++的语法我都已掌握了啊!我是不是可以学习Windows编程了呢?不要急,你是已掌握了C++的语法,但你能用它写出高效率的程序吗?你已对C++ 所有运行机制都了解吗?是的,单单了解C++语法是不够的,接下来你的任务很多,要学习如何高效地使用C++语言。现在我就教你怎样的学好它,怎样的高效使用它。

我们还是先从C++的语法开始说起吧!这里我只做一个简单的概述,当我们学习C++的时候,你先要了解它的编程模式,其中包括面向对像编程、通用编程和传统的过程化编程。当你在学习一个C++语法时,如果你一时感到很难理解,不妨你先跳过这一段,继续向后学习,当你看完你所学习C++的那本教材时,你在回过头来学习C++,你会发现其实它就是那么回事,有很多人在学习C++时,刚学习到了一半,突然感到好像以前学习的语法忘了许多,他们会把书又翻回去,找回那忘掉的语法,如果你在学习C++时也有这样的情况,你大可不必那么担心,你现在的任务是继续你的学习,不要去管那一时不记得的语法,如果你现在去重新学习那一时忘掉的C++,恩,不错,这看起来你好像对那语法已深深的牢记在心,当你的C++在学习到这里时,你能保证前面的语法不在遗忘吗?这时的你在学习新的C++语法时,但心会忘掉前面刚刚找回的C++,你说这时你能学好新的C++语法吗?你会一边学习新的,一边重复旧的,这样一来,那就糟了,这时的你会很容易搞乱新旧C++语法,新的记不住,旧的又被新的语法搞乱了,这时的你不得不从头再来(毕竟你是初学者)。

对于初学者来说,C++的广博语法是件头疼的事,学会了这个却忘了那个,就像我上面提到的那样,这时的你应该继续的学习C++新知识,等看完你手中的那本C++教材时,你在来学习忘掉的语法,这时你会感觉好像C++很简单,没有我们开始说的那么难学啊!你会觉得我开始说C++难学是用来吓唬人的。我说C++难学当然不是用来吓唬人的,这时的你对C++语法已非常熟悉了,这时你千万不要认为对C++已很精通,就像我开头所说的那样,虽然现在你已摆脱了初学着的称呼,但你也不能算是位精通人士啊!你只掌握了C++的大概,接下来的你就要深入学习拉!本回答被提问者采纳
参考技术C 首先,可以找一本稍微薄一点的书入门,经典的有《Essential C++》。掌握基本的语法和概念,对C++有一个初步的认识。
然后,就可以看《C++ Primer》了。这本书强烈推荐。这本书有点厚,需要耐心。一定要认真读完,并且尽量实现一些例子,自己动手去写,去debug。这本书吃透C++的基础基本掌握了。编写常用的程序不是问题。
接下来可以进阶了。面向对象程序设计,侯捷翻译的《深度探索C++对象模型》必读,这本书讲的是底层编译器C++面向对象 的实现原理,继承、虚函数等等的机制。这本书比较有难度,个人认为需要至少读2遍。然后是《Effective C++》,讲了55条准则,提高C++编程质量的。如果有一定的C++开发经验,读起来更有感触。关于泛型编程,可以先读《C++标准程序库》,对STL有个基本认识,学会使用,然后可以去研究stl源码,侯捷的《STL源码剖析》值得推荐。源码面前,了无秘密。阅读经典源码往往能获得很大的收获。
如果有精力,可以再学学boost库,号称准标准。
找个专门的地学学,有老师教会比较好i tj o b
参考技术D 楼上说的非常不错 虽然不知道是自己说的 还是别人说的
学习C++不能一蹴而就 你只能从基础开始学 先学习基本的语法和框架 各种符号 数据类型 运算符 等 一般C++的书结构都很明朗 从简单到复杂 要耐心学习 程序要多看多写 C++Primer比较适合非认真钻研 是一本不错的书 但是一般不优先开始从C++Primer看起 想学的快就要付出比其它人多的心力 还要看自己的接受能力和领悟能力了

信息学奥赛怎么考?一文告诉你为什么要学C++


乔布斯曾在一次访谈中提出:“我觉得每个人都应该学习一门编程语言。就像学法律一样学法律并不一定要为了做律师,但法律教你一种思考方式。学习编程也一样,我把计算机科学看成是教育,每个人都应该花至少1年时间学习编程。”


近年来,编程在国内外都很火爆,创客教育及STEAM已成为素质教育的核心,3D打印、机器人等新技术也走进了中小学。在我国浙江省,更是把编程纳入信息技术高考。


毕竟,作为一门面向未来人工智能时代的世界性语言,编程是培养人才的关键。


作为五大联赛之一的NOI信息学奥赛的宗旨在于通过竞赛活动培养大批计算机爱好者,选拔优秀的计算机后备人才。

信息学奥赛重要性不言而喻,而要学好则必须学会使用程序语言。具体到信奥使用的重要工具——C++语言——作为编程中的明星语言,C++是信息奥赛的基础语言。

信息学奥赛怎么考?一文告诉你为什么要学C++



C++:灵活且重要的参赛语言

信息学奥赛怎么考?一文告诉你为什么要学C++
信息学奥赛怎么考?一文告诉你为什么要学C++

1

C++语言是什么

 


1、从C到C++
计算机诞生初期,用机器语言或汇编语言编写程序,第一种高级语言FORTRAN诞生于1954年。 BASIC语言 (1964)是由FORTRAN语言的简化而成的是为初学者设计的小型高级语言, C语言 是1972年由美国贝尔实验室的 D.M.Ritchie 研制成功的,它是为计算机专业人员设计的
大多数系统软件和许多应用软件都是用C语言编写的。随着软件规模的增大,用C语言编写程序渐渐吃力了,于是便创造出了C++语言。
2、C++的特点
C++是由 AT&T Bell实验室 于20世纪80年代初在C语言的基础上成功开发出来的。C++是C语言的继承, 它保留了C语言原有的所有优点, 并增加了面向对象的机制。
C++是由C语言发展而来的,与C兼容,用C语言写的程序基本上可以不加修改地用于C++。从C++的名字可以看出它是C的超集,C++既可用于面向过程的程序设计,又可用于面向对象的程序设计,是一种功能强大的混合型程序设计语言。
C++语言灵活,运算符的数据结构丰富、具有结构化控制语句、程序执行效率高, 被认为是一种中级语言,同时具有高级语言与汇编语言的优点。

信息学奥赛怎么考?一文告诉你为什么要学C++


2

信奥未来只考C++

 


根据国际信息学奥林匹克竞赛(IOI)的相关最新决议,CCF做出以下决定:
1、2020年开始,除NOIP以外的NOI系列其他赛事(包括冬令营、CTSC、APIO、NOI)将不再支持Pascal语言和C语言;
2、从2022年开始,NOIP竞赛也将不再支持Pascal语言。
即从NOIP2022开始,NOI系列的所有赛事将全部取消Pascal语言。 在无新增程序设计语言的情况下, NOI系列赛事自2022开始将仅支持C++语言。
信息学奥赛怎么考?一文告诉你为什么要学C++


C++语言为何重要?

信息学奥赛怎么考?一文告诉你为什么要学C++
信息学奥赛怎么考?一文告诉你为什么要学C++


1

C++语言更适合竞赛

 

首先,c++语言 完全兼容c语言。
其次,c++语言可以使用标准模板库,极大 方便程序设计, 如竞赛中经常用到的排序,如果用c语言考生需自己编写排序函数,但c++提供标准的排序算法,其时间复杂度为O(NlogN),这已相当高效了。
再次,竞赛中使用C++语言,并不需要选手学完C++语言的全部,一些较难的内容并不学习, 适合青少年学生。
其实就是 c语言+标准模板库, 所以在信息学竞赛学习,选用C++也是必然趋势。现在绝大多数学生也会选择c++作为信息学程序语言。

2

C++语言有助于培养计算思维

 

C++可以培养孩子的思维能力,锻炼创新思维。
C++课程中,需要学习组合数学、图论、基本算法、数据结构、搜索算法及数学建模等知识,可以加深学生对数学的理解,提升孩子的逻辑思维,而这些又能帮助其更好地学习其他学科。

信息学奥赛怎么考?一文告诉你为什么要学C++


新手如何入门学习C++

信息学奥赛怎么考?一文告诉你为什么要学C++
信息学奥赛怎么考?一文告诉你为什么要学C++


不可否认的是,C++是一门难学的编程语言。
怎样才能让孩子学懂C++、学好C++?

太戈·快快编程于2017年由美国哥伦比亚大学和斯坦福大学的专家创立,是一家拥有独家竞赛得奖配方的青少年C++编程教育机构。

·     课程基于独家研发的高效课程体系和在线训练系统

·     教学团队曾包揽国际和全国最高级别信息学竞赛冠军


市面上的编程课有很多,这个项目有什么优势呢?总结有以下几点:

  • 创造“零基础学3个月,获得信奥赛奖牌”的记录:选拔培养优秀的编程苗子,奔着比赛的方向去。
  • 名校师资:斯坦福、MIT、复旦、清华等名校毕业生亲自授课,教学质量有保证。

招生对象

3~8年级学生

0基础课程内容

☑ 能用自然语言描述解决简单问题的方法和步骤;
☑ 能用顺序、分支、循环语句实现程序;
☑ 初步理解算法的意义;
☑ 在同龄学生中具备计算思维和编程能力。



报名体验

信息学奥赛怎么考?一文告诉你为什么要学C++
信息学奥赛怎么考?一文告诉你为什么要学C++


太戈·快快编程给对信奥赛感兴趣的同学

准备了500个免费体验名额

扫码即可报名

信息学奥赛怎么考?一文告诉你为什么要学C++


信息学奥赛怎么考?一文告诉你为什么要学C++

免责声明:本文内容及服务由太戈编程提供,与“孩子教育”的立场无关

以上是关于C++应该怎么学?的主要内容,如果未能解决你的问题,请参考以下文章

如何系统地学习 C++ 语言从开发环境到C++进阶,应该怎么办?

零基础想学习C++,应该怎么开始入手?

零基础想学习C++,应该怎么开始入手?

C++中,一个类模板的内部又嵌套了一个类模板,语法应该是怎么样的

C++ 的 set 集合应该怎么用,求简单的初始化,添加值,和遍历!!!

QT怎么入门