过段时间打算上手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是一个引用变量 可以修改数组的内容