自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(294)
  • 收藏
  • 关注

原创 C++基于多态的职工管理系统

目录一、管理系统的需求二、创建项目 三、创建管理类3.1 创建文件3.2 知识扩展3.2.1 头文件和源文件各司其职 3.2.2 头文件中第一行的#pragma once语句1. 为什么需要头文件保护?2. #pragma once 的作用3. #pragma once vs. 传统的 #ifndef 方式四、菜单功能4.1 添加成员函数4.2 菜单功能实现 4.3 测试菜单功能 五、退出功能(0.退出管理程序的设计)5.1 提供功能接口5.2 实现退出功能5.3 测试退出功能六、 创建职工类6.1 创建职

2025-03-24 19:14:48 827

原创 C++文件操作

0、文件操作。

2025-03-20 20:36:30 695

原创 C++ 之多态 ------ C++面向对象三大特性之一【三大特性:封装、继承、多态】

分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类代码组织结构清晰可读性强利于前期和后期的扩展以及维护。

2025-03-20 17:19:26 668

原创 C++中执行delete ptr;之后一般还需要将ptr=nullptr;,这是为什么呢?

访问空指针(nullptr)是可以的,访问空指针指向的内容会导致程序崩溃!本身仍然是一个有效的指针变量,但它。的堆内存后,我们通常会。如果一个指针被置为空(

2025-03-20 10:31:06 610

原创 PyCharm的终端(terminal)中进入指定conda虚拟环境

参考这篇博文:

2025-03-19 15:58:07 265

原创 C++ 虚继承、虚基类指针、虚基类表

当一个类有虚基类时,编译器需要额外的指针来解析虚基类的偏移,从而支持动态多态。的大小可能导致对齐问题(例如,它可能是 4 字节,而后续成员需要 8 字节对齐),编译器插入。计算所需的存储空间,并决定对象的内存分布,即便还没有实际分配对象。,表明该类可能包含指针(通常为 8 字节,在 64 位系统上)和一些数据成员。生成,可用于分析 C++ 类的内存布局和虚拟继承机制的实现。这幅图片展示了 C++ 代码的编译结果,分析的是一个。的情况下,帮助对象正确解析虚基类的存储位置。类的内存布局,并报告。

2025-03-19 11:33:52 883

原创 C++中的菱形继承问题【使用虚继承方法来解决】

继承类型构造函数调用顺序析构函数调用顺序普通菱形继承(非虚继承)虚继承下的菱形继承。

2025-03-19 11:07:46 737

原创 C++继承 ---- 继承是面向对象三大特性之一【好处:可以减少重复的代码】

有些类与类之间存在特殊的关系,如下图中所示:从这幅图可以直观地看出继承在面向对象编程(OOP)中的应用。最顶层是“动物”类(基类):所有猫和狗的共同特性(如生命体、能移动等)都可以定义在这个类中。第二层是“猫”和“狗”类(派生类):它们继承了“动物”的共性,同时可以添加各自独特的行为,比如猫会“喵喵叫”,狗会“汪汪叫”。第三层是具体的猫和狗品种:比如加菲猫、布偶猫、哈士奇、德牧等。它们不仅拥有“猫”或“狗”的特性,还可以进一步细化,比如加菲猫的扁脸、哈士奇的“二哈”性格等。结合继承来看:代码复用。

2025-03-18 20:54:38 575

原创 实用插件推荐 -------- 一个可以将任意语言(python、C/C++、go、java等)的程序转换为汇编语言的小插件

界面:参考自:

2025-03-18 20:48:58 151

原创 C++ 运算符重载{加号、左移、递增、赋值、关系、函数调用运算符重载} 两种重载方式:利用成员函数重载、利用全局函数重载【重载方式视情况而定】

运算符重载对已有的运算符重新定义,使其能够作用于用户自定义类型,并赋予其适应特定需求的功能,同时保持与内置数据类型相同的语法习惯。举个例子来说明上面的红字部分:int a=10;int b=2;int c=a+b;int m_B;Person p1;p1.m_A=10;p1.m_B=5;Person p2;p2.m_A=10;p2.m_B=5;

2025-03-18 10:59:48 954

原创 C++ 友元 / friend关键字解读

成员函数做友元时,我们可以只让某个特定的成员函数访问类的私有成员,而不是整个类。,让特定的外部函数或类能够访问私有数据。,就像你允许好朋友进入你的卧室一样。访问权限就类似这种关系。通过友元机制,我们可以在。在生活中,你的家里有。在 C++ 里,类的。原因: friend。

2025-03-17 16:56:45 913

原创 C++ const修饰成员函数以及对象【本质上修饰的是this指针】

在 C++ 中,const修饰成员函数或对象时,本质上是修饰this指针,使其指向const对象,进而保证成员函数不能修改成员变量(除mutable变量外)。在这个过程中this指针的变化情况:从常量指针变为指向常量的常量指针。

2025-03-17 14:55:53 340

原创 C++空指针(nullptr)访问成员函数

this。

2025-03-17 14:09:02 306

原创 C++this指针的扩充

的值未正确赋值,保持了默认的未初始化状态(通常是 0,具体值可能依赖于编译器和环境)。每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码。C++通过提供特殊的对象指针,this指针,解决上述问题。那么问题是:这一块代码是如何区分哪个对象调用自己的呢?我们知道在C++中成员变量和成员函数是分开存储的。this指针是隐含每一个非静态成员函数内的一种指针。,它仍然是一个未定义的值(通常默认为。this指针不需要定义,直接使用即可。这样,我们就可以正确初始化。,影响性能,并可能产生。

2025-03-17 13:59:11 790

原创 C++ 对象模型/ C++中成员变量和成员函数分开存储

和。

2025-03-16 10:42:07 559

原创 C++ 非类成员函数指针(静态与非静态)、类成员函数指针(静态与非静态)以及这些函数地址的获取

/ 这里就定义了一个指向函数(这个函数参数仅仅为一个 int 类型,函数返回值是 int 类型)的指针 fp。在 C++ 中,获取函数的地址和打印函数的地址需要注意指针的类型。下面我们分别介绍普通函数指针、静态函数指针静态成员函数指针和非静态成员函数指针的情况。并用这些指针打印他们的地址。

2025-03-16 10:10:39 549

原创 类中静态成员-----static关键字在类中的应用

静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员。静态成员变量1. 所有对象共享同一份数据【这是因为static修饰的类成员变量属于整个类,而不是某个对象】2. 在编译阶段分配内存3. 类内声明,类外初始化静态成员函数1. 所有对象共享同一个函数【静态成员函数属于类本身,不属于某个具体对象】2.静态成员函数可以访问静态成员变量,因为静态成员变量属于整个类,而不是某个对象。3.静态成员函数无法访问非静态成员变量,因为它们没有this指针(不依赖对象)。

2025-03-15 10:32:06 757

原创 C/C++程序的内存模型---内存四区【粗分】(栈区、堆区、全局/静态存储区(包含常量区)、代码区)或内存五区【细分】(栈区、堆区、全局/静态存储区、常量区、代码区)

物理地址是由操作系统和硬件管理的,普通程序无法直接读取或操作物理地址(除非使用特殊的驱动或操作系统提供的接口)。存放函数的参数值、函数的返回值,局部变量(包含const修饰的局部常量)等。,进程可以访问这些地址,而物理地址的映射由操作系统和MMU(内存管理单元)管理。,而不是物理地址,物理地址的管理和映射是由操作系统和MMU负责的。不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程。但在C++代码中,正常的用户态程序是无法直接访问物理地址的。,因为进程退出后,操作系统会清理其占用的所有资源。

2025-03-14 16:55:50 701

原创 C++中类对象作为类成员(对象成员/成员对象)的一些注意事项

在 C++ 中,类的成员可以是另一个类的对象,这样的成员称为对象成员(或者称为成员对象这是一种组合(Composition)关系。class A{};// B类中有对象 a 作为成员,a 为对象成员// 那么当创建 b 对象时,a 与 b 的构造函数和析构函数调用顺序是什么样的呢?1.2 对象成员的特点成员对象在包含类构造时,按声明顺序自动构造,在析构时按声明顺序的逆序自动析构。若成员对象无默认构造函数,必须通过初始化列表初始化。

2025-03-13 22:09:44 963

原创 C++对象的初始化和对象所占资源的清理-----初始化列表

C++ 提供了语法,可以在中用来初始化类的成员变量。它的主要优势是,特别是在初始化const或reference类型的成员时,以及避免额外的赋值操作。

2025-03-13 20:38:49 230

原创 struct和class的区别

本质相同,功能完全一致。,支持继承、方法重写(虚函数)、多态等特性。,都可以包含成员变量、成员函数。,但它们都可以手动修改访问权限。,都可以定义构造函数和析构函数。

2025-03-12 12:00:55 944

原创 C++----面向对象编程之封装【通过访问控制符public、private、protected实现】

封装(Encapsulation)是面向对象编程(OOP)的核心特性之一,它的主要目的是,从而提高代码的安全性和可维护性。封装的核心思想就是,就像 ATM 机一样,你。🏦💳:在 ATM 机上,用户,但 ATM 机的内部实现是对用户隐藏的。这就像一个,它的内部运作是,但提供了一些公共接口(Public 方法)供用户使用。privateprotectedpublicC++ 通过privateprotectedpublic)来实现封装,使类的成员变量(数据)和成员函数(方法)具有不同的访问权限。

2025-03-12 11:29:12 1004

原创 ubuntu下在pycharm中配置已有的虚拟环境

在配置pycharm解释器之前你需要先创建虚拟环境以及安装pycharm。最后点击右下角的创建按钮,至此PyCharm的虚拟环境就配置完成了。文件夹名称可根据项目需求自定义,作者在此示例中使用。作者使用的ubuntu系统位于PC机上的虚拟机。然后打开pycharm,按照如下步骤点击“新建项目”,作者安装的pycharm版本为2023社区版。至此,关于Pycharm的内部配置就完成了。的家目录下创建一个名为。

2025-03-11 09:47:26 387

原创 (base)user1@ubuntu:~$pip install xxxx(xxxx表示第三方库) 分析

在这种情况下,base。

2025-03-10 21:31:01 353

原创 ubuntu系统中命令行起始位置:root@zhangsan:~#、Lisi@zhangsan:~$、Lisi@zhangsan:/$以及概念根目录与家目录的联系

root:这一部分显示的是当前登录系统的用户名。root是 Linux 系统中的超级用户,拥有系统的所有权限,通常用于管理系统和执行需要高级权限的任务。zhangsan:这是机器的名称,通常在系统配置时设置。它标识了你正在使用的计算机或服务器的名称。你可以通过hostname命令查看或更改主机名。:这个符号表示当前的工作目录,是用户的家目录(在root用户的情况下,通常是/root目录)。所以,表示当前目录是root用户的主目录。:如果你看到的是,说明你是以超级用户身份登录的,具有管理员权限。

2025-03-10 19:21:29 788

原创 C++基础知识-----函数重载(Function Overloading)

的特性。换句话说,如果在同一作用域内的几个函数名字相同但形参列表不同,我们称这几个函数为重载函数。主要用于提高代码的可读性和灵活性,避免为类似功能的函数取多个不同的名字。

2025-03-09 12:03:15 788

原创 C++面向对象程序设计的三大基本特性-----封装、继承、多态

✅在中,通常认为是三大基本特性,而是的一种具体体现。(动态绑定 Dynamic Binding)Animal *a是一个Animal,但它指向的是Dog类型的对象。

2025-03-09 11:16:24 934

原创 C++--迭代器(iterator)介绍---主要介绍vector和string中的迭代器

迭代器(iteratior)是一种类型【这里的类型不是基本数据类型(int、double等),而是一种STL容器内部定义的“类型”】,用于访问容器中的元素或者在元素之间移动。🚀一句话总结迭代器是 STL 容器内部定义的一种特殊类型,本质是指针或指针封装的类,用于遍历和操作容器中的元素。C++ 迭代器(Iterator)是一种用于遍历 STL 容器(如vectorlistmap)的对象,本质上是一个封装了指针或遍历逻辑的类或结构体。它支持解引用、++递增等操作,使用户能够像指针一样访问容器元素。根据。

2025-03-09 00:04:42 1012

原创 C++中的.h文件一般是干什么的?

简而言之,C++中的.h文件主要是用来声明类、函数、变量、宏等,以便其他源文件可以使用它们。它们通常不会包含实现部分,而实现部分则放在.cpp文件中。这种分离声明和实现的方式可以帮助组织代码,提高代码的可维护性和可重用性。

2025-03-06 21:48:32 445

原创 typedef关键字、using关键字

关键字用于为已有类型定义别名。尽管 C++11 引入了。关键字作为更现代的类型别名定义方式,但。在 C 语言中,定义结构体时通常会使用。直接用于模板别名,而。

2025-03-06 21:14:09 266

原创 auto关键字、decltype关键字

auto 是类型说明符,通过变量的初始值来推断变量的类型。编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型。然而要做到这一点并非那么容易,有时甚至根本做不到,为了解决这个问题,C++11新标准引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型。和原来那些只对应一种特定类型的说明符(比如double)不同,auto让编译器通过初始值来推算变量的类型。显然,auto定义的变量必须有初始值:定义两个相同类型的变量,如下:int val2=3;

2025-03-06 20:56:49 987

原创 C++复合类型

引用是对象的别名: 引用并不占用额外的内存,它只是已有变量的别名,所有操作都会作用到原始变量上。引用必须初始化: 引用在声明时必须绑定到一个合法的对象,不能不初始化。C++ 不允许声明没有初始化的引用。引用不能更改绑定对象: 一旦引用绑定到某个对象,它就不能再绑定到其他对象。也就是说,引用是不可重新绑定的。引用不占用内存: 引用本身不会占用新的内存空间。它只是一个简单的别名,直接指向原对象的内存位置。引用不能为NULL或nullptr: 引用必须引用有效的对象,不能指向NULL或。

2025-03-06 16:49:53 886

原创 C++----const关键字与constexpr关键字

✅。

2025-03-05 21:43:32 815

原创 leetcode344----反转字符串

344. 反转字符串 - 力扣(LeetCode)编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例 1:示例 2:在 C++ 中,reverse是STL(标准模板库)算法中的一个函数,定义在头文件中。它用于反转容器(如std::array)或 C++ 数组的元素顺序。first:指向要反转范围的起始位置(包含last:指向要反转范围的结束位置(不包含反转。

2025-03-05 12:22:04 828

原创 C++中的 continue 与 break

✅continue用于跳过当前迭代的剩余部分,进入下一次循环;✅continue在for循环中会执行迭代更新部分,然后继续判断;✅continue适用于过滤特定条件,而break用于完全终止循环;✅continue只影响当前所在的循环层级,不会跳出多层循环。

2025-03-05 10:59:47 1056

原创 ASCII码(美国信息交换标准代码)

信息交换标准代码是基于的一套电脑系统,主要用于显示现代英语和其他语言。它是最通用的标准,并等同于国际标准 ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。

2025-03-04 23:02:02 981

原创 有效的字母异位词【化学中的同分异构体】

242. 有效的字母异位词 - 力扣(LeetCode)给定两个字符串s和t,编写一个函数来判断t是否是s的 字母异位词。字母异位词:字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。示例 1:true示例 2:输出:false进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

2025-03-04 22:47:22 761

原创 leetcode142----环形链表

142. 环形链表 II - 力扣(LeetCode)给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始如果pos是-1,则在该链表中没有环。pos不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改链表。示例 1:返回索引为 1 的链表节点链表中有一个环,其尾部连接到第二个节点。

2025-03-04 21:15:52 1447

原创 leetcode面试题-------链表相交

面试题 02.07. 链表相交 - 力扣(LeetCode)给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。图示两个链表在节点c1开始相交题目数据保证整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构。示例 1:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点。

2025-03-04 16:06:57 900

原创 C++八股-----算法复杂度【时间复杂度与空间复杂度】

时间复杂度(Time Complexity)是计算机科学中用于描述算法运行时间的一个数学函数,它定量地描述了算法的运行时间与输入数据规模之间的关系。时间复杂度用于衡量算法随着输入规模增长而执行时间的增长趋势,通常计算基本操作的执行次数。统计的是算法的「计算操作数量」,而不是「运行的绝对时间」。计算操作数量和运行绝对时间呈正相关关系,并不相等。算法运行时间受到「编程语言 、计算机处理器速度、运行环境」等多种因素影响。

2025-03-04 11:03:01 974

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除