- 博客(53)
- 收藏
- 关注
原创 西嘎嘎学习 - C++函数重载和运算符重载 - Day 12
运算符重载允许我们为自定义类型(如类)定义运算符的行为,例如,我们可以为一个 Complex 类定义 + 运算符,使其可以像 a + b 一样使用。public:// 重载 << 运算符(友元函数)return out;int main()// 输出: 3 + 4ireturn 0;内容说明函数重载同名函数,参数不同,编译时决定调用哪个运算符重载为自定义类型定义运算符行为,使用operator可重载运算符大部分运算符都可以重载,但不能改变优先级不可重载运算符?
2025-09-24 11:01:04
919
原创 西嘎嘎学习 - C++继承实例:动物世界系统 - Day 11
本文设计了一个基于C++的动物世界系统,采用模块化编程实现类层次结构。系统包含Animal基类及Mammal、Bird两个派生类,通过虚继承解决菱形继承问题。FlyingMammal类多继承上述两个类,展示复杂继承关系。项目采用头文件与实现文件分离的结构,使用protected控制成员访问,通过虚函数实现多态(如speak()方法)。每个类包含构造/析构函数输出生命周期信息,并实现了特有方法(如fly()、breathe())。该系统具有良好的扩展性,可轻松添加新的动物类别,展示了面向对象编程中继承、多态等
2025-09-11 15:47:58
271
原创 西嘎嘎学习 - C++ 继承 - Day 10
本文介绍了面向对象编程中的继承机制。继承允许派生类复用基类的属性和方法,支持单继承和多继承两种形式。文章详细说明了基类与派生类的关系、访问控制(public/protected/private)、三种继承方式(public/protected/private)及其对成员可见性的影响,并通过C++代码示例演示了继承的实现。此外,还探讨了构造函数/析构函数的调用顺序、多继承的菱形问题及虚继承的解决方案。继承机制能有效提高代码复用性和开发效率,是面向对象编程的重要特性。
2025-09-11 11:17:46
1087
原创 西嘎嘎学习 - 学生管理系统 - Day 9
本文介绍了一个基于C++的学生管理系统实现,主要包含三个核心类:Student类封装学生基本信息(姓名、学号、成绩)并提供相关操作方法;Teacher类继承Student类并扩展教师职称属性;StudentManager类负责管理学生对象集合,提供添加、查询、排序及文件存储功能。系统采用面向对象设计,运用了封装、继承、多态等特性,同时涉及动态内存管理、文件IO和STL容器操作。项目结构清晰,包含头文件与实现文件的分离,适合用于学习C++面向对象编程的基础概念和实际应用。
2025-09-09 16:10:43
645
原创 西嘎嘎学习 - C++ 类 & 对象 - Day 8
对象是类的一个实例,通过类定义后,可以创建多个对象,每个对象都有自己的数据和行为。成员函数可以在类内部定义(内联),也可以在类外部定义(外联public:public:概念说明类用户自定义的数据类型,封装数据和方法对象类的实例构造函数初始化对象析构函数清理资源封装隐藏实现细节继承子类继承父类多态同一接口不同实现友元访问私有成员运算符重载自定义运算符行为静态成员属于类而非对象this 指针指向当前对象。
2025-09-09 15:53:37
554
原创 西嘎嘎学习 - C++vector容器 - Day 7
/ 定义一个存储 int 类型的 vectorstd::vector 是 vector 的命名空间int 是 vector 中存储的数据类型。numbers 是 vector 的变量名。//删除最后一个元素功能说明在 vector 末尾添加元素pop_back()删除 vector 的最后一个元素size()获取 vector 中元素的个数at()安全访问元素(带越界检查)[]快速访问元素(不检查越界)clear()清空 vector 中的所有元素empty()
2025-09-08 18:13:43
379
原创 西嘎嘎学习 - C++存储类 - Day 6
存储类(Storage Class) 是C++中用于控制变量的生命周期、作用域和存储位置的关键字。不同的存储类决定了变量在程序运行时如何被存储、何时被创建、何时被销毁。 是C++中默认的存储类,用于局部变量。它表示变量在函数内部定义,函数执行结束后自动销毁。4 存储类(1)说明 用于建议编译器将变量存储在寄存器中,以提高访问速度。但编译器不一定采纳这个建议。(3)注意 变量不能取地址( 是非法的) 用于定义静态变量,
2025-09-08 17:10:17
371
原创 西嘎嘎学习 - C++修饰符类型 - Day 5
修饰符说明示例signed有符号数unsigned无符号数short短整型short c;long长整型long d;long long更长的整型char字符类型float单精度浮点数double双精度浮点数类型限定符(Type Qualifiers)是C++中用于修饰变量的访问方式的关键词。它们不会改变变量的类型,但会限制变量的使用方式,比如是否可以被修改、是否可以被多个线程访问等。限定符说明示例const值不能被修改volatile值可能被外部修改restrict。
2025-09-08 16:01:32
973
原创 西嘎嘎学习 - C++常量 - Day 4
const#define 常量名 值注意:#define 是宏定义,不是变量,它在编译前就被替换,没有类型检查,容易出错。类型说明示例const 常量推荐使用,有类型检查#define常量不推荐使用,宏定义命名规范全大写 + 下划线MAX_AGEGRAVITY作用定义不会改变的值圆周率、最大值、最小值等。
2025-09-08 15:25:36
376
原创 西嘎嘎学习 - C++变量类型 - Day 3
本文介绍了C++中的变量类型、定义、声明及初始化。主要内容包括:1) 11种基本变量类型(整数、浮点、字符、布尔等)及其字节大小;2) 变量定义与声明的区别,包括局部与全局变量的作用域;3) 变量命名规则与常见错误;4) 左值(可赋值)与右值(临时值)的概念及引用方式。文中通过具体示例说明了变量声明位置、多变量声明、初始化语法等关键知识点,并对比了左值和右值的特性及其在C++11中的引用方式。
2025-09-08 11:41:43
771
原创 西嘎嘎学习 - C++数据类型 - Day 2
枚举类型是可以自定义的数据类型,允许定义一组命名的整型常量。类型说明enum传统枚举,枚举值在全局作用域中enum class强类型枚举,枚举值在枚举类型的作用域中,更安全类型转换方式用途是否推荐隐式转换自动转换,如int到double✅ 推荐C 风格转换(type)手动转换,不安全❌ 不推荐基本类型或类之间的安全转换✅ 推荐类继承中的安全向下转型✅ 推荐const_cast修改 const 属性⚠️ 谨慎使用重新解释内存,危险❌ 不推荐。
2025-09-08 10:37:23
839
原创 西嘎嘎学习-day 1
C++中的三字符组(Trigraphs)是一种用于在源代码中表示某些特殊字符的机制。由于某些键盘或字符编码不支持某些ASCII字符(如等),C++标准引入了三字符组,允许开发者用三个连续的字符来替代这些特殊字符。
2025-09-05 17:20:37
875
原创 驱动相关基础
层:具体硬件层(I2C传感器)。:I2C 适配器层,驱动厂家实现。I2C_coreI2C核心层,提供I2C设备和驱动的注册、匹配及通信方法。I2C_clientI2C_driver:遵循platform设备驱动分离思想,匹配成功后执行probe函数。I2C传感器挂载在对应的I2C总线上,I2C适配器层驱动由芯片厂家实现,I2C核心层用来管理I2C设备和驱动的注册、匹配以及I2C通信方法,设备驱动层通过将I2C总线上的设备和驱动匹配,执行 probe 函数。应用层调动驱动层接口实现I2C的读取写入。
2025-05-20 15:36:58
845
原创 硬件设备基础
首先 ARM 架构支持 7 种类型的异常,分别是:复位异常,系统重启或开机时会产生此异常。处理器无法识别指令的异常,处理器执行的指令是有规范的,如果尝试执行不符合要求的指令,就会产生此异常。软中断,软件中需要去打断处理器工作,可以使用软中断来执行,当执行 SWI 指令时就会产生此异常。预取指令失败,ARM 在执行指令的过程中,要先去预取指令准备执行,如果预取指令失败,就会产生该异常。读取数据失败。普通中断。快速中断。异常发生时,ARM。
2025-05-12 17:26:38
1141
原创 线程邮箱框架与示例
在多线程编程中,线程邮箱是一种用于线程间通信的数据结构,它通过为每个线程分配一个队列来缓存和传递数据,从而解决多任务并行时数据丢失的问题。线程邮箱的实现方式主要有两种:一是利用系统提供的消息队列机制,二是通过手写链表结构封装实现。后者不仅能够提升代码编写能力,还具有良好的移植性。在具体实现中,线程邮箱通过创建线程任务结构体和消息任务结构体,以及相应的操作函数(如创建邮箱、添加任务、发送和接收消息、销毁邮箱等),来实现线程间的数据传递和同步。通过这种方式,可以有效地协调不同线程间的数据交换,提高系统的整体效率
2025-05-09 16:16:21
421
原创 framebuffer框架与示例
是计算机图形系统中用于存储图像数据的一块内存区域,这些区域直接对应屏幕上的每个像素。当图形系统需要更新屏幕显示时,会从帧缓冲中读取数据并传输到显示设备。
2025-05-06 19:30:36
1145
原创 网络基础-----C语言经典题目(13)
IO 多路复用是一种能够同时对多个 IO 操作进行监控的机制,一旦有 IO 操作准备就绪(可读、可写、出现异常等),它就会发出通知。这一机制主要借助系统调用(select、poll、epoll)来达成,适用于高并发场景。IO 多路复用采用的是单线程轮询多个 IO 事件的工作模式。流程如下:1.把所有需要监控的 IO 描述符(select)都集合起来。2.调用多路复用函数,让线程处于阻塞状态,等待某一个或多个 IO 描述符变为就绪状态。
2025-05-03 15:30:30
1010
原创 网络基础-----C语言经典题目(12)
客户端向服务器发送一个带有SYN标志位的数据包,请求建立连接。服务器收到请求后,发送SYN + ACK包。客户端收到服务器的 SYN + ACK 后,发送ACK包确认。三次握手建立连接时,合并SYN + ACK ,减少一次交互,可以提高效率。四次挥手断开连接时,因全双工特性和数据完整性要求,ACK 和 FIN 需分开发送。确保双向连接独立关闭。
2025-04-30 16:40:38
954
原创 进程与线程-----C语言经典题目(9)
线程的分离属性是一种线程状态设置,它能改变线程结束时的资源回收机制。当线程被设置为分离状态后,一旦线程执行完毕,系统会自动回收它所占用的资源,无需其他线程调用来等待。确保同一时间只有一个线程 / 进程访问共享资源(变量、文件),防止数据竞争和不一致问题。通过实现,使用和保护临界区。// 加锁// 临界区代码(访问共享资源)// 解锁通过sem_t实现,初始值为1时可作为互斥锁(如sem_wait()和sem_post()死锁指的是两个或多个线程(进程)因争夺资源而陷入无限等待的状态。
2025-04-29 10:35:32
824
原创 进程与线程-----C语言经典题目(8)
虚拟地址是运行程序时CPU所生成的地址。线程属于程序能够独立运行的最小执行单元。存在于进程内部,和同一进程的其他线程共享全局变量、文件描述符等资源,不过各自拥有独立的栈空间与程序计数器。
2025-04-27 20:23:41
1121
原创 数据结构------C语言经典题目(7)
时间复杂度是衡量算法执行时间随输入数据规模增长而变化的趋势的指标。它关注的是算法执行时间的“增长率”,而不是具体的执行时间,用于评估算法的效率和优化。
2025-04-25 15:56:51
929
原创 数据结构------C语言经典题目(6)
内存泄漏是指程序动态分配的内存空间(如malloc、calloc、realloc等函数申请)在使用完毕后未被正确释放。即未调用free函数。导致这部分内存无法被系统重新分配利用的现象。内存碎片是指程序运行过程中,由于频繁地申请和释放内存,导致内存中出现大量不连续的小空闲块,这些空闲块虽然总容量足够,但无法满足较大内存块的分配请求,从而影响内存使用效率的现象。
2025-04-25 09:54:46
1582
原创 编译与存储------C语言经典题目(4)
auto 关键字用于修饰局部变量,表示变量的存储方式为自动存储。一般来说,局部变量默认就是auto 存储类,所以auto 关键字通常可以省略。int func()// 显式声明为 auto 变量int y = 20;// 隐式也是 auto 变量(默认)// ...
2025-04-23 10:51:52
619
原创 结构体与共用体-------C语言经典题目(3)
int age;// 声明指向Student结构体的指针)位域通过在结构体成员声明中使用 类型 成员名 : 位数struct 结构体名 {类型 成员名1: 位数1;// 位域成员类型 成员名2: 位数2;// 普通成员(非位域)类型 普通成员名;类型:必须是int 、 unsigned int 、 signed int位数:表示该成员占用的二级制位数,取值为正整数。
2025-04-22 14:16:03
847
原创 指针----------C语言经典题目(2)
基本格式为:数据类型 *指针变量名int *p;// 定义一个指向 int 类型的指针变量char *p;// 定义一个指向 char 类型的指针变量float *p;// 定义一个指向 float 类型的指针变量基本格式为:返回类型 (*指针变量名)(参数列表)例如:int (*fun)(int a)简单来说,回调函数是“被其他函数调用的函数”,当某段代码需要在特定事件发生时、或完成某个操作后调用一个自定义函数时,会将这个自定义函数的指针作为参数传递进去,供其在适当的时候调用。
2025-04-19 16:15:33
860
原创 函数与数组---------C语言经典题目(1)
字符串是由字符组成的序列,并且以空字符“\0”(ASCII码值为0)作为结尾标志的一维字符数组。字符串在内存中占用连续的字节空间,末尾的‘\0’不计入字符串的实际长度,但用于标记字符串的结束。比如:字符串“hello”,在内存中实际存储为h e l l o \0,共六个字节。
2025-04-18 16:34:46
776
原创 Linux自学day24-进程和线程2
这段代码的主要功能是创建一个子进程,子进程休眠 10 秒后以退出状态码 10 结束,父进程等待子进程结束并回收其资源,同时根据子进程的退出状态输出相应的信息。该文件定义了一个简单的 C 程序,其主要功能是打印一条问候信息、当前进程的进程 ID(PID),并遍历命令行参数列表,将每个参数的索引和值打印出来。同时,代码中包含了一段被注释掉的用于打印环境变量的代码。这段代码的主要功能是创建一个子进程,并在子进程中执行。该文件定义了另一个 C 程序,其主要功能是使用。,并传递一组命令行参数。编译生成的可执行文件。
2025-02-21 18:43:53
390
原创 Linux自学day23-进程和线程
僵尸进程是进程执行结束后,空间没有被回收的进程。产生原因是子进程结束时,父进程未回收其空间。避免方法有两种:一是让父进程先结束,子进程成为孤儿进程被 init 进程收养,子进程结束时 init 进程回收其空间;二是子进程结束时,父进程使用 wait 或 waitpid 函数回收子进程空间。
2025-02-20 19:05:57
581
原创 Linux自学day22-实现简单的单词及单词含义查询的功能
这里有一个单词表,以下是单词表的一部分:由单词和单词后的释义构成,中间用空格隔开。根据单词表中的内容,完成让用户输入单词就获得单词含义的功能。
2025-02-18 20:00:38
633
原创 Linux自学day21-拷贝图片,统计字符,文件IO,目录IO
用于改变文件指针的位置,它可以从文件开头(SEEK_SET)、当前位置(SEEK_CUR)或文件末尾(SEEK_END)进行偏移,返回新的文件偏移量。函数:用于从文件中读取数据,第一个参数是文件描述符,第二个参数是存储读取数据的缓冲区指针,第三个参数是要读取的最大字节数,返回值是实际读取的字节数。函数:用于向文件中写入数据,第一个参数是文件描述符,第二个参数是要写入的数据的指针,第三个参数是要写入的字节数。及每种字符出现的次数?:这是一个结构体,用于存储日期和时间的各个部分,如年、月、日、时、分、秒等。
2025-02-17 19:42:22
499
原创 Linux自学day20-流的输入与输出
在文件打开、读取和写入过程中,都需要进行错误检查和处理。如果文件打开失败、读取出现错误或者写入失败,都需要相应地处理错误情况,以保证程序的健壮性。两种方法的核心目的都是将一个文件(源文件)的内容复制到另一个文件(目标文件)中,完成文件内容的拷贝操作。函数返回文件指针的当前位置,即从文件开头到当前位置的字节数。在文件内容拷贝场景中,通常有两种常见的实现思路:一种是按字符拷贝(使用。:可变参数列表,根据格式化字符串中的格式说明符提供相应的参数。中的格式化字符串,用于指定输出的格式。:指向要写入的文件的指针。
2025-02-15 19:39:11
939
原创 Linux自学day18-二叉树、哈希表、常见的排序与查找算法
实现队列的基本操作,包括创建队列、判断队列是否为空、入队、出队和销毁队列,同时还提供了计算二叉树高度的函数。实现二叉树的创建、递归和非递归的遍历方式(前序、中序、后序、层序)以及销毁二叉树的功能。,相当于进行普通的插入排序,但由于前面的操作已经让数组基本有序,所以这一轮排序效率较高。前序遍历的顺序是:根节点 -> 左子树 -> 右子树。中序遍历的顺序是:左子树 -> 根节点 -> 右子树。后序遍历的顺序是:左子树 -> 右子树 -> 根节点。实现栈的基本操作,包括创建栈、压栈、弹栈和销毁栈。
2025-02-13 20:26:47
690
原创 Linux自学day17-数据结构-双向链表、内核链表
实现了一个简单的双向链表,包含创建链表、头部插入节点、遍历显示链表、删除指定数据节点以及销毁链表的功能。
2025-02-11 18:16:23
550
原创 Linux自学day16-数据结构-单向链表2
函数名为,返回值类型为int。pphead:指向链表头节点指针的指针,用于在函数中修改链表头指针(如果删除的是头节点)。tmpdata:要删除的节点中的数据。函数名为,它接受一个指向类型的指针phead(链表头指针)作为参数,返回值是一个指向类型的指针,即链表的中间节点指针。
2025-02-08 21:16:23
2053
原创 Linux自学day15-数据结构-单向链表
定义一个指向类型的指针plist,并初始化为NULL,用于指向链表的头节点。调用函数创建一个链表,并将返回的头节点指针赋值给plist。
2025-02-07 20:10:48
965
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