![](https://img-blog.csdnimg.cn/direct/b82fb77746bc4ca3a83a4004eb8614d3.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++
文章平均质量分 72
欢迎来到C/C++专栏!在这个专栏中,我们将深入探讨C和C++这两种广泛使用的编程语言。无论你是编程初学者还是有经验的开发者,这里都将为你提供丰富的知识和实用的技巧。
Srlua小谢
大二本科在读,阿里云专家博主,CSDN见习校园主理人,CSDN全栈领域新星创作者,工业互联网平台初级开发工程师,荣获第九届中国国际'互联网+’大学生创新创业大赛“校级优秀奖”,2023年第十二届“赢在广州”暨粤港澳大湾区大学生创业大赛“项目创新奖”。新的一年,一起加油吧!可接课设或作业等、私信~
展开
-
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
此时用户再在类外自己实现一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值运算符重载只能是类的成员函数。具体来说,需要重载拷贝构造函数和赋值运算符,将原始对象中的数据复制到新对象中,并使用新的内存空间。注意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值。,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。这里会发现运算符重载成全局的就需要成员变量是公有的,那么问题来了,封装性如何保证?原创 2024-05-24 08:30:00 · 1394 阅读 · 71 评论 -
C++进阶之路:何为拷贝构造函数,深入理解浅拷贝与深拷贝(类与对象_中篇)
这意味着拷贝后的对象和原始对象共享同一块内存,当其中一个对象修改了内存中的值时,另一个对象也会受到影响。然而,当一个类拥有指针或引用等需要特别注意的成员变量时,编译器生成的默认拷贝构造函数不能保证正确的深拷贝,会导致浅拷贝问题和内存泄漏等问题。需要特别注意的是,如果类中包含指针或资源管理的成员变量(如动态分配的内存),则需要手动实现深拷贝以确保正确的对象复制和资源释放。因此,当类中存在指针或资源管理的成员变量时,通常需要自定义拷贝构造函数和赋值运算符,以实现深拷贝,避免出现潜在的问题。原创 2024-05-23 08:30:00 · 2259 阅读 · 87 评论 -
C++进阶之路:何为默认构造函数与析构函数(类与对象_中篇)
6.关于编译器生成的默认成员函数,为什么在不实现构造函数的情况下,编译器会生成默认的构造函数。下面的程序我们会看到,编译器生成的默认析构函数,对自定类型成员调用它的析构函数。就是我们使用的class/struct/union等自己定义的类型,对于下面的程序,就会发现编译器生成默认的构造函数会对。5. 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成。是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务。原创 2024-05-16 08:30:00 · 1136 阅读 · 94 评论 -
C++进阶之路:探索访问限定符、封装与this指针的奥秘(类与对象_上篇)
大端模式(Big-Endian)是指数据的高位字节存储在内存的低地址处,而数据的低位字节存储在内存的高地址处。小端模式(Little-Endian)则相反,数据的低位字节存储在内存的低地址处,而数据的高位字节存储在内存的高地址处。如前所述,成员函数不占用类实例的内存空间。:是的,但需要注意的是,对齐参数应该是 2 的幂,并且小于或等于平台支持的最大对齐值。4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。原创 2024-05-09 01:58:57 · 1539 阅读 · 64 评论 -
C++进阶之路:深入理解编程范式,从面向过程到面向对象(类与对象_上篇)
这种编程范式适用于简单的、直接的问题和算法,它注重顺序性和线性执行,即按照特定的顺序执行一系列的函数。:在某些情况下,将敏感或重要的代码分割到单独的文件中可以提高代码的安全性。例如,可以将包含敏感数据的数据库连接代码放在一个单独的文件中,并限制对该文件的访问权限。当代码被分割到多个文件中书写时,这加强了代码的多个重要特性,这些特性通常被称为“软件设计的原则”或“代码的可维护性”。然而,从语法的角度来看,C++的类与C语言的结构体在定义上非常相似,因为类的成员(包括数据成员和成员函数)都是通过花括号。原创 2024-05-08 22:10:23 · 1500 阅读 · 104 评论 -
C++进阶之路:何为命名空间、缺省参数与函数重载
对于指针或引用参数,指向const和非const的指针或引用是不同的,可以用于重载。但是,对于值传递(即按值传递参数),const和非const版本不能构成重载,因为值传递会进行拷贝,拷贝的对象本身是非const的。在C++中,函数重载(Function Overloading)允许我们在同一作用域内定义多个同名函数,但它们的参数列表(参数类型、参数数量或参数顺序)必须不同。如果函数通过默认参数在调用时省略了某些参数,这些省略的参数在重载解析时仍然被视为存在。你可以在命名空间内部定义带有缺省参数的函数。原创 2024-05-06 13:59:14 · 1213 阅读 · 67 评论 -
Visual Studio 2022中创建的C++项目无法使用万能头<bits/stdc++.h>解决方案
【代码】Visual Studio 2022中创建的C++项目无法使用万能头<bits/stdc++.h>解决方案。原创 2024-02-08 00:02:21 · 1857 阅读 · 8 评论 -
C++ STL精通之旅:向量、集合与映射等容器详解
STL 作为一个封装良好,性能合格的 C++ 标准库,在算法竞赛中运用极其常见。灵活且正确使用 STL 可以节省非常多解题时间,这一点不仅是由于可以直接调用,还是因为它封装良好,可以让代码的可读性变高,解题思路更清晰,调试过程往往更顺利。原创 2024-02-06 17:14:08 · 1889 阅读 · 38 评论 -
位运算之妙用:识别独特数字(寻找单身狗)
找出一个只出现过一次的数字的问题处理方法就是找一个数字把里面所有的数字都异或一遍,利用异或两次等于没异或的特点来处理。那么如果有两个数字都只出现了一次,那么如此得到的应该是两个数异或的结果。例如1 2 3 4 1 2,异或完的结果应该是3^4得到的111,那么随便找一位就行了。例如找最低位,那么这一位是1的有1 3 1,是0的有2 4 2,由于是利用异或结果为1的某一位分的组,所以两个待查询数字一定分别在两组中。通过异或运算,可以将出现两次的元素抵消掉,最后剩下的就是只出现一次的元素。原创 2024-02-03 17:09:56 · 609 阅读 · 16 评论 -
函数指针数组在实现转移表时的应用:以计算器为例
例如,在一个简单的计算器程序中,转移表可以用来根据用户输入的操作符(如加、减、乘、除)来调用相应的数学运算函数。这样做的好处是,当需要添加新的操作时,只需添加一个新的函数并将其地址添加到转移表中,而不需要修改现有的条件分支逻辑。在编程中,转移表是一种高效的分支逻辑实现方式,特别是在有多个条件分支的情况下。它通过将每个分支的逻辑封装成单独的函数,并将这些函数的地址存储在一个数组中,从而避免了复杂的。:程序运行时,根据用户的输入或其他条件,从数组中选择一个函数指针,并通过该指针调用相应的函数。原创 2024-02-03 02:48:22 · 516 阅读 · 2 评论 -
基于C++的面向对象程序设计:类与对象的深入剖析
此程序可以分为相对独立的三个部分,一是对 area 类的定义,二是对 squarearea 子类及子类函数的定义,三是主函数 main()。私有成员 width 只能先被类中成员函数访问,再通过相关的公共成员函数实现外部访问。此程序可以分为相对独立的两个部分,一是对 area 类的定义,二是主函数 main()。area 类定义了两个双精度型的公有成员,主函数访问类的公有成员实现数字相乘。成员函数描述了类的行为。定义一个包含三个 double 型公有成员的类,主函数访问类的公有成员实现体积计算。原创 2024-01-31 23:56:04 · 813 阅读 · 1 评论 -
深度解析指针与数组:探索内存管理的艺术
sizef中单独放数组名,这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。输出的结果是:40,如果arr是数组首元素的地址,那输出应该的应该是4/8才对。我们类比一下,整型数组,是存放整型的数组,字符数组是存放字符的数组。我们发现数组名和数组首元素的地址打印出的结果一模一样,(整个数组的地址和数组首元素的地址是有区别的)数组传参的本质是传递了数组首元素的地址,所以。的,所以形参的数组是可以省略掉数组大小的。这里的数组名表示整个数组,取出的是。1.数组在内存中是连续存放的。原创 2024-01-29 16:04:31 · 1011 阅读 · 2 评论 -
深入探究C语言中的常量指针与野指针概念及其应用
定义指针变量时,如果没有进行初始化,那么该指针的值是随机的,可能指向任意的内存地址。野指针的存在可能会使得程序的调试变得非常困难,因为它们可能在程序的任何地方引发错误,而且这些错误可能不会立即显现,增加了查找和修复问题的难度。如果野指针指向了一个正在被其他部分的程序使用的内存空间,并且通过这个野指针修改了该内存空间的内容,那么可能会导致数据损坏,甚至程序崩溃。当一块内存被释放后,原有的指针如果继续指向这块内存,而没有置空或者重新赋值,这个指针就变成了所谓的“悬挂指针”或“野指针”。原创 2024-01-28 22:32:57 · 1077 阅读 · 8 评论 -
代码(c语言)实现顺序表头尾插入删除(实现菜单)
虽然静态顺序表不存在内存泄漏问题,但动态顺序表通过合理的内存管理(如使用malloc和free函数)也可以避免内存泄漏的风险。动态顺序表在数据量增大时可以自动扩容,而在数据量减少时可以缩小容量,这种灵活性使得它更加适用于数据规模变化较大的场景。动态顺序表可以根据数据量的增长动态增加容量,避免了因预先分配过大空间而造成的浪费。相较于静态顺序表的好处在于其能够根据需要动态地调整存储空间的大小。原创 2024-01-24 21:28:06 · 560 阅读 · 6 评论 -
计算器——可支持小数的任意四则运算(中缀表达式转为后缀表达式算法)
如果遇到运算符,则分两种情况处理:如果运算符优先级大于等于栈顶运算符的优先级,则将栈顶运算符弹出并压入后缀表达式,直到栈为空或者栈顶运算符的优先级低于当前运算符为止,然后将当前运算符压入栈;如果运算符优先级小于栈顶运算符的优先级,则直接将当前运算符压入栈。需要注意的是,在实际应用中,可能还需要进行一些额外的处理,比如补全缺失的括号,以确保表达式的正确性。当表达式扫描完毕后,如果栈中仍有剩余的运算符,则将这些运算符依次弹出并压入后缀表达式。初始化两个栈,一个用于存储操作数,一个用于存储运算符。原创 2023-12-26 21:18:46 · 794 阅读 · 3 评论 -
邻接矩阵表示 深度遍历 广度遍历
邻接矩阵表示法是一种图的表示方法,其中每个顶点都有一个唯一的索引,而每条边则由两个顶点之间的连接确定。深度优先遍历(DFS)和广度优先遍历(BFS)是两种常用的图遍历算法。深度优先遍历从根节点开始,沿着一条路径尽可能深入地访问节点,直到到达叶子节点。然后回溯到上一个节点,继续访问其他未访问过的节点。广度优先遍历从根节点开始,首先访问所有与根节点直接相连的节点,然后再访问这些节点的邻居节点,以此类推。在邻接矩阵表示法中,可以使用递归或栈来实现深度优先遍历。在邻接矩阵表示法中,可以使用队列来实现广度优先遍历。原创 2023-12-22 16:58:59 · 1141 阅读 · 6 评论 -
最小操作次数问题
【代码】最小操作次数问题。原创 2023-12-21 23:45:18 · 638 阅读 · 5 评论 -
X 进制减法问题
该代码使用了取模操作,可以处理结果在整型范围内溢出的情况。同时,采用了倒序输入和遍历数组的方式,可以避免数组下标越界的问题。原创 2023-12-21 02:02:07 · 590 阅读 · 2 评论 -
修剪灌木问题
【代码】修剪灌木问题。原创 2023-12-20 00:28:21 · 611 阅读 · 4 评论 -
用C语言写一个扫雷小游戏
在Release模式下,编译器会生成优化程度较高的代码,以提高程序的运行速度。此外,Release模式下还会禁用一些调试工具,如断点、内存泄漏检测等,以减小程序的大小和提高性能。在Debug模式下,编译器会生成优化程度较低的代码,以便更容易地找到程序中的错误。每个文件负责一个特定的功能或模块,可以独立地进行修改和测试,提高了开发效率。如果多个文件之间存在相似的功能或模块,可以将它们封装成一个公共模块,然后在其他文件中引入和使用。5. 在所选配置的属性页中,可以修改相应的设置,如优化级别、调试信息等。原创 2023-12-10 17:26:32 · 1355 阅读 · 2 评论 -
C语言的流程控制语句
语句的执行过程如下:首先计算expression的值,然后依次与case后面的常量表达式进行比较,如果匹配成功,则执行对应的语句块,直到遇到break语句或switch语句结束;在这个例子中,当i等于5时,程序会执行continue语句,跳过当前循环体的余下部分(即printf语句),然后立即开始下一次循环。在这个例子中,当i等于5时,程序会执行break语句,跳出当前for循环,不再执行循环体中的余下部分(即printf语句)。),它们由特定的语句定义符组成,C语言有九种控制语句。1.条件判断语句也叫。原创 2023-12-05 01:31:22 · 711 阅读 · 7 评论 -
用C语言写一个猜随机数的小游戏
大家一起加油,多多练习,不要懈怠!原创 2023-12-03 00:17:54 · 404 阅读 · 7 评论