如何学习c++

如何学习c++,第1张

大一学习的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程序员不会用javautil包一样,必读。

《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、>

Cache:Memcached、Redis、

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

balance:Apache、Nginx

GSL

地址:>

Boost文档

地址:>

wxWidgets官网

地址:>

gtkmm

地址:>

CopperSpice

地址:>

Qt

地址:>

地址:>

Plot utils

地址:>

Asio

地址:>

POCO

地址:>

abseil

地址:>

C++开源库汇总列表

地址:>

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

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

已失效

3C++语法讲解

语言基础

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

抽象机制 - 面向对象编程

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

模板 - 泛型编程

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

4深入c++面向对象

41、从C到C++

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

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

名字空间 (namespace)

42、深入C++对象

关于C++对象

内置类型的对象,如int、double对象,自定义类型的对象

对象类型的定义

关键字class和struct

类成员:成员函数和数据成员

静态数据成员

成员的访问控制

对象的size

关于this指针

onst成员函数、const究竟修饰什么

mutable数据成员

4种特殊成员函数:constructor、destructor、copy constructor、operator=

对象的构造、初始化列表

对象的析构

对象的复制

什么情况下有必要显式定义4种特殊函数

C++对象生命周

43、 *** 作符重载

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

重要 *** 作符重载

算术运算:+, -, , /, %, ++, --,

关系运算:>, <, ==, !=

下标存取:[ ]

函数调用:(),函数对象

类型转换、单参数构造函数与隐式转换、阻止隐式转换 -- explicit关键字

友元与成员

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

基类与派生类

再谈对象的构造与析构

虚函数、纯虚函数

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

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

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

45、关于继承更多的话题

多继承

虚继承与虚基类

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

Down cast:static_cast<>和dynamic_cast<>

运行期类型识别 (RTTI)

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

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

超越继承

OOP若干法则和设计模式

5C++泛型编程与STL

51、C++ 模板机制

52、STL 概要

53、STL容器

54、STL迭代

55、STL算法

56、预与定义STL数对象

57、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模型在网络编程中的使用方式。

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

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

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

11C++标准参考

C++ reference

地址:>

C++ Coding Standard

地址:>

Standard C++

地址:>

State of C++ Evolution

地址:>

The C++ Resources Network

地址:>

Draft C++ Standard: Contents

地址:>

需要资料私聊我

其实,评论一个程序员技术的高低,不是看他会多少技术,又懂多少技术。参加过什么大型的项目,也不是看他有没有自己的博客,github有多少star。

而是看他解决问题,定位问题的能力。这个很重要,真的很重要。

技术可以很快上手使用,但是解决问题定位问题的能力不是轻易就行的。特别是在高压下解决问题的能力。

下面是师姐为大家整理的一些建议:

解决问题

1代码的命名要规范。

代码是写给人看的好嘛!代码是写给人看的好嘛!代码是写给人看的好嘛!

headImg是什么鬼?我能以为是banner么,头部的,请原谅我蹩脚的中式英语!avatar这个呢、portrait这个呢?会不会更好些?英语不好就不能用好有道、google翻译么?还有用中文拼音命名的,亲,我们用的是英文做为脚本好么?你要用这样的,用易语言可好?!

疯了!

为什么要用框架?一个很重要的原因是命名规范,目录规范,结构规范,分层规范,有利于团队协作,不要本末倒置!

2架构和规划能力很重要,模块分层,解耦设计什么的,文件目录嵌几层?

这其中又跟命名的能力能搭上点关系。命名都命不好,目录结构怎么建?

url不要做的漂亮些吗?不考虑seo了?

你喜欢addGoods还是喜欢goodsAdd?

请你尊重点我的那些初高中英语语法好么?

3协助能力、可持续能力。

最好的程序代码是脱离其产生者的。

为自己程序处处救火的程序汪并不是一条好汪。

我记得一句话就是:别想着你的代码以后还有机会重构!

每次说,额,这里我后面会改的,会改的,但是可惜,现实情况是根本不会给你这个时间的。

