C/C++笔记
文章平均质量分 71
挥剑决浮云 -
永远和自己的无知作斗争!
展开
-
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
上面的tar命令只提供了打包和解包的功能,tar在提供打包和解包的同时使用gzip/bzip2进行压缩,实现类似windwos下winRAR软件的命令。gzip虽然可以对文件夹进行压缩,但是并不能提供打包的服务,只是对文件夹中的所有文件进行了单独的压缩。tar -vcf test.tar test //将test打包成test.tar。Linux下常用的压缩扩展名有:.tar、.tar.bz2、.tar.gz。/dev/sdb 表示U盘,/dev/sdb1 表示U盘的第一个分区。原创 2024-10-04 22:20:08 · 1163 阅读 · 0 评论 -
五子棋理解C++思想
例如,当k = 0时,表示水平向右的方向,每次循环会将当前位置的横坐标增加 1(即nowj += dx[k]和nowi += dy[k]变为nowj += 1和nowi += 0),以检查水平方向上是否有连续相同颜色的棋子。在搜索过程中,通过不断更新当前位置的坐标nowi和nowj,使用nowi += dy[k]和nowj += dx[k]来沿着特定方向前进,从而检查该方向上的棋子颜色是否相同。通过遍历棋盘上的每个位置,对于非空位置,尝试在四个方向上进行延伸搜索,以判断是否有连续五个相同颜色的棋子。原创 2024-08-24 22:40:07 · 387 阅读 · 0 评论 -
C语言速览之指针基础
内存单元的指针和内存单元的内容是两个不同的概念地址 = 指针内容 = 数据。原创 2024-08-17 10:29:27 · 932 阅读 · 0 评论 -
C++速览之I/O操作
在针对I/O操作时,标准库提供一组操作符(manipulator),允许程序堆输出的内容进行格式化,比如:输出数字的十六进制、浮点值的精度等。c++ 对浮点数的输出默认只会输出六位 ,那么在应对较多浮点数的时候,则常常会丢失精度,导致后面的小数位无法输出。在c/c++中,在对bool类型的数据做输出的时候,打印的是 0 、1 ,如果希望看到的是 true 和 false ,那么可以使用 boolalpha 操作符。此外,还要考虑输入错误的处理,例如输入不合法的值或输入结束时的处理。原创 2024-08-17 10:27:10 · 413 阅读 · 0 评论 -
C++速览之运算符重载
一般来说,可以使用对象来访问类中的成员函数,而对象本身是不能像函数一样被调用的,除非在类中重载了调用运算符。运算符 ,那么可以声明一个函数为 operator+() ,函数声明的位置可以是类的内部,也可以是类的外部,所以又有了成员函数和全局函数的划分。并不是所有的运算符重载都能定义在类中,比如,需要扩展一些已有的类,对它进行运算符重载,而这些类已经被打成了一个库来使用,此时通过全局函数的方式来实现运算符重载。把重载的运算符函数定义在类中,此时只需要接收一个参数,因为类的对象本身作为+ 的前面调用者。原创 2024-08-16 15:57:55 · 227 阅读 · 0 评论 -
C++速览之智能指针
c++ 把内存的控制权对程序员开放,让程序显式的控制内存,这样能够快速的定位到占用的内存,完成释放的工作。shared_ptr : 允许多个智能指针共享同一块内存,由于并不是唯一指针,所以为了保证最后的释放回收,采用了计数处理,每一次的指向计数 + 1 , 每一次的reset会导致计数 -1 ,直到最终为0 ,内存才会最终被释放掉。下面的例子就是,这是因为f和s内部的智能指针互相指向了对方,导致自己的引用计数一直为1,所以没有进行析构,这就造成了内存泄漏。智能指针的用法和原始指针用法一样,只是它。原创 2024-08-16 15:56:52 · 396 阅读 · 0 评论 -
C++速览之命名空间(名字空间)
science::physics 命名空间嵌套在 science命名空间内部,其中定义了一个 calculateForce 函数,用于计算力的大小。我们演示了如何在不同的命名空间中定义和使用函数,并通过嵌套命名空间来组织相关的功能。使用 using namespace 声明可以将整个命名空间引入到当前作用域中,使其中的实体可以直接使用,而无需在名称前添加命名空间的限定符。使用 namespace_name::entity_name 语法可以限定命名空间中的特定实体,以便只使用该实体而不引入整个命名空间。原创 2024-08-15 10:09:43 · 531 阅读 · 0 评论 -
C++速览之异常处理
如果没有找到匹配的 catch 块,异常会被传递给上层调用栈中的调用者,直到找到匹配的 catch 块为止。中,可以对捕获的异常进行处理。只捕获你知道如何处理的异常:在 catch 块中,只捕获你能够处理的异常类型。通过自定义异常类,你可以根据程序的需求定义不同类型的异常,并在异常处理器中针对不同类型的异常做出相应的处理。清晰地记录和报告异常:在处理异常时,清晰地记录和报告异常信息,以便进行故障排查和调试。确保资源的正确释放:在捕获和处理异常时,确保释放已分配的资源,以避免资源泄漏。块来捕获和处理异常。原创 2024-08-15 10:05:30 · 254 阅读 · 0 评论 -
C++速览之lambda表达式
在编写lambda表达式的时候,可以忽略参数列表和返回值类型,但是前后的捕获列表和函数体必须包含, 捕获列表的中括号不能省略,编译根据它来识别后面是否是lambda表达式 ,并且它还有一个作用是能够让lambda的函数体访问它所处作用域的成员。,如果函数中需要使用到某一个函数帮助计算并返回结果,代码又不是很多,那么lambda表达式不失为一种上佳选择。Lambda表达式允许我们在需要函数对象的地方定义和使用简短的函数,而。这是最精简的lambda表达式了,不过没有任何用处,等于一个空函数,没有函数体代码。原创 2024-08-14 18:17:58 · 317 阅读 · 0 评论 -
C++速览之容器 string / vector
不同的容器具有不同的特点和适用性,因此在选择容器时应根据数据访问、插入删除的需求以及空间和时间复杂度的考虑做出合理的选择。:一些容器(如std::vector和std::list)具有动态调整大小的能力,可以根据需要动态分配和释放内存,使得在运行时可以灵活地管理数据的大小。获取向量的大小、在向量末尾添加元素、迭代遍历向量、清空向量、动态调整向量的大小、排序向量中的元素。原创 2024-08-14 18:10:48 · 978 阅读 · 0 评论 -
C++速览之引用
悬空引用指的是引用一个已被销毁的对象或不存在的对象,这将导致未定义的行为。因此,在使用引用时要特别注意,确保引用所引用的对象的生命周期正确管理。后续的赋值操作 ref = anotherNum 不会改变引用所引用的对象,而是修改了原始对象 num 的值。通过使用引用参数,可以避免对象复制的开销,并使函数对原始对象的修改能够在函数外部可见。引用还可以作为函数的返回值,允许函数返回对其他变量的引用。引用作为函数参数传递时,函数可以修改原始对象的值,因此需要小心操作引用,确保不会意外修改原始对象。原创 2024-08-14 17:24:53 · 835 阅读 · 0 评论 -
C++速览之const
通过将对象声明为 const,可以明确指示其只读特性,并减少意外的修改,从而提高代码的质量和可维护性。防止意外修改:将对象声明为 const 可以防止在代码中无意中修改其值,提高代码的稳定性和可靠性。常量成员变量:在类中使用 const 声明的成员变量是类的常量成员,一旦初始化后就不能修改。声明常量:通过在变量声明前加上const关键字,可以将变量声明为常量,即其值不能被修改。:将变量声明为 const 可以防止意外的修改,提高代码的可靠性和可维护性。,即指针所指向的内存地址的值不能修改。原创 2024-08-13 13:38:37 · 468 阅读 · 0 评论 -
C++快速理解之泛型编程
在上述示例中,定义了一个函数模板 maximum,它接受两个类型相同的参数,并返回较大的值。它允许定义一个模板,其中的类型参数可以在使用时被实例化为具体的类型,从而创建多个具有相似结构和行为的类。在类模板中,我们使用 T* elements 定义了一个动态数组的指针,并使用 int size 定义了数组的大小。函数模板本身并不是一个具体的函数定义,而是一个通用的模板,用于生成特定类型的函数定义。通过使用泛型,可以编写通用的数据结构和算法,使其适用于不同的数据类型,从而提高代码的复用性和扩展性。原创 2024-08-13 13:28:29 · 812 阅读 · 0 评论 -
C++面向对象进阶之 纯虚函数、抽象类
这时 Rec 仍不能被实例化,因为它没有实现继承来的 volume() 函数,volume() 仍然是纯虚函数,所以 Rec 也仍然是抽象类。可以发现,Line 类表示“线”,没有面积和体积,但它仍然定义了 area() 和 volume() 两个纯虚函数。一个纯虚函数就可以使类成为抽象基类,但是抽象基类中除了包含纯虚函数外,还可以包含其它的成员函数(虚函数或普通函数)和成员变量。Line 是一个抽象类,也是最顶层的基类,在 Line 类中定义了两个纯虚函数 area() 和 volume()原创 2024-08-13 13:25:52 · 360 阅读 · 0 评论 -
C++面向对象进阶之friend 友元
一个类 A 可以将另一个类 B 声明为自己的友元,类 B 的所有成员函数就都可以访问类 A 对象的私有成员。)间接地进行,这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦。友元可以看成是现实生活中的 好闺蜜 或者是 好基友。友元函数可以直接访问类中的私有成员。只能在类的成员函数内部访问,一句话:一种可以访问。权限的成员 的 方法。原创 2024-08-12 14:34:15 · 147 阅读 · 0 评论 -
C++面向对象进阶之final
虚函数才能被标记为final ,其他的普通函数无法标记final。是一个特殊的关键字,有2个作用。表示到此为止,不要再变动。原创 2024-08-12 14:30:43 · 132 阅读 · 0 评论 -
C++面向对象进阶之override
在继承关系下,子类可以重写父类的函数,但是有时候担心程序员在编写时,有可能因为粗心写错代码(不同名)。override 并不会影响程序的执行结果,仅仅是作用于编译阶段,用于检查子类是否真的重写父类函数。不过值得注意的是,override 标记的函数,必须是。防止以后这个函数变了名字,达不到重写效果。所以在C++ 11中,推出了。原创 2024-08-12 14:25:36 · 124 阅读 · 0 评论 -
C++面向对象进阶之/ 构造函数在继承中的注意点 / 初始化列表
在 main 函数中,创建了一个 Demo 类的对象 obj 并传递 100 给构造函数,然后调用 show 方法输出 m_a 和 m_b 的值。由于前面提到的初始化问题,m_a 的值可能不是预期的。构造函数 Demo(int b) 接受一个参数 b ,用于初始化成员变量 m_b ,并通过 m_a(m_b) 尝试初始化 m_a。,然后再执行 m_a(m_b) ,但这并不是对 m_a 的初始化操作,可能会导致未定义的行为。需要注意的是,在初始化列表中 m_a(m_b) 的这种初始化方式是不正确的。原创 2024-08-12 14:10:00 · 658 阅读 · 0 评论 -
C++面向对象进阶之public private protected
受保护成员的设计目的就是允许派生类访问和操作,以实现特定的继承和扩展功能,但对于 类外的其他代码 仍然是不可访问的。public 到 protected 到 private 要求越来越严格。原创 2024-08-12 13:28:49 · 181 阅读 · 0 评论 -
C++快速理解之多态
这种技术让 父类的指针 或 引用 具备了多种形态,这就是所谓的多态。看下面的代码,f->show()到底调用哪个类中的show函数?注意:在父类的函数上添加 virtual 关键字,可。当调用函数时,到底用哪个,要根据调用时的参数而确定。如果父类指针指向的是一个父类对象,则调用父类的函数。如果父类指针指向的是一个子类对象,则调用子类的函数。一句话:有多个相同名字的函数,当调用时,会。f->show() 调用 Father的。虽然指向子类,但他是父类型定义的指针变量。,通过父类的指针调用子类的成员函数。原创 2024-08-11 14:58:22 · 402 阅读 · 0 评论 -
C++快速理解之继承
除非使用了域解析运算符,才会调用父类的同名函数,子类中想要调用被覆盖的父类成员函数时,就需要使用作用域解析运算符 :: 来明确指定调用父类的版本,以避免产生歧义或错误。可以将这些类的共同成员提取出来,定义为父类,然后从父类继承,既可以节省代码,也方便后续修改成员。当你创建的新类与现有的类相似,只是多出若干成员变量或成员函数时,可以使用继承,这样不但会减少代码量,而且新类会拥有基类的所有功能。既然父类中定义了成员变量、成员函数,那么肯定就可以在子类的成员函数中进行使用,否则继承就没有意义了。原创 2024-08-11 14:51:50 · 881 阅读 · 0 评论 -
C++快速理解之封装
在类的内部(定义类的代码内部),无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。在类的外部(定义类的代码之外),只能通过对象或指针访问public修饰的成员,不能访问 private、protected 修饰的成员。读取成员变量的值的函数通常称为 get 函数,它们的名字通常以get开头,后跟成员变量的名字。给成员变量赋值的函数通常称为 set 函数,它们的名字通常以set开头,后跟成员变量的名字。protected:受保护的。原创 2024-08-10 22:26:34 · 178 阅读 · 0 评论 -
C++快速理解之面向对象
在C语言中,我们会把重复使用或具有某项功能的代码封装成一个函数,将拥有相关功能的多个函数放在一个源文件,再提供一个对应的头文件,这就是一个模块,使用模块时,引入对应的头文件就可以。类由一组相关联的函数、变量组成,你可以将一个类或多个类放在一个源文件,使用时引入对应的类就可以。public也是 C++ 的新增关键字,它只能用在类的定义中,表示类的成员变量或成员函数具有“公开”的访问权限。创建对象的过程也叫类的实例化,每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数。原创 2024-08-10 22:16:07 · 798 阅读 · 0 评论 -
QT5.14.2+cmake3.8.2+opencv3.4.0环境配置遇到的问题
1、cmke的configure时遇到无法下载opencv_ffmpeg.dll等三个文件我直接用网上的下载好的在文件夹中添加,不过,一定要改成原文件的命名,就是带一堆数字签名的:然后直接Generate,之后就可以去cmd编译了(因为再次configure的话会尝试重新下载覆盖,又变成空文件)网上还有一种在system32文件夹中的hosts里面添加ip权限(C:\Windows\System32\drivers\etc\hosts)我一直无法使用管理员权限,大家可以自行搜索这个方法进行尝试,原创 2022-12-04 20:23:25 · 753 阅读 · 1 评论 -
E-R图、N-S图、PAD图、程序流程图
E-R图:E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。矩形框:表示实体,在框中记入实体名。菱形框:表示联系,在框中记入联系名。椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直...原创 2020-03-07 17:40:22 · 16796 阅读 · 1 评论 -
关于 -128 ,+128,-0,+0,-1 的反码补码理解(转载自博客园)
一. 反码的范围反码表示法规定:正数的反码与其原码相同。负数的反码是对其原码逐位取反,但符号位除外。在规定中,8位二进制码能表示的反码范围是-127~127。此时(字长为8位), -128没有原码和反码(只有补码)。那么,为什么规定字长8位时-128没有原码和反码呢?下面解释。首先看-0,[-0]原码=1000 000,其中1是符号位,求反操作,算出[-0]反码=1111 1111,...转载 2020-02-12 16:07:10 · 1107 阅读 · 0 评论 -
unsigned类型值(无符整型)的减法
unsigned 类型值的含义是 0U-unsigned 类型值。值小者减值大者会得到一个负数,然而unsigned类型表示的值的范围是[0, 232-1],即[0, 4294967295]。PS:unsigned int 16、 0~65535 ;32 、 0~42亿但是却在 int 型表示值(补码)的范围内,所以把这个int类型的值的补码形式理解为相同形式的unsigned类型。...原创 2020-02-11 22:22:49 · 5584 阅读 · 0 评论