- 博客(41)
- 收藏
- 关注
原创 C++异常处理
有了异常处理机制,可以将多处函数调用都写在一个 try 块中,任何一处调用发生异常都会被匹配的 catch 块捕获并处理,也就不需要每次调用后都判断是否发生了异常。有时,虽然在函数中对异常进行了处理,但是还是希望能够通知调用者,以便让调用者知道发生了异常,从而可以作进一步的处理。如果 try 块执行的过程中拋出了异常,那么拋出异常后将立即跳转到第一个“异常类型”和拋出的异常类型匹配的 catch 块中执行(称作异常被该 catch 块“一个函数如果不交待能拋出哪些类型的异常,就可以拋出任何类型的异常。
2025-10-24 16:24:42
861
原创 C++文件操作
本文介绍了C++中文件操作的基本方法,主要包括:1. 文件流类(ifstream、ofstream、fstream)的使用;2. 文件打开方式(ios::in、ios::out等)及属性设置;3. 文本文件和二进制文件的读写操作(<<、>>、put()、get()等);4. 文件指针操作(tellg()、seekg()等);5. 文件状态检查函数(good()、bad()等)。文章详细说明了如何通过流对象进行文件操作,包括打开、读写、定位和关闭文件等基本操作,并提供了二进制文件大小计
2025-10-22 22:30:17
872
原创 C++模板
本文系统介绍了C++模板和类型转换机制。在模板部分,详细讲解了函数模板和类模板的定义与使用,通过max_value比较函数和Node类展示了模板实现代码复用的优势。文章还提供了数组类模板和链表类模板的完整实现案例。在类型转换部分,分析了四种强制类型转换操作符:const_cast用于去除const属性,static_cast用于基本类型转换和类层次转换,reinterpret_cast用于无关类型指针转换,dynamic_cast则提供运行时安全检查。这些机制共同构成了C++强大的泛型编程和类型系统特性。
2025-10-22 20:49:55
721
原创 C++运算符重载
简单来说,运算符重载就是对已有的运算符进行重新定义,赋予其处理自定义数据类型的能力。例如,表达式 a + b 在背后可能被编译器解释为 a.operator+(b) (成员函数调用) 或 operator+(a, b) (全局函数调用)。
2025-10-21 22:16:38
856
原创 C++之多态
多态(Polymorphism)是面向对象程序设计中最重要的特征之一。它指的是:“同一个接口,表现出不同的行为”。也就是说,同样的函数调用语句,在不同对象上会表现出不同的执行结果。带有至少一个纯虚函数的类称为抽象类。public:// 纯虚函数抽象类不能创建对象;只能作为基类,被派生类继承并实现纯虚函数。让“接口与实现分离”,通过统一的接口实现灵活可扩展的运行行为。基于继承;相同函数原型;virtual关键字启用动态绑定。
2025-10-13 22:31:44
937
原创 C++之多层继承、多源继承、菱形继承
本文通过三个典型示例解析C++继承机制的核心问题:1.多层继承展示构造/析构顺序(A→B→C)以及访问权限控制规则;2.多源继承揭示构造顺序由继承声明顺序决定,与初始化列表无关;3.菱形继承暴露二义性问题,建议使用虚继承解决。文章以代码示例配合运行结果分析,清晰呈现了不同继承场景下的对象构建过程、成员访问规则及解决方案,最后通过对比表总结关键差异。
2025-10-13 20:24:17
959
原创 C++兼容性规则
摘要:C++中派生类对象可被视为基类对象,反之则不可。具体表现为:1)派生类对象可赋值给基类对象(发生对象切片,仅保留基类部分);2)派生类对象可初始化基类引用(安全,不切片);3)基类指针可指向派生类对象(实现多态的基础)。这三种方式都只能访问从基类继承的成员,无法访问派生类特有成员。这些特性体现了面向对象中"向上转型"的基本原则,是实现多态的重要机制。
2025-10-09 21:09:01
145
原创 C++之类的继承与派生
本文系统介绍了C++中的继承与派生机制。继承是保留基类特性构建新类,派生是在基类基础上新增特性产生新类。继承方式包括public、protected和private三种,决定了基类成员在派生类中的访问权限变化:public继承保持基类访问权限不变;protected继承将基类public成员降为protected;private继承将所有可继承成员变为private。
2025-10-09 20:08:35
1051
1
原创 C++之类的组合
摘要: 类组合是面向对象编程中通过"has-a"关系构建复杂对象的技术,即将其他类的对象作为成员变量。其核心优势包括灵活性、代码重用、松散耦合和更好的封装性。组合时,构造函数需通过初始化列表显式调用成员对象的构造函数,执行顺序遵循成员声明顺序(先声明先构造),析构则相反。典型示例如Car类组合Engine、Wheel等对象,通过委托实现功能模块化,体现了"组合优于继承"的设计原则。组合严格保持封装性,外层类无权访问成员对象的私有成员。
2025-09-30 10:50:37
590
原创 C++之友元函数与前向引用
摘要:C++友元函数允许非成员函数访问类的私有成员,通过friend关键字声明,主要用于运算符重载和类间协作。友元函数分为全局函数、类成员函数和友元类三种类型,示例展示了不同场景的应用。前向声明用于解决类间的循环依赖问题,通过class ClassName;声明,但只能使用指针或引用,不能实例化对象或访问成员。二者都是C++中重要的特性,但需谨慎使用以避免破坏封装性。
2025-09-29 20:58:47
861
原创 C++之拷贝构造(浅拷贝与深拷贝)、this指针、内联函数
本文系统讲解了C++中拷贝构造函数、this指针和内联函数的核心概念。拷贝构造函数分为浅拷贝(默认成员值复制)和深拷贝(需手动实现指针成员的内存复制),重点阐述了指针成员情况下深拷贝的必要性以避免双重释放问题。this指针是类成员函数中指向当前对象的隐式指针,用于解决名称冲突和实现链式调用。内联函数通过代码替换消除函数调用开销,但需注意只适合简单函数且编译器有权拒绝内联建议。三者都是提高C++代码安全性和性能的重要机制,需要根据具体场景合理使用。
2025-09-28 21:48:48
711
原创 万字详解C++之构造函数析构函数
本文主要介绍了C++中的函数重载、构造函数和析构函数三个重要概念。首先,函数重载允许相同函数名但不同参数列表的函数存在,编译器通过参数类型、个数和顺序来区分调用哪个函数。其次,构造函数是在对象创建时自动调用的特殊成员函数,用于初始化对象,可以重载但必须与类同名且无返回类型。析构函数则在对象销毁时自动调用,用于资源清理,不能重载且必须与类同名加波浪号。文章还详细说明了new和delete在对象创建和销毁时的作用,以及构造函数如何实现隐式类型转换。通过多个示例代码演示了这些概念的具体应用和实现原理。
2025-09-25 22:25:05
969
原创 C++之引用与堆内存(new)
本文摘要: 编码规范要求:类成员变量设为private,通过public方法间接访问;函数声明顺序为public→protected→private;函数定义与声明分离,.h文件放声明,.cpp文件放实现。 引用是变量别名,须初始化且不可更改,主要用于函数传参(避免拷贝、修改实参)、返回值(直接操作内部数据)和常量引用(高效传递大对象)。与指针相比,引用更安全但功能受限。 堆内存管理:C风格用malloc/free(不调用构造/析构函数),C++风格用new/delete(自动调用构造/析构,类型安全)。n
2025-09-24 23:19:50
917
原创 C++概述(二)
C++对C语言的扩展主要体现在三个方面:1. 头文件引入方式变化,C++标准库头文件无.h后缀,采用命名空间std管理;2. 引入namespace机制解决命名冲突问题,支持声明域和作用域控制;3. 增强字符串处理能力,提供string类实现自动内存管理和丰富操作。此外,C++中的struct功能显著增强,支持成员函数、构造函数等面向对象特性,与class的主要区别仅在于默认访问权限和继承方式。这些改进使C++更适合大规模软件开发,同时保持对C语言的兼容性。
2025-09-24 21:46:11
861
原创 C++概述 (一)
本文主要介绍了C++的重要特性及其与C语言的区别。C语言是面向过程的编程语言,而C++支持面向对象编程,具备封装、继承和多态三大特性。C++还新增了引用、模板、STL标准库等功能,更适合大型复杂项目开发。文章详细解释了C++的三大特性:封装隐藏实现细节,继承实现代码复用,多态实现同一接口不同行为。同时介绍了C++的发展历程、编程环境及编译器处理流程,并分析了输出缓冲区的五种刷新机制,包括程序结束、缓冲区满、显式刷新、设置流状态和关联输入输出流。
2025-09-22 22:14:05
948
原创 C++符号表
当你在同一个作用域内声明两次 int a;时,编译器在向符号表添加第二个 a 时会发现它已经存在,从而报错 "redeclaration of 'int a'"。
2025-09-22 20:41:06
988
原创 MySQL单表操作
本文介绍了MySQL中DML语言的基本操作,包括数据插入(INSERT)、更新(UPDATE)、删除(DELETE)和查询(SELECT)。首先创建包含姓名、年龄和分数字段的stu表作为示例。重点讲解了查询操作的多种方式:基础查询、条件查询、四则运算、排序、分页、统计函数以及分组查询(配合HAVING使用)。最后简要介绍了常用MySQL函数如日期时间、字符串处理等函数。文章提供了完整的SQL语法格式和实用代码示例,适合MySQL初学者快速掌握数据库基本操作。
2025-09-16 08:30:00
809
原创 网络编程之UDP广播与粘包问题
本文介绍了UDP广播通信的实现原理和应用场景。UDP广播通过广播地址255.255.255.255实现局域网内的"点对多"通信,需使用setsockopt()开启SO_BROADCAST选项。文章对比了TCP和UDP的通信特点,TCP存在粘包问题,可通过自定义报文格式解决,而UDP以报文为单位不会产生粘包。文中提供了UDP广播的发送端和接收端示例代码,展示了如何实现广播功能。广播通信适用于局域网环境,简单高效,但需注意网络负载问题。
2025-09-14 23:05:57
1342
原创 C语言之函数
本文系统介绍了C语言函数的相关知识,主要包括:1. 函数的基本概念,包括模块化程序设计思想、函数分类(库函数/自定义函数、有参/无参函数);2. 函数定义与调用,详细说明了函数定义格式、形参与实参的关系、函数返回值机制;3. 函数的特殊调用方式,包括嵌套调用和递归调用;4. 数组作为函数参数时的注意事项;5. 变量的作用域(局部/全局变量)和存储类型(auto/static/extern/register);6. 内部函数与外部函数的区别。文章通过组合数计算等实例,阐述了函数在代码复用和程序结构化中的重要作
2025-09-14 14:48:00
675
原创 MySQL 数据类型与运算符详解
本文系统介绍了MySQL的核心功能:1.数据类型分为整数、小数、字符串、日期等多种类型,需根据业务需求选择;2.运算符包括算术、比较、逻辑等五类,使用时需注意优先级和NULL值处理;3.存储引擎主要有InnoDB、MyISAM等,各自适用于不同场景,InnoDB支持事务适合高并发。掌握这些基础知识可提升MySQL使用效率。
2025-09-11 22:46:40
181
原创 mysql简介
本文系统介绍了MySQL数据库的基础知识,包括数据库概念、安装部署、核心组件及SQL语言操作。主要内容涵盖:1.数据库基本概念与分类;2.MySQL特点及安装步骤;3.核心文件位置与实用工具;4.SQL语言分类及语法规范;5.数据库服务管理及基础操作。文章重点讲解了MySQL的启动关闭、登录退出、数据库创建/删除等实用操作,同时介绍了系统数据库的作用和用户数据库管理方法。最后还提供了MySQL命令行帮助功能的使用说明,为初学者提供了全面的MySQL入门指导。
2025-09-11 22:34:10
1480
原创 数据结构之二叉树
本文介绍了树和二叉树的基本概念及操作。首先定义了树的结构和相关术语,如结点、度、层次等。重点讲解了二叉树的几种特殊类型:满二叉树、完全二叉树和二叉排序树,并分析了它们之间的关系。随后详细阐述了二叉树的各种操作,包括创建、插入、遍历(前序、中序、后序)、查找和删除节点,每种操作都配有C语言实现代码。特别是对复杂的删除操作,区分了三种不同情况并给出了解决方案。通过示例程序演示了各种操作的执行过程和结果,全面展示了二叉树在数据结构中的应用。
2025-09-09 22:23:54
1406
原创 数据结构之链表(单向链表与双向链表)
本文介绍了链表数据结构的基本概念和实现方法。主要内容包括:1.链表的基本结构,包含头指针和结点(数据域+指针域);2.单向链表的设计与实现,详细说明了创建、插入(头插/尾插/中间插入)、删除、查询、更新、遍历和回收等操作;3.双向链表的设计实现,通过增加前驱指针提高操作效率;4.两种链表的对比分析,指出单向链表结构简单但操作受限,双向链表操作灵活但占用更多内存;5.提供完整的C语言实现代码示例。链表适用于数据量不确定且需要频繁增删的场景,读者可根据具体需求选择合适的链表类型。
2025-09-08 21:20:22
1044
原创 万字详解网络编程之socket
Socket是网络通信的核心接口,提供进程间跨主机的通信能力。文章首先介绍了Socket的基本概念和三种类型(流式、数据报、原始套接字),以及网络字节序转换的必要性。随后详细讲解了基于TCP/IP协议的Socket通信流程,包括创建套接字、绑定地址、监听连接等关键API,并给出了并发服务器示例代码。最后阐述了UDP通信的特点和相关API,包括无连接的数据报发送/接收方式。全文通过对比TCP和UDP的通信机制,系统性地介绍了Socket编程的核心知识点,为网络应用开发提供了实用指导。
2025-09-07 20:32:43
925
2
原创 万字详解网络编程之TCP/IP协议与UDP协议
本文介绍了TCP/IP网络协议栈的核心概念和实现。首先阐述了IP协议的作用(数据包传输)和IP地址分类(IPv4/IPv6、公网/内网),以及端口号、域名等网络基础概念。重点讲解了TCP协议的可靠传输机制,包括三次握手建立连接、四次挥手断开连接的过程,以及TCP数据包格式。同时对比了UDP协议的无连接特性。文章还分析了OSI七层模型与TCP/IP四层模型的区别,并通过C语言示例代码(TCP服务器/客户端、UDP服务器/客户端)演示了网络编程的具体实现。最后指出TCP适用于可靠性要求高的场景,而UDP更适合实
2025-09-07 17:56:37
2081
原创 Linux线程与线程池
本文将系统介绍线程的基本概念、实现原理及POSIX线程库的应用。主要内容包括:1.线程是CPU调度的基本单位,相比进程更轻量级,具有共享地址空间、通信便捷等优势;2.POSIX线程库函数详解,涵盖线程创建、等待、取消、属性设置等核心操作;3.通过生产者-消费者模型展示多线程编程实践;4.线程池工作机制及其实现,包括任务队列管理、线程调度等关键技术。文章最后提供了完整的线程池实现代码,演示了如何高效处理并发任务。全文以Linux系统为背景,强调线程在提升程序性能方面的重要作用。
2025-09-05 22:00:29
978
原创 Linux消息队列
消息队列是Linux系统中实现进程间通信的重要机制。它通过内核维护的消息链表实现,具有随机查询、多进程读写等特点,相比管道更适合频繁数据交换。文章详细介绍了消息队列的核心数据结构(如msgbuf、msqid_ds)和关键系统调用(msgget创建/获取队列、msgsnd发送消息、msgrcv接收消息、msgctl控制队列)。通过单进程收发消息和双进程通信的完整代码示例,展示了消息队列的实际应用方式,包括消息类型定义、队列创建、消息收发及队列销毁等典型操作流程。
2025-09-05 08:30:00
691
原创 进程通信之信号量
摘要:信号量是一种用于进程/线程同步的机制,通过整型计数器控制共享资源的访问。Linux提供内核信号量和用户态信号量(POSIX和SystemV)。信号量通过P/V操作实现:P操作减1,若结果小于0则阻塞;V操作加1,若结果仍小于0则唤醒等待进程。SystemV信号量API包括semget(创建)、semctl(控制)、semop(操作)等函数。典型使用步骤为:创建信号量、初始化、执行P/V操作、最后删除信号量。示例程序演示了父子进程通过信号量实现文件访问的互斥操作。
2025-09-03 22:56:21
1049
原创 进程通信之共享内存
共享内存就是允许两个不相关的进程访问同⼀个逻辑内存。共享内存是在两个正在运⾏的进程之间共享和传递数据的⼀种⾮常有效的⽅式。采⽤共享内存的通信效率⽐较⾼。优点:因为所有进程共享同⼀块内存,所以共享内存在各种进程间通讯⽅式中具有最⾼的效率,因为进程可以直接读写内存,⽽不需要任何数据的拷⻉。缺点:因为所有进程共享内存,就会引起同步的问题,⽽系统对访问共享内存没有进⾏同步机制,就需要⽤户⾃⼰来提供同步措施。IPCS命令简介。
2025-09-03 10:27:25
1143
原创 Linux进程通信之信号
信号机制与处理函数摘要 信号是Linux系统中进程间通信的异步事件通知机制,模拟硬件中断,用于处理突发事件(如Ctrl+C触发SIGINT)。信号分为不可靠信号(1-31,可能丢失)和可靠信号(32-64,支持排队)。常见信号来源包括进程调用(kill/raise)、终端操作、子进程终止(SIGCHLD)及定时器(SIGALRM)。 关键处理函数: kill():向指定进程发送信号,支持进程组广播。 alarm():设置定时器,到期发送SIGALRM。 sigaction():高级信号处理,支持带参回调(如
2025-09-01 09:00:00
1353
原创 Linux进程间通信之管道
进程间通信(Inter-Process Communication, IPC)是指在两个或者多个不同进程间传递或者交换信息,通过信息的传递建立几个进程间的联系,协调⼀个系统中的多个进程之间的行为。每个进程各⾃有不同的⽤户地址空间,任何⼀个进程的全局变量在另⼀个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟⼀块缓冲区,进程A把数据从⽤户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读⾛,内核提供的这种机制称为进程间通信。
2025-08-31 17:14:46
562
原创 进程创建,退出以及各种进程
本文介绍了进程创建与管理的相关概念和函数。主要内容包括:1)进程创建方式(系统/父进程创建)及system、fork函数的使用;2)特殊进程状态(孤儿/僵尸进程)及其处理方法;3)进程退出机制(正常/异常退出);4)vfork与fork的区别;5)多进程环境下的文件描述符共享特性;6)exec函数族的功能及使用方法。文章详细说明了各系统调用的函数原型、参数含义和返回值,并通过代码示例展示了实际应用场景。最后强调了合理使用这些函数对避免进程资源泄漏的重要性。
2025-08-31 15:51:29
967
原创 Linux进程简介
Linux进程管理摘要:Linux是多用户多任务操作系统,通过进程调度实现并发执行。进程是程序执行的动态实例,具有唯一进程ID(PID),由内核通过进程控制块(PCB)管理。进程内存映像包含代码段、数据段、堆栈段等结构。进程状态包括就绪、运行、阻塞等,并会相互转换。进程分为交互式、批处理和守护进程三类。常用命令如ps、top查看进程,kill终止进程。
2025-08-25 21:49:13
1000
原创 Linux之文件IO
⽂件就是存储在硬件磁盘上的数据集合,在Linux中,⼀切都是⽂件,如c源码⽂件,shell脚本,可执⾏⽂件,视频⽂件等,就连键盘,显示器,⿏标等硬件设备也都是⽂件。1.2文件描述符1)什么是文件描述符?⼀个Linux进程(正在运⾏程序)可以打开成百上千个⽂件,为了表示和区分已经打开的⽂件,linux会给每个⽂件分配⼀个编号,这个编号是⼀个正整数,被称为⽂件描述符。程序打开⼀个现有⽂件或者创建⼀个新⽂件时,内核向进程返回⼀个⽂件描述符。2)如何查看文件描述符的范围?
2025-08-21 22:35:34
1057
1
原创 STM32入门教程:LED灯闪烁,流水灯实现及按键控制
本教程基于STM32F407开发板标准库开发,详细介绍了LED和按键控制的实现方法。首先分析LED电路原理图,确定PF9/PF10引脚控制LED1/LED0(低电平点亮)。通过SysTick定时器实现精确延时功能,编写了LED初始化及控制函数,实现LED闪烁和流水灯效果。随后扩展按键控制功能,针对WK_UP(PA0)和KEY0(PE4)按键分别采用高/低电平检测,通过延时消抖和状态翻转机制,实现了按键控制LED开关的功能。教程从基础LED驱动到按键交互,循序渐进地展示了STM32外设开发的完整流程。
2025-08-16 14:47:36
821
1
原创 商场购物结算系统
摘要:本项目是一个基于C语言开发的商场购物结算系统,模拟超市购物全流程,包括商品购买、退货、更换及查看功能。系统采用模块化设计,通过product、cart、member等模块组织代码,使用结构体管理商品和会员数据,数组存储购物车和会员信息。会员机制支持折扣和积分累积,结账时自动计算优惠金额和积分奖励。系统通过菜单交互实现功能调用,具有良好可读性和可维护性。技术实现包括C语言标准库函数调用、字符串处理、结构体应用和函数流程控制等,有效提升了购物结算效率和用户体验。
2025-07-14 11:10:14
451
1
原创 队列设计与实现(包含顺序队列和链式队列)
队列:是一种先进先出 FIFO 后进后出 LILO 的数据管理方式。分为:1.顺序队列/环形队列(数据存储使用数组方式)2.链式队列(数据存储采用链表方式)
2025-04-28 09:42:40
277
原创 基于51单片机的篮球计数器
使用51单片机实现篮球计数器功能,每当双方球队进球后可以实现计分功能,并且还有开始和暂停功能,当按下开始按钮,其中一块显示屏进行单节15分钟倒计时,当按下暂停键,倒计时暂停,15分钟倒计时结束后触发蜂鸣器报警。24秒违例功能,当单个回合一方进攻时间超过24秒,触发蜂鸣器报警功能。还有换场功能,当双方进行两节比赛后,后两节交换场地。还有加时间和减时间按钮,假如出现时间计算错误或者忘记暂停时间,可以通过该按钮修正。
2025-02-08 19:57:22
178
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