欢迎加入群聊:C++ 编程2群 711049242
我的微信:454052811 欢迎加我微信一起学习交流
1、概述
本文是想对初入坑使用C++开发的朋友,介绍下对C++的理解,同时介绍对如何C++进阶修炼学习路线的理解。
C++ 是什么
C++是一门久负盛名的历史悠久的计算机编程语言。
C++ 从1980年一直不断和发展迭代到现在依然充满活力,它有40岁了。
举不胜举的项目由c++来实现。
虽然很多领域有新的语言出现,试图代替C++,但作为工程师,C++依然值得我们花时间去学习。
C++ 是怎么样的语言?
我们知道近代开始,中华文明势衰,影响力逐渐从东北亚,东南亚,中南半岛,北方世界收缩到本土,
当然现在中华文明在复兴,影响力也开始在全球增长,今天我们不了这个说整体。
我们知道英国其实全称:大不列颠及北爱尔兰联合王国。其实是由不列颠群岛中的英格兰、威尔士和苏格兰以及爱尔兰岛东北部的北爱尔兰组成的联合王国。
C++其实是由传统的C,对面对象C++编程,泛型编程C++,STL 容器算法等组成的联合王国。
每一种语言内有自己不同的准则和特点。
PS:
编程语言是为业务服务的。
再精通编程语言,但不能实现具体的业务需求都不是真的技术好。
应用领域
服务器端开发:很多游戏或者互联网公司的后台服务器程序都是基于C++开发的,而且大部分是linux操作系统
游戏:目前很多游戏客户端都是基于C++开发的,除了一些网页游戏可能不是,这个领域需要学习的东西就比较多,比如计算机图形、多媒体处理。
虚拟现实:这个领域一直在发展,目前VR眼镜比较火,需要大量基于这些的C++开发。
数字图像处理:像OpenCV的视觉识别等等。
科学计算 在科学计算领域,FORTRAN是使用最多的语言之一。但是近年来,C++凭借先进的数值计算库、泛型编程等优势在这一领域也应用颇多。
网络软件 C++拥有很多成熟的用于网络通信的库,其中最具有代表性的是跨平台的、重量级的ACE库,该库可以说是C++语言最重要的成果之一,在许多重要的企业、部门甚至是军方都有应用。比如GOOGLE的chrome浏览器,就是使用C++开发。
分布式应用
操作系统 在该领域,C语言是主要使用的编程语言。但是C++凭借其对C的兼容性,面向对象性质也开始在该领域崭露头角。
设备驱动程序
移动(手持)设备
嵌入式系统。
2、学习路线
第一阶段
目标
掌握c/c++ 基本语法
标准库的简单使用
c++ 面向对象编程基本语法和概念
泛型编程的基本知识
数组、指针、内存操作
预编译 指令用法
关键字static是啥?
引用的用法、
构造函数、析构函数、拷贝构造、
new、delete 和 malloc、free 的区别、
访问限定符 public、private、protected、
推荐书目
《C++ Primer 第五版》
C 程序设计语言、C 缺陷与陷阱、C 专家编程、C 和指针。
第二阶段
目标
良好的编码风格
代码像房子一样,放的久了也是风化的,需要不断维护。好的编程风格,使房子的材料更优质,架构更合理。
深入理解常见的基本概念
深拷贝和浅拷贝、友元函数、内联函数、继承、虚继承、钻石继承问题、
同名覆盖问题、虚函数表、虚指针、虚函数、纯虚函数、
接口、多态、重写、重载、函数重载、运算符重载、流类库和文件。
STL 容器和算法库的熟练适用
标准库接口的熟练适用
数据结构 :线性表、链表、堆栈、队列、树((BinTree、BST、AVL、RBtree、B+、B-)、图等等。
(建议:先从简单入手+视频+原理+原理+实现+应用)
推荐书目
Effective C++ 第三版
More Effective C++
Effective STL Meyers
Google C++ Code Standard
再看《C++ Primer 第五版》
大话数据结构、数据结构(清华大学严蔚敏)、数据结构与算法分析(机械工业版)。
重构
第三阶段
目标
熟悉设计模式
泛型编程
理解对象的内部实现
熟悉常用外部库 如网络库,json库,等等。
函数模板、类模板,
C++ 中对于异常的处理,对于继承和多态底层的理解,对于 virtual 底层的理解等。
在C++ 中智能指针的掌握与理解,其核心是理解并且剖析过相应的源码, 这三个是最核心的智能指针。 scoped_ptr。
STL 源码:对于 STL 中的容器剖析,常见容器有 list、vector、stack、queue、map 等,考察自动扩容的原理、map 的底层实现(RBtree),源码是必须手动至少剖析一遍的。
对于迭代器、空间配置器的理解,比如:一级空间配置器、二级空间配置器的运用场合分别是什么?一二级空间配置器的本质是什么,如何用内存池去管理?所存在的问题又有哪些,源码又是如何实现的等等,这些问题都需要去思考。
设计模式:
设计模式基本原则、依赖倒置和迪米特法则、
单例模式_懒汉式和饿汉式、懒汉式遇上多线程问题、
简单工厂模式、模板、命令、责任链、策略、中介、观察者、访问者、状态、解释器、迭代式模式等等。
主要是学习设计模式的思想、几种常见模式是必须写代码实现的,其他设计模式理解思想,。
推荐书目
泛型编程与STL。
STL源码剖析 (容器、迭代器、算法、函数对象乃至分配器的实现技巧)
C++Templates
C++设计新思维 Andrei Alexandrescu
设计模式
The Design and Evolution of C++
C++ 沉思录
深度探索C++对象模型(专注C++底层机制 优化代码 侯捷译)【必读】
xceptional C++:47个C++工程难题、编程问题和解决方案【选读】
More Exceptional C++:40个新的工程难题、编程疑问及解决方法【选读】C++程序设计语言(第1-3部分)(原书第4版) 【字典查阅】C++程序设计语言(第4部分:标准库)(原书第4版)【字典查阅】C++标准库(第2版) (Nicolai M.Josuttis) 【字典查阅】
第四阶段
我猜的
随心所欲不逾矩。
这阶段我就不乱说了。
你们来吧
3、C++世界的现有轮子
常用库
在实际项目中,通常有些功能不需要重复造轮子,已经有十分完善的代码库可被拿来直接使用,所以我们要善于利用已有的资源。
日志库
ini库
json库
数据库库
网络库
业务特定的库
linux平台(unix)
目标
Linux系统编程、网络编程:
进程环境、进程控制、信号和信号处理、多进程。
进程之间通信:文件、管道、FIFO管道、消息队列、信号量、共享内存、socket编程。
线程、多线程、线程同步使用互斥量、线程同步使用读写锁。条件变量、信号量。
文件I/O文件管理、流I/O。
特别要理解这几个进程之间通信的原理、特征优缺点。
推荐图书
UNIX环境高级编程
UNIX网络编程
跨平台Qt编程
目标
使用Qt实现跨平台UI开发
推荐图书
Qt Creator 快速入门
Qt高级编程
C++ 这条语言之路,有可能看上去坎坷,但爬得高,走得远,沿途的风景漂亮,愿伴你同行!
希望三连 点赞,关注,在看~~