这几天我突然想写CSDN了,前段时间我打开了我的CSDN,发现我其实只写了3篇文章,其实写CSDN是一个好习惯,我之前这么多年都没有发现这个好习惯,现在我要求自己只有有所心得就应该写下来,一方面与大家共勉,另一方面通过和大家的交流我希望自己的技术越来越好。

今天写写最近学习的C++课程笔记,南科大于仕琪老师的C++课程我是在闲暇时光花了两天时间看完的,(于教授是OpenCV中国论坛管理者,技术高超为人低调,之前也在深圳先进院工作过,也算是我的前辈了,需要好好向前辈学习)我凭借着自己模糊的记忆对每个模块提取出了些知识点,也算是一个备忘录吧。毕竟也算是生手,写得不好,望见谅!

南科大于仕琪副教授的C++课程的学习与总结:
1、C++的基础知识(第一章到第四章)
第一章、编译与预处理,C++环境的介绍
答:主要讲授了C++以及C语言的常用的基础语法,比如,编译链接,预处理宏,输入输出函数,

第二章、C++的数据类型以及算术运算
整形类型,浮点类型,算数运算,类型转换,

第三章、条件分支与for循环结构
条件分支结构(if),循环结构(while,do…whike,for …,go ,switch,break,continue等等),

第四章、数组

数组(一维数组,定长数组,变长数组,多维数组,常量数组等等,字符串string),结构体(struct)【将不同的数据类型统一起来,用法基本上同后面学到的类】,联合体(union)【共享同一块地址】以及枚举(enum)[替换常量],

第五章、指针与内存管理
指针:1、存的是地址;&是取地址,*是取内容这三点是原则。
2、指针的指针。
3、常数指针(要注意区分)
4、指针数组 数组名相当于首地址,也就类似于指针。

动态内存管理:
1、申请了内存,一定要记得释放或者中途改变,内存释放不了就会出现内存泄漏的问题;
2、delete[] 释放内存
3、还可以使用动态内存管理的指针,这是C++最新的发展方向,但不一定是最好的选择,因为还有很多的不确定性。

第六章、函数
1、函数的定义
2、函数的返回值(本质就是值复制)
3、函数的参数(深拷贝与浅拷贝 也就是对应大的值传递还是地址传递地问题。最终在实际中的体现就是深拷贝在函数里面的修改会对外面的参数有影响。)
4、函数的声明与使用(通常函数编辑的时候,首先在入口处要对参数进行各种检查,这样可以避免出现BUG)
5、引用:相比较于指针,引用一定要初始化,会更加的安全。
6、内联函数,就是以空间换时间的作用;

第七章、函数的扩展:默认参数问题以及函数模板等等
1、默认参数都是从后面开始写的;
2、函数的重载:函数名相同,签名不同的函数,主要的作用就是在调用的时候能根据参数的传入不同,调用不同的函数体。
3、函数模板:本质上就是泛型,类似于C#中的泛型,在定义的时候是不会生成代码,在实例化的时候才生成真正的代码。 多态的本质就是延迟定义,这样可以让程序变得更加灵活。
4、函数指针: 就是指向函数的指针。 类似于C#中的委托,这样做到深层次可以实现事件进行异步通讯。
5、函数引用:
6、递归函数:优点就是可以让复杂程序变得简单,比如树的遍历等等;缺点就是占据内存高,计算复杂度高,同时耗时且理解困难。

第八章、Arm下的C++和C编程
1、平台不一样
2、如何让程序加速? 本质就是三点:短,简单,高效;
主要包括以下几点:A、算法合适;B、代码简洁;C、内存优化;D、避免内存复制;E、循环里面不要使用printf、cout F、可以使用查表法;G、SIMD,OPENMP自带的加速机制;
3、如何避免内存的复制?

第九章、类与对象
1、类:类成员变量以及类成员方法;
2、类的设计:头文件(.hpp文件,就是申明函数等等),函数具体实现(.cpp),主函数实现(main.cpp实现)
3、cmake以及Makefile的实现
4、构造函数以及析构函数(默认的:主要就是为了释放内存:delete[])
5、this 指针:就是指定当前的对象
6、const以及static之间的区别?前者主要强调不变,后者主要强调不需要实例化,声明就会进入内存;静态函数里面不能调用非静态的成员函数或者成员变量,不然就会报错。
7、

第十章、运算符重载
1、运算符重载的主要目的是可以让语言更加高级;同时运算符重载可以让程序更加简单;难就难在运算符重载声明并不是那么容易的一件事情。
2、友元函数:函数的朋友,可以不受限类的约束,因为它不是类的成员;
3、类型转换:在运算符重载的过程中,通常会遇到各种类型的转换,注意最好使用显式转换,不建议使用隐式转换。
4、自增与自减运算符的重载: 可以让代码更加地简洁;