代码写出来,一是要爽了自己,二是也要爽了别人。

4debug的能力、总结能力、学习能力真的很重要,代码写出来真的花的时间不长,但擦屁股的时间比写代码的时间多多了!

出了问题不记录,写个博文都好啊,我可没那么强大的记忆力,所以最讨厌考记忆力。

5不要一贯的使用各种算法,秀算法的你们够了,要写去写底层,应用的场景比较多。

应用层面的程序,算法的应用不是特别多,大部分都是业务代码。以这个作为评价标准的,真心然并卵。

1积极大胆地谷歌。你得知道如何有效地组织搜索关键字,查阅别人写的代码,然后合理地用在代码里,从而解决问题。

2拥抱变化,坚持不懈。老手程序员在接触新技术时,能欣然接受像个初学者一样处处受挫,并总能在完成工作的同时自学成才。

3承认细节的重要性。例如变量和函数的命名、CSS 属性的命名、该用哈希还是用数组,以及其他看起来微不足道,但可能对项目有深远影响的事情。

4承认大多数的“重要决定”其实并没有那么重要。一般的开发者经常在技术选型等“重大问题”上陷入唇q舌战,而程序员老鸟们会避免浪费时间在骂战中。这一点上,他们就像禅宗大师一样(zen-like)。

5选择合适的工具解决问题。网上有无数的开源库、工具和框架,让人眼花缭乱。而老手们清楚地知道针对怎样的问题,应该用什么样的工具。

6明白代码「不值钱」(该删就删)。你必须习惯于删掉几百行代码来重写程序的某一部分,毫不留情。

7在评估技术的时候要全面。例如,我一直在鼓吹Elixir。它语法优美,社区完善,有很大的潜力。但Elixir诞生的时间太短,所以如果要构建复杂的功能,可能会难以找到能帮你提高效率的开源工具。因此,在评估要不要选择使用一项技术时,你得把所有这些因素都考虑在内。

8学会说“我不知道”。没有比拒绝承认自己不知道更能浪费一个开发者的时间了。

9 仔细分析错误信息里的线索。传统教育告诉我们:失败是坏事。报错信息这种东西也经常被跟失败联系起来,然而优秀程序员明白,这些错误消息里其实隐藏着能将你指向最终正确解决方案的线索。

10 了解过早优化和必要的“炫技式”优化的区别。老手们清楚在什么时候需要写一些看上去没那么好懂,但会让程序运行更快的代码。

11每个人都会犯错,为自己的过失负责。而尤其在团队里,把责任推来推去没有任何意义,因为错误的发生往往不只是一方的因素造成的。

12 成为你所用的开发工具的重度用户。如果长期在某个开发环境下有相当比例的开发工作,那你应该去掌握使用它的细节。

13 学会用Vim(至少会一点)。 你至少应该在这个编辑器里学会勉强地移动和翻页。

14 不要接陌生技术领域的私活。个人做自由职业项目,其中很大一部分挑战就是评估项目时间。不要规划自己未知领域的事情,那会让你处于想当尴尬的境地。

15 不要数你干活花了几个小时。技术大牛会把时间花在有深度的工作上,并且他们清楚花了多少时间完全不重要。

16 学会坦然接受批评。当你的代码因为各种原因四分五裂时,你需要培养用理性和逻辑的方式来应对(而不是情绪化处理)。

17 同有更多经验的人结对编程。没有比这个更高效的编程学习方式了。

18 一定要先自己做一遍代码审查。当你在GitHub上发起一个pull request之前,先把代码当成别人写的,自己先审查一遍。

19 认识到做自由职业的难点不是写代码,而是其余的所有事情。销售、推广、客户支持,质量保证以及产品管理,所有这些都会花费大量时间。

20 发现并解决更大的问题。优秀的程序员不拘泥于眼前的问题,而是清楚如何用更长远的方式彻底的解决这一类问题。

以上就是关于如何学习c++全部的内容,包括:如何学习c++、如何看出一个程序员的技术能力和水平、好程序员:技术分享 有哪些新手程序员不知道的小技巧等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9738604.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存