过段时间打算上手OpenCV,自己不是特别喜欢Python这个语言,干嵌入式时间久了还是对C有种执念,同时C++在嵌入式应用以及图像处理方面也是有很大占有量的,所以从国庆假期开始上手C++,当然学好C++绝非短时间能办到的,这需要大量的练习和使用,给自己加个油吧,不要变成C++从入门到放弃,我选用的教材是《C++ Primer Plus》,目前是边看内容边写一些有意思的例题和课后题。
一开始的内容基本就是C的内容,自己的C还算靠谱,所以一开始感觉还不到劝退的地步,但是已经感受到了OOP的强大,对象的各种方法,可以实现许多在C中库实现不了的功能,函数重载使得变参数函数得以实现,一个函数根据接受参数的不同可以实现不同的功能,对我这个只接触过面对过程的C的人来说还是十分震撼的,同时强大的功能和极高的自由度带来的,必然是使用难度的剧增,所以都说C++学习曲线陡也不是没道理,慢慢来吧。
1、using namespace std; 添加这句语句以后可以使用cout cin endl等函数
using编译指令 名称空间编译指令
名称空间支持:编写大型程序及将多个厂商现有的代码组合起来的程序时更容易
添加以上语句的结果等同于 std::cout<<"";
全局using编译指令是一种偷懒的做法,更好的做法是只使所需的名称使用
2、插入运算符<< 指明信息的流向
3、类和对象的区别:类型之于变量
4、C++ 俩种传递信息的方法:类方法、重新定义运算符
5、大括号初始化 int a{}; a被初始化为0
6、cout << hex 或 oct 十六进制或八进制输出
7、通用编码名 \u
8、cout.put输出字符
9、cout.setf(ios_base::fixed,ios_base::floatfield);迫使输出定点表示法
10、格式强转支持C语言格式或者函数格式
static_cast<typename>(value) 更安全的强转
11、列表初始化禁止缩窄转换
12、字符串输入:cin.getline(变量名,len) 用换行符确定行尾但不保存
cin.get() 函数重载 一种用法与getline类似 另一种还能只读一个字符
cin.get(变量名,len).get(); 完成读取一行输入
13、cin会忽略空格和换行符 空格和换行符是不会回显的
14、注意丢弃换行符 (cin >>year).get();
15、string 类 简单变量而不是数组,是一个表示字符串的实体
可以相互赋值,可以加运算 类似于strcpy和strcat
16、getline(cin,string类型变量名) 输入一个字符串
17、R标识 原始字符串 可以使用 “\n"来表示\n
R"+*(原始字符串0)+*" 这样就可以使用 () “”等
18、C++使用结构体可以缺省struct
19、枚举的取值范围 最大范围是小于最大值的2的最小幂-1,最小范围是0或者大于2的最小幂+1
20、面向对象:运行时决策 面向过程:编译时决策
21、new 类似于alloc 从堆(heap)或自由存储区(free store)的内存区域分配内存,申请失败返回0(NULL)
delete 用来释放new的内存 配对存在 不要尝试释放已经释放了的内存
如果使用new [] 来为数组分配空间,应使用delete [] 来释放内存
22、若果给cout一个指针,那么他将打印一个地址,但是如果是char * 类型,会打印字符串
加(int *)强转可以打印出地址
23、模板类vector vector<typeName> vd(n); n可以是变量
array array<typeName,n_elem> arr; n必须为常量
24、cout.setf(ios_base::boolalpha); 该标记命令cout显示true和false
25、遍历字符串 while(name[i])结尾字符编码为0或false
26、基于范围(range-based)的for循环
for(elemType x:数组名) 可以用来遍历数组但是不能对数组中的值进行修改
for(elemType &x;数组名 ) 表明x是一个引用变量 可以修改数组的内容