第十一章、一些默认的操作
1、默认构造函数:
2、动态内存的例子;
3、内存泄漏的解法;
4、软拷贝
5、智能指针可以自动释放内存; (只管申请,不管释放:本质就是模板类,就是一个对象,在析构函数中根据引用次数减少到指定值时(比如到0时)就会自动删除delete[]从而释放内存。)

第十二章、改善你的源代码
1、一些建议:A、使用size_t代替int;B、矩阵拷贝不适用双层循环,使用内存可能更好;C、使用一维数组,而不是使用二维数组。D、不要使用太多的循环结构;E、多对输入参数进行检查,这样可以避免更多的bug.F、将代码写得更加具有可移植性,这样可以方便拓展;G、文件命名规则;H、代码优化无止境。
2、头文件里面应用了单例模式;
3、代码最好要做到高内聚低耦合。
4、派生类:子类继承父类的所有特性,先执行父类的构造函数,析构函数则是相反。
5、访问权限的控制:private,public,protected具有不同的访问权限与范围。
6、虚函数:虚函数就是在父类中进行申明,在子类中进行实现与重写。这样可以实现多态,延迟定义: 在C#中,虚函数是一种很好的抽象,著名的抽象工厂,抽象方法以及抽象类也是类似于这种思想实现的。 虚函数的本质就是动态绑定,非虚函数就是静态绑定。
7、析构函数一定是虚函数。
8、静态与动态的内存申请:
9、opencv中的实例;

第十三章、类模板
1、类模板是最近C++标准推出的功能,主要也就是泛型在类上面的实现。
2、可以更加灵活地调用类,泛型(模板)的出现主要就是延迟创建,让使用变得更加方便;

3、模板还可以相互继承;
4、C++中有很多的标准类模板;

第十四章、错误处理机制
1、cin ,cout,cerr等不同的信息输出到多管道中;
2、assert 是一个宏,不是一个标准;
3、exception异常,通常使用try……catch对不同的异常进行捕获。
4、还有更多的异常捕获机制,就是对应于不同的异常进行捕获,然后进行相应的处理。

第十五章、拓展的C++知识
1、友元类:友元函数不是成员函数。友元类可以调用基类的私有成员;
2、Nested types嵌套:
3、RTTI和不同的数据类型转换:(记住一点那就是最好使用显式转换,不然出现信息都是都是容易造成bug的问题的出现。)
4、
第十六章、企业合作项目的开启
1、OPENBLAS项目创始人介绍如何进行代码优化:1、局部性原理2、GEMM
2、OPENCV中国区域负责人:Vadim Pisarevsky与于教授的对答环节:

总结:
1、C++之所以性能高的原因是:
A、相较于其他的语言,比如JAVA,C#,这种语言本身很多都没有进行检查,他们认为写程序的都是具有很高的程序素养的人,所以避免检查就会让程序运行更加快捷;
B、C++以及C语言更加偏向底层,偏向计算机组成原理,计算机体系结构,这样就会更加快速。

2、于老师这门课对我有什么启发?
答:这门课涉及到的东西很多:包括C++,C语言,liunx常用的操作命令,G++,GCC等进行编译实现。camke,make,makefile,cmakelist等等知识,以及图像处理算法介绍,OpenCV内部的函数以及优化的地方。授学方式不再强调于课本本身,主要还是传授C++问题本质,而且编程是一门需要动手的技能,学完之后要立马手动实操,这很关键。

3、这门课对我印象最为深刻的地方是什么?
答:按照于老师所提的这门课主要是想讲清楚指针以及内存管理这两块,因为指针和内存管理是C++学习过程中最难度过的两道难关,这门课确实讲得很深刻也很简单。对我影响最大的地方就是A、一个代码的优化,以前总是觉得将代码写出来就可以了,现在想来很大程度上是要想明白,怎样才能写好一个好代码,这就是很多程序员做了很多年都不曾去思考的问题,就是为了实现功能,将代码冗余地进行组装。里面提供了一些如何让代码加速的TIPS,很是让我感同身受。B、其次就是这门语言是基于linux以及VScode这两种环境我都不是很熟,而这两种环境又是当今使用最为频繁的两个方向,这也是值得我深思的一个方向,因为市面上用的更多的还是windows以及vs 等等

4、这门课有哪些不足呢?
答:A、GUI其实也是挺重要的,这门课没有过多地提及,GUI很多都需要经验来实现,没有太多的技术含量,但是确实也是很重要的一个方面。
B、实验部分确实还不够,C++以及任何一门语言的学习都需要进行大量的训练与动手能力,这些PPT里面确实是有很多的代码实现,代码编辑的规则,老师都认为是默认就是知道的。

