重学C++
简介
- 为何重学C++
- 大学没学好,遗憾
- 会C++显得很厉害(性能为王)
- 说不定能找个工作赚钱
- 默认有代码基础,不然后面的看不太懂
- 理论和实践相结合是最好的,第一遍不懂是可以的,多重复几遍是必须的
- 应用领域:
- 重学路线:
- C++基础语法
- C++基本句法
- C++高级语法
- C++编程思想
- C++高效编程
- 做一个桌面应用
注:跟着大牛学,少走弯路,不是自己看书走火入魔,驾鹤…
编程环境:vs2019,要会基本的调试
- CPP历史
- 最早的C++是带类的C,方便面向对象编程,可以称作C语言的增强版,1983年正式更名C++
- 1998年STL标准库出现,带来很多新的功能和特性
- 2011年,完成了新的标准C++11,算是新的起点
- 什么是C++擅长而C语言做不到的
- 两份代码:
#include "stdafx.h" #include "stdio.h" // C语言版,面向过程 void test(char* s){ printf("%s\n", s); } // C++版,面向对象 class Test{ public: void print(cahr* s){printf("%s\n", s);} }
- C语言需要添加全局变量和全局函数处理事务,即难以扩展
- C++可以有效的管理资源
- 强大的抽象封装能力,可以开发大型工程
- 高性能,运行快
- 低功耗,微型嵌入式设备
- 语法复杂(崇尚自由),细节较多(需要一些好的规范和范式,便于维护)
- 要求对内存和CPU理解较为深入
基础语法
- 语言层次和类型
- C++的执行过程
- 编译——汇编——链接
- 编译——汇编——链接
数据类型
- C++是强数据类型语言
- 数据类型决定变量所占内存空间的大小和布局方式,内存布局是学习C++必须掌握的(基础知识:计算机基础专栏)
- 常见数据类型的定义
char a[10] = "a"; short int s = 97; int m = 97; long int n = 97; float f = 97.0f; double d = 97.0; long double k = 97.0bool b = true; wchar_t w[10] = L"a";
- 通过IDE查看内存布局
常用快捷键
F5:开始执行/调试
F11:单步执行
Ctrl+K+C:注释
Ctrl+K+U:取消注释 - 标识符和关键字就不再单独介绍,用到时背会
变量与常量
- 变量要有一个名字,并且要规定数据类型
- 常量,即在程序运行过程中,其值保持不变的量,有两种定义方式
#define PI 3.14159 const double PI = 3.14159
- 尽量使用
const
,因为#define
不会出现在编译器(预处理),很难排错
- 尽量使用
- 整型常量
/*整型常量举例*/ 212 // 合法 215u // 合法 078 // 非法,8不是八进制 032UU // 非法,后缀不能重复 // 多以十进制和十六进制
- 布尔常量
- 字符常量
运算符表达式
- 运算符包括:算术、关系、逻辑、赋值、位、移位运算符、杂项运算符
- 如果有编码基础,在C++中的写法即可
%
、++
、--
==
、!=
&&
、||
、!
+=
、%=
、/=
、|=
、^=
&
、|
、^
,用于二进制,双目运算符>>
、<<
,示例:
- 计算机运算采用二进制补码,符号位可直接参与运算
- 原码—>补码:符号位不变,其余取反+1
- 字节序
- 大端方式:数据的高位放在内存的低地址(适合人看,从高位开始读嘛)
- 小端方式:数据的低位放在内存的低地址(适合机器处理),Intel
- 移位
- 左移:低位补0,移n位等于原来的数值乘以2的n次方
- 右移:逻辑右移补0(无符号),算数右移负1正0
- 所以说带符号数尽量左移 ,否则可能会出错
- 记一下这几个值(B2T是自定义二进制转十进制)
- 实际场景中注意整型和浮点型的转换
int A = 10, x = 0; x = 15.0 / A; cout << x<<typeid(x).name() << endl; // 1 int
- 杂项运算符
- 地址通常用指针变量接收:
float* p = &a;
- 地址通常用指针变量接收:
- 断言:
#include <assert.h> int x = 1; assert(x = 0); // 会报错 // 一般测试用例中常用