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

2023-11-11

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 【HTML】多行文本框随字数增加,高度增加

    转载地址 https blog csdn net xj 9264 article details 85611526
  • .Net Core基础之读取配置文件

    在应用程序开发中 配置文件是主要存储系统的初始配置信息 配置文件的读取虽然属于基础内容却又经常用到 所以百丈高楼平地起 学习 Net Core 就从学习配置文件开始 在 net framework时代 配置文件主要是xml格式 web co
  • 创建型模式2——工厂模式(简单工厂、工厂方法、抽象工厂)

    简单工厂 模式动机 意图 定义一个创建对象的接口 让其子类自己决定实例化哪一个工厂类 工厂模式使其创建过程延迟到子类进行 主要解决 主要解决接口选择的问题 简单工厂模式的要点在于 当你需要什么 只需要传入一个正确的参数 就可以获取你所需要的
  • OpenGL ES加载纹理

    iOS OpenGL ES加载纹理 GLKit 1 准备工作 创建UIViewController文件并继承GLKViewController 遵守协议GLKViewDelegate 实现协议方法 void glkView GLKView
  • [Vue warn] Failed to resolve component:报错问题。

    在一个vue3项目中 引入一个自定义组件时出现了 Vue warn Failed to resolve component 组件名 这样的警告 引入的组件没有出现在页面中 网上查了半天没找到原因 后来将vue3中的defineCompone
  • cs231n_反向传播求导篇

    我们已经知道基本的标量除以矩阵 或向量 矩阵 或向量 除以标量 以及稍微复杂一点的向量除向量 1 1 1 行向量除以向量除以矩阵 矩阵除以向量的方法 那么矩阵除以矩阵呢 例如 XN DWD C fN C X N
  • 用python+pytest框架写UI自动化

    使用 Python 编写 UI 自动化测试通常需要使用 Pytest 测试框架 下面是编写 Python Pytest UI 自动化测试的一般步骤 安装 Python Pytest 和相关的库 例如 Selenium WebDriver 和
  • WM_CHAR 获取键盘按下的字符

    DEMO3 11 CPP WM CHAR demo INCLUDES define WIN32 LEAN AND MEAN just say no to MFC include
  • QT-固定全局文字大小

    问题描述 W10 将缩放与布局设置为 gt 100 时 QT的文字会放大超过原来的文字框 解决 使用这种方法是让Windows来控制缩放 而不是Qt 添加一个资源文件qt conf 内容为 Platforms WindowsArgument
  • linux 时钟漂移,Redis 实现分布式锁之Redlock 算法浅析

    保证分布式锁有效的三个属性 Safety Properties 安全性 此处也就是互斥性 任意时刻只能有一个客户端可以持有锁 Liveness Property A 无死锁 即使持有锁的客户端崩溃或被分区 也可以获得锁 Liveness P
  • pandas中groupby函数中参数ax_index和group_keys的区别

    前言 笔者在学习pandas中groupby函数时 发现ax index True False和group key True False这两个参数相近又有所不同 特写出此文供大家分享 一 首先创建一个DataFrame df pd Data
  • thymeleaf模板报红

    问题 解决 忽略所有警告或错误 1 或者忽略Thymeleaf有关警告或错误 2 2 取消这个勾 关闭IDEA对于thymeleaf的数据验证选项
  • BP神经网络的详细推导

    文章目录 概述 一 神经元模型 二 感知机与多层网络 三 误差逆传播算法 四 全局最小与局部最小 五 BP算法的改进 1 引入动量法 2 尺度变换法 3 自适应学习率调整法 六 BP神经网络的训练 1 产生数据样本集 2 确定网络的类型和结
  • QMap倒序遍历

    for QList
  • 中英文期刊卷号和期号

    一 中文期刊 国内期刊为了给期刊排序方便查询 都按照时间分卷和期 卷是期之上的时间分类 卷是从创刊开始按照年度排序的编号 期是这一年中按时间排序的编号 比如2017年3月发表的论文 按照卷号期号排可能就是 第23卷第3期 国内对期刊卷号期号
  • 【简述】VSCode使用ssh连接linux服务器并安装使用jupyter notebook/Anaconda/pytorch

    1 通过管理员获得该Unbutu服务器的IP 账号 密码 2 打开VSCode 安装扩展Remote SSH 3 在VsCode左侧边栏点击Remote Explorer使用该扩展 新建Remote 输入IP 账号并连接 4 在上方弹出窗口
  • Unix/Linux编程:fork()进程详解

    文章目录 理论 进程 fork wait exec fork 实践 验证 fork函数被调用一次但返回两次 子进程和父进程之间不共享数据空间 父子进程间的文件共享 fork的内存语义 同步信号以规避 fork 之后的竞争条件 fork 解决
  • Flutter切换页面后保持状态不刷新

    1 使用IndexedStack实现 IndexedStack继承自Stack 它的作用是显示第index个child 其它child在页面上是不可见的 但所有child的状态都被保持 所以这个Widget可以实现我们的需求 我们只需要将现
  • PointNet介绍

    论文 PointNet Deep Learning on Point Sets for 3D Classification and Segmentation 代码 https github com charlesq34 pointnet 0
  • 【无标题】C++课程学习笔记(南科大于仕琪老师)

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