【无标题】C++课程学习笔记(南科大于仕琪老师)相关推荐

  1. 南科大于仕琪团队招聘研究助理教授,博士后

    南方科技大学于仕琪副教授团队招聘研究助理教授.博士后.博士生和硕士生 团队特色:专注步态识别方向十余年,在步态识别方向具有较高的影响力. 研究助理教授: 研究方向:步态识别.行人视频合成,图像和视频中 ...

  2. cs224w(图机器学习)2021冬季课程学习笔记16 Community Detection in Networks

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. Community Detection in Networks 2. Network Com ...

  3. cs224w(图机器学习)2021冬季课程学习笔记8 Colab 2

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 VX号"PolarisRisingWar"可直接搜索添加作者好友讨论. 更新日志: 20 ...

  4. Python课程学习笔记 上

    笔记目录 学前准备 Python解释器安装包 下载 安装 Pycharm 下载 常用的快捷键 Python程序执行机制 语法基础 注释和中文乱码 变量 数据类型 运算符 数值运算符 复合运算符 比较运 ...

  5. cs224w(图机器学习)2021冬季课程学习笔记9 Graph Neural Networks 2: Design Space

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. A General Perspective on Graph Neural Networks ...

  6. 台湾大学林轩田机器学习技法课程学习笔记4 -- Soft-Margin Support Vector Machine

    红色石头的个人网站:redstonewill.com 上节课我们主要介绍了Kernel SVM.先将特征转换和计算内积这两个步骤合并起来,简化计算.提高计算速度,再用Dual SVM的求解方法来解决. ...

  7. 台湾大学林轩田机器学习技法课程学习笔记1 -- Linear Support Vector Machine

    红色石头的个人网站:redstonewill.com 关于台湾大学林轩田老师的<机器学习基石>课程,我们已经总结了16节课的笔记.这里附上基石第一节课的博客地址: 台湾大学林轩田机器学习基 ...

  8. 台湾大学林轩田机器学习基石课程学习笔记13 -- Hazard of Overfitting

    红色石头的个人网站:redstonewill.com 上节课我们主要介绍了非线性分类模型,通过非线性变换,将非线性模型映射到另一个空间,转换为线性模型,再来进行分类,分析了非线性变换可能会使计算复杂度 ...

  9. > 《物联网技术与应用》课程学习笔记

    <物联网技术与应用>课程学习笔记 文章目录 前言 第一次课 1.什么是物联网 2.物联网的特征 3.解释NB-IOT(窄带宽中束物联网)的含义 4.解释RFID有源.无源的含义 ~~5.物 ...

最新文章

  1. 美科学基金会欲向公众征集想法
  2. ASP.NET中App_Code,App_Data等文件夹的作用
  3. websocket规范 RFC6455 中文版
  4. python链表_使用python实现链表操作
  5. HTML学习(2)(摘抄自慕课)
  6. mysql slave修改_MySql主从复制(初学笔记)
  7. mysql查看客户端执行的语句_查看MySQL最近执行的语句-阿里云开发者社区
  8. igmpproxy_IGMP proxy开发笔记 | 学步园
  9. 如何在sql存储过程中打log_SQL语句优化
  10. 华为上半年收入4540亿元;GitHub服务中断,已恢复​;Python 3.8.4发布|极客头条
  11. bcb quickrep保存为 图片_不容错过的SCI图片处理和组图方法
  12. 10. 我的第一个Java应用程序
  13. Spring Cloud学习(一)
  14. 我理解的17种C#写的Hello World程序
  15. 分布式对象存储解决方案
  16. Mac IDEA 实用快捷键大全(持续更新)
  17. 集成editormd支持markdown语法(一)之基本使用
  18. nodejs eggjs框架 爬虫 readhub.me
  19. C# 复制Word(复制全部内容、部分内容、页眉页脚)
  20. 计算—六合彩的中奖概率

热门文章

  1. 一日一题:第一题---Dijkstra求最短路 I(最浅显易懂!)
  2. Android ScaleAnimation缩放动画,RecyclerView item选中放大
  3. arima 公式_R语言时间序列分析(十二):ARIMA
  4. 使用ztree异步加载数据库数据形成树形菜单
  5. 死锁四个必要条件及死锁的预防、检测、避免、解除
  6. 【从零开始vnpy量化投资】十五. 投资组合策略模板介绍
  7. 渠道数字化有什么好处?如何实现渠道数字化营销?
  8. 聚美优品被曝涉嫌知假售假 股价周一跌4.18%
  9. Dubbo服务注册与发现的流程?
  10. matlab中维数的理解