两个月时间是根本不可能掌握C++的,别再天真了。
就在之前Springboard平台选出了最容易学习和最难学的编程语言Top 5,其中C++是第一难学的语言。
C++究竟难在哪里???
C++是C的扩展(而C被列入了容易学习的语言),C++是一种通用编程语言,据说谷歌Chromium浏览器、微软一些应用程序,甚至摩根士丹利的金融建模都是用C++完成。
Springboard认为C++很难学的理由总结如下:
- C++具有复杂的语法以支持多功能性;
- 它是一种包容性很强的语言,你可以做任何技术上可行的事情,即使逻辑上不正确;
- 最好由已经具备C语言编程基础的人学习。
推荐教程:
C语言基础教程 源码+笔记+案例:
配套资料: https://pan.baidu.com/s/1h4zEmLIZ1dEBGkli1ZF_jQ
提取码:1234
浙江大学C++推荐教程,零基础的先看上面的C语言课程,题主可直接看这个:
以及这个:
C语言及C++知识点:
第一阶段:C语言开发
- 语言概述:计算机基础;第一个C语言程序;C的代码的含义与编译;集成开发环境(vs、qt)
- 编程基础:常量与变量;进制转换;运算符;条件控制语句;数组与字符串
- 函数:函数的基本概念;字符串操作的常用函数;自定义函数
- 指针:指针变量的定义;指针基本使用;const修饰的指针;一级指针与数组名的关系;指针法操作数组元素;指针作为函数的参数;数组作为函数的参数;指针做函数的返回值;指针处理字符串
- 内存管理:局部变量的作用域和生命周期;静态局部变量的作用域和生命周期;全局变量的作用域和生命周期;静态全局变量的作用域和生命周期;静态函数和非静态函数的区别;内存分区;堆区内存的分配(malloc)和释放(free)
- 复合类型:结构体的基本用法;结构体嵌套指针和数组;结构体作为函数参数;复合类型的声明与使用
- 文件操作:文件的分类(文本、二进制);文件的打开和关闭;文件操作函数;文件读写缓冲区的概念
第二阶段:C高级编程
- 内存分区、函数调用模型:数据类型、变量的含义;内存四区特点;函数的调用模型;内存操作函数;宏定义与预处理
- 2指针高级:指针基本使用;指针的步长的概念;指针简介赋值;指针以及多级指针做函数参数的特性与使用;通过指针操作字符串;const类型修饰符;位的逻辑运算符;移位运算符;数组指针与指针数组;多维数组做函数参数;结构体嵌套一级指针;结构体嵌套二级指针;浅拷贝深拷贝
- 函数指针与回调函数:封装和设计的思想;函数指针定义的三种方式;回调函数
- 数据结构与链表:链表的基本概念;单链表的相关操作
- 递归函数:递归函数的概念;递归的使用
- 数据结构与算法:大O表示法基本概念;线性表顺序存储和链式存储概念;线性表的顺序存储(数组);线性表的链式存储(链表);队列的顺序与链式存储;栈的顺序与链式存储;二叉树基本操作;常用排序算法
- 接口的封装和设计:函数的封装设计;解耦合的设计理念;模块实现与业务分离的思想
第三阶段:C++核心编程
- C++对C的扩展、引用:C++语言的命名空间的使用;C++对C的扩展;C、C++中const不同之处;定义和使用引用类型变量
- 函数重载:类的的默认参数;C++的函数重载;类和对象的基本概念;类的封装和访问控制权限;类和对象进行简单编程
- 类和对象:类的构造函数;类的析构函数;explicit关键字作用;类的拷贝构造函数的使用;深拷贝和浅拷贝问题;多个对象的构造和析构函(初始化列表)
- 对象的动态分配和释放:类和对象的动态分配和释放内存;静态成员变量和函数的使用;C++编译器对成员变量和成员方法的处理机制;this的使用;友元函数;友元类
- 运算符重载:运算符重载概念;常用运算符重载;自定义的智能指针类;实现一个自定义的String类
- 类的继承和派生、多态:继承中的访问控制;继承中的构造和析构;多继承;virtual继承的基本概念;多态的使用(多态成立条件、使用场景);区分成员函数的重写和重定义;虚函数表指针,分步初始化;虚函数;纯虚函数;抽象类的使用;虚析构函数和纯虚析构函数
- 面向抽象类编程与设计模式:设计模式原则;常用的设计模式
- 函数模板、类模板:函数模板基本语法;函数模板和函数重载的调用规则;编译器对模板的编译过程;类模板的概念和基本语法;继承中的类模板;类模板中普通友元函数、友元函数模板的处理
- 异常、I/O流:C++类型转换;C++标准异常库;异常的抛出与捕获;C++标准I/O流(cin、cout);C++的文件I/O类的使用
- STL:STL容器、迭代器的原理;序列式容器vector、string、deque;堆栈容器stack、quenue;双向链表容器list;关联式容器set、multiset;对组pair;关联式容器map、multimap;STL算法详解
第四阶段:桌面应用开发
- Qt常用的控件:Qt的基本概念;Qt应用程序框架;Qt信号和槽的应用;Qt窗口系统;常用对话框的使用;Qt界面设计;Qt事件处理
- Qt绘图与文件操作:QPainter绘图;update函数;绘图设备(QPixmap、QBitmap、QImage、QPicture);文件操作
- MFC对话框与常用空间:Windows编程的基本概念;Windows编程模型;MFC应用程序框架;创建MFC应用程序;MFC函数Ex后缀和Afx前缀的作用;创建基于对话框的MFC应用程序;模态对话框和非模态对话框;常用控件
第五阶段:Linux系统编程
- Linux命令:Linux下的目录结构;工作日程应用命令;Ubuntu下的软件安装和卸载;
- Linux开发与调试工具:vim命令模式下操作;vim末行模式下操作;vim的配置;gcc的工作流程和掌握常见参数;Linux下的静态库与共享库(windows动态库)的制作和使用;Makefile;gdb调试;pcb和文件描述符,虚拟地址空间;
- 系统I/O操作:Linux系统IO函数;阻塞和非阻塞的概念; stat/lstat函数;文件属性相关函数;链接相关概念及函数;目录操作相关概念及函数;dup、dup2函数;fcntl函数
- 进程与IPC通信:进程相关的概念;进程操作相关函数;孤儿进程;僵尸进程;进程回收;进程间通信
- 线程与并发同步:互斥量;死锁以及解决方案;读写锁;条件变量;条件变量实现生产消费者模型;信号量实现生产消费者模型;线程同步解决哲学家就餐问题;
- 信号:信号中的基本概念;使用信号相关的函数;信号内核实现原理;信号捕捉函数signal、sigaction;使用信号完成子进程的回收;发送信号时如何进行参数传递;
第六阶段:Linux网络编程
- 网络协议与网络编程:OSI七层模型结构;TCP/IP 4层模型结构;B/S、C/S优缺点对比;常见网络协议格式;套接字;网络字节序;IP地址转换函数;编写TCP的C/S网络程序;UDP通信机制与模型;本地套接字;三次握手建立连接过程;四次握手断开连接过程;滑动窗口概念;错误处理函数封装;TCP状态转换;2MSL概念;端口复用方法;半关闭;
- 高并发服务器开发(poll、select和epoll):多路IO转接模型;select函数;fd_set相关操作函数;select多路IO转接模型poll操作函数;epoll多路IO模型;线程池模型的设计思想;多进程并发服务器;多线程并发服务器;libevent库;epoll反应堆模型;使用BufferEvent、evBuffer;多线程并发服务器;
第七阶段:项目实战相关
- Oracle数据库编程:简单查询;oracle的常用函数;多表查询;集合操作;DDL操作管理表;DML管理数据;其它数据库对象;PL/SQL编程;存储过程与存储函数;触发器;工具查询;解决Top-N问题;
- MySQL数据库编程:MySQL表的约束;MySQL中出现的中文乱码问题;MySQL函数库连接数据库;MySQL API访问数据库;使用基础类API实现MySQL客户端工具;预处理类API访问MySQL数据库;使用api修改MySQL事务特性;
- MongoDB数据库编程:MongoDB的安装;MongoDB的相关概念;MongoDB的基本操作指令;对MongoDB进行数据操作、索引操作;MongoDB的副本集;使用MongoDB C++ API;需求分析的一般过程;需求案例的实现原理和设计过程;案例程序框架搭建和部署;
- Redis缓存数据库编程
- Shell脚本编程
- git-代码版本控制工具
- Nginx(web框架)的搭建与使用
- fastDFS(分布式文件系统)的配置与使用……
最后送大家一份好书推荐,码住收藏!
C语言推荐书籍
- 《C Primer Plus中文版》
- 《Linux C编程一站式学习》
- 《C 和指针》
- 《C 程序设计语言》
- 《深入理解C指针》
- 《C 专家编程》
- 《C 陷阱与缺陷》
- 《C 语言的科学和艺术》
- 《C 语言程序设计现代方法》
- 《C 语言接口与实现》
- 《数据结构与算法分析—C语言描述》
- 《UNIX环境高级编程(第3版)》
- 《Linux程序设计》
- 《C语言高级编程》
C++推荐书籍
- 《C++标准程序库》
- 《C++程序设计语言》
- 《C++语言的设计和演化》
- 《The Standard C Library》
- 《C++ Primer》
- 《C++ Primer Plus》
- 《C++编程思想(Thinking in C++) 》
- 《C++初学者指南》
- 《Effective C++ 》
- 《More Effective C++ 》
- 《C和C++安全编码》
除此之外最重要的就是重视编程基础,这决定了你的编程之路能走多远。
版权声明:本文为Ahahaha___原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。