2019 C/C++开发课程大纲
一、C课程
阶段一:C基础入门阶段
此阶段学完之后可以熟练使用C语言完成简单编程问题,理解和使用面向过程思想;可以开发小型命令行工具。
课程内容:
- C语言特点及其运行环境
- C语言和面向对象语言C++、Java的比较
- 介绍基本数据类型、运算符、关系表式
- 条件判断语句
if-else
、If-else if-else
、switch-case
语句 - 循环语句:
while
、do-while
、for
- 自定义的函数声明和定义、以及使用
- 函数的实参和形参的区别,函数的传值调用和传址调用
项目实战:2019年个税计算器
应用场景:
程序第一功能就是完成日常的复杂计算。通过个税计算器项目,让学员学会使用C语言编写程序,解决现实生活问题。真正做到学以致用,在实践中学习。
阶段二:C进阶阶段
此阶段学完之后可以熟练使用C语言高级特性,完成更加复杂的命令行工具。
课程内容:
-
指针的定义,和在内存中扮演的角色
-
宏定义
-
const
关键字与普通变量、指针变量之间的关系 -
指针变量运算关系的实质
-
函数指针存在的意义及其使用
-
内存之:堆内存的使用和释放
-
引入内存中,虚拟内存和内存映射的关系
-
结构体
struct
的定义、和自身各成员的类型 -
结构体成员之间内存对齐的实质和指令对齐的操作
-
结构体数组和指针的应用
-
Linux内核中
offsetof
和container_of
宏 -
结构体位字段的使用意义
-
结构体:柔性数组的演示和实战
-
typedef
关键字的作用及其使用 -
数组指针、指针数组、函数指针、指针函数
-
枚举定义和使用
-
数组的定义和在内存中的分配排布
-
数组的完全初始化、部分初始化和不初始化
-
数组名在C程序里的意义
-
数组名在函数传参过程中代表的含义及其作用
-
位操作运算符:
&
、|
、~
、^
-
main
函数的参数、返回值 -
递归函数的栈实现原理应和应用特点
-
迭代函数的特点和应用
项目实战:学员签到管理系统
应用场景:
管理系统是最常见的软件,所有的管理系统的基本功能大体相似,主要是增加、修改、删除、查找以及统计。真实企业开发中大部分问题可以归结为这几种功能。
基础数据结构和算法
- 数据结构:数组、列表、队列、栈
- 排序算法:冒泡排序、插入排序、选择排序
阶段三:Linux系统编程
此阶段学员学会用C语言访问Linux操作系统接口,实现高级复杂功能。并且通过案例,理解操作系统常用基本概念和原理。
课程内容:
- 进程基础
- 进程通信--管道
- 进程通信--套接字与FIFO
- IPC--消息队列
- IPC--共享内存
- IPC--信号量
- 读写锁
- 多线程编程
- 多线程同步
项目实战:线程池ThreadPool
应用场景:
所有的程序员都要与其程序所处操作系统中的系统调用和程序库打交道。通过操作系统提高程序和软件性能。
阶段四:Linux网络编程
此阶段学完之后可以掌握Linux最基础网络编程方式,实现计算机之间简单的相互通信。
课程内容:
1.Socket编程-TCP
2.Socket编程-UDP
3.I/O复用
项目实战:网盘
应用场景:
计算机改变世界最主要是互联网,Socket是网络通信中最基础的通信方式,通过学习Linux网络编程,了解计算机网络通信的基本原理,学会设计和实现自定义的通信协议。
一、C++课程
阶段一:C++基础入门阶段
此阶段学完之后可以理解和使用面向对象思想;熟练设计和使用类;熟练使用继承、多态、组合、聚合等技术;可以开发小型命令行程序(类似shell、wc、grep等)和图形界面程序(类似记事本、计算器等)。
课程内容:
- C语言到C++语言的过渡
- C++面向对象思想
- C++类的定义与对象创建
- 复制控制
- 操作符重载与转换
- 友元函数与友元类
- 多态实现与原理分析
- C++文件读写操作
- 异常处理
- C++11新增语法简介
项目实战:人工智能五子棋人机对战程序AlphaGobang
应用场景:
游戏开发是C++开发的一个主要方面,因为C++同时具有高开发效率和高执行效率两个特点。通过开发AlphaGobang熟悉C++图形界面开发和游戏逻辑规则开发。
阶段二:STL基础入门阶段
此阶段学完之后可以熟练使用各种常见的容器和算法;熟悉模版的编写和原理;掌握常用容器、迭代器和算法实现原理。
课程内容:
- 模板编程基础
- 顺序容器
- 关联容器
- 迭代器
- 泛型算法入门
- C++11新增语法简介
项目实战:实现小型STL库miniSTL
应用场景:
STL是C++的标准模板库,是模板编程非常经典的案例。无论笔试还是面试都会涉及到它的一些实现问题,所以自己手动实现一部分经典STL是C++学习一个必须的过程。
通过miniSTL,我们还将学习软件开发中的单元测试和接口文档编写,接触真实的软件开发。
阶段三:C++进阶阶段
此阶段学完之后可以熟练掌握企业级常用开发技术以及原理;深入了解C++重载原理和对象模型。
课程内容:
- 重载原理分析
- 动态库静态库的制作与使用
- C++类型转换
- C++对象模型简介
项目实战:多级别多输出可配置日志库TinyLog
应用场景:
企业级C++开发中,直接开发可执行文件的情况约占30%,更多的情况是开发动态库或者静态库。所以,熟练开发动态库和静态库是C++必须掌握的技能。
日志模块是所有大型系统中不可缺少的部分,通过日志开发和使用,初步了解大型系统开发方式和调试方法。
阶段四:STL进阶阶段
此阶段学完之后可以掌握各种高级STL技术;能够使用各种智能指针并理解底层实现原理。
课程内容:
- 空间配置器
- 萃取编程技巧
- 仿函数
- 容器适配器
- 泛型算法进阶
- 智能指针应用与分析
- C++11 lambda表达式
项目实战:智能指针库SmartPtr
应用场景:
C++最复杂和最容易出错的是内存管理,智能指针简化了内存管理方式。本阶段通过实现各种智能指针,熟练掌握C++高级内存管理方式,远离内存泄露风险。
高级数据结构和算法
- 数据结构:树、平衡二叉树、红黑树、哈希表、图
- 排序算法:希尔排序、快速排序、归并排序、堆排序
- 算法思想:分治策略、动态规划、回溯策略、贪婪策略
阶段五:第三方库使用与分析
此阶段学完之后可以熟练搭建第三方库,熟练编写和实施代码单元测试,熟练使用boost和asio开发和发布程序。
课程内容:
- C++测试框架CppTest环境搭建与使用
- boost标准库开发环境搭建与使用
- asio环境搭建与使用
项目实战:高性能HTTP静态服务器
应用场景:
服务器程序开发是C++开发的另一个重要的方向,通过开发HTTP服务器,了解HTTP协议,掌握网络开发的基本流程和方法。
阶段六:区块链
此阶段学完之后可以区块链核心原理、交易流程和应用场景,能够设计和开发区块链程序。
课程内容:
- 区块链核心概念
- 区块链白皮书解读
- 比特币原理分析
- 比特币源码解读
- 以太坊原理分析
- 以太坊源码解读
项目实战:WestOSCoin数字货币
应用场景:
区块链是当前非常热门的技术。在本阶段,学习区块链的相关概念和技术,结合前面学习到所有C++技能,自己手动实现一个数字货币。
问题
- 没有学过计算机专业课程能够学懂C/C++语言吗?
- 英语和数学不好能学好C/C++吗?
- 怎么学好C/C++?