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

这几天我突然想写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里面确实是有很多的代码实现,代码编辑的规则,老师都认为是默认就是知道的。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值