自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】 虚指针(vptr)与虚函数表(vtable)

摘要: C++通过虚函数表(vtable)和虚指针(vptr)实现多态。vtable是类级别的函数指针数组,存储虚函数地址和RTTI信息。派生类重写虚函数时会覆盖基类对应槽位,新增虚函数追加到表尾。每个对象隐式包含vptr,指向所属类的vtable,构造时vptr会逐层更新以实现正确的动态绑定。调用虚函数时,通过vptr查表找到实际函数地址。多重继承下,派生类对象包含多个vptr,通过thunk技术调整this指针确保正确访问。整个过程在编译时确定索引,运行时查表调用,效率较高。

2026-02-13 16:37:49 747

原创 【C++】虚函数

本文介绍了C++中虚函数的核心概念及其实现机制。虚函数是实现运行时多态的关键,通过虚函数表(vtable)和虚指针(vptr)实现动态绑定。文章详细讲解了虚函数的定义、重写规则,并剖析了虚函数底层工作原理。同时强调了虚析构函数的重要性,以及纯虚函数和抽象类的用法。虚函数虽然带来一定性能开销,但为面向对象编程提供了强大的灵活性,是C++多态特性的核心实现方式。

2026-02-13 15:09:17 727

原创 【C++】多态

C++多态分为编译时多态(静态)和运行时多态(动态)。编译时多态通过函数重载、运算符重载和模板实现,在编译期确定调用;运行时多态通过继承和虚函数实现,在运行时根据对象类型调用对应函数。函数重载要求参数不同,运算符重载可自定义运算符行为,模板实现泛型编程。动态多态需基类虚函数和派生类重写,通过基类指针/引用调用派生类函数。纯虚函数定义抽象类接口,强制派生类实现。多态提高了代码灵活性和可扩展性。

2026-02-12 20:51:23 715

原创 【C++】函数重写

摘要: 面向对象编程通过封装、继承和多态构建灵活软件体系,其中函数重写是实现多态的核心机制。重写要求派生类重新定义基类虚函数,保持完全相同的函数签名,可通过基类指针调用派生类实现。与函数隐藏(同名非虚函数)和重载(同一作用域不同参数)不同,重写实现运行时动态绑定。C++11引入override和final关键字增强安全性,协变返回类型允许派生类返回更具体类型。底层通过虚函数表(vtable)和虚指针(vptr)实现动态绑定,多重继承时对象包含多个vptr。虚函数机制是面向对象设计实现多态的基础。

2026-02-12 20:32:48 775

原创 【C++】 多继承

C++多继承机制允许派生类同时继承多个基类,提供代码复用的灵活性,但也带来二义性和内存布局复杂性。多继承下,派生类对象按基类声明顺序存储各基类子对象,构造函数需显式调用所有基类构造函数,调用顺序遵循继承顺序。当不同基类拥有同名成员或出现菱形继承时,会产生二义性问题,可通过作用域限定符或虚继承解决。虚继承通过共享间接基类实例,确保最终派生类只保留一份拷贝,其实现依赖虚基类表和运行时偏移量计算。多继承虽强大,但需谨慎使用以避免设计陷阱。

2026-02-11 23:28:14 753

原创 【C++】 派生类

摘要:继承是面向对象编程中实现代码复用的核心机制,允许派生类继承基类的成员并扩展新功能。派生类通过公有、保护或私有继承方式定义,其中公有继承最常用。派生类对象包含基类子对象和新增成员,内存布局中基类部分位于起始位置。构造函数遵循"先基类后派生类"的调用顺序,需通过初始化列表显式调用基类构造函数。析构函数则相反,且基类析构函数应声明为虚函数以避免资源泄漏。派生类成员函数会隐藏基类同名函数,需注意函数隐藏与重载规则。

2026-02-11 23:15:28 762

原创 【c++】 继承

摘要: 继承是面向对象编程的核心概念,允许派生类(子类)从基类(父类)获取属性和方法。C++支持三种继承方式:公有继承(public)保持基类访问权限,保护继承(protected)将公有成员降级为保护,私有继承(private)将成员转为私有。派生类可扩展基类功能,但不继承构造/析构函数。公有继承实现类型兼容,派生类对象可替代基类对象使用,支持多态。继承的底层机制是派生类对象包含基类子对象,内存布局中基类部分位于起始位置。通过继承层次,可构建复杂的类关系体系。

2026-02-10 22:51:38 723

原创 【C++】 命名空间

C++命名空间核心概念与应用 命名空间是C++组织代码、防止名称冲突的重要机制,它通过声明性区域为标识符提供作用域边界。命名空间解决了大型项目中因多库协作、团队开发导致的命名冲突问题,体现了模块化设计思想。语法上支持基本定义、嵌套、别名等多种形式,使用方式包括完全限定名、using声明和using指令(需谨慎)。底层通过名称修饰技术实现,不影响运行时性能。C++还提供了匿名命名空间、内联命名空间等进阶特性。常见错误包括在头文件中使用using指令和忽略参数依赖查找(ADL)。合理使用命名空间能显著提高代码的

2026-02-10 22:12:49 450

原创 【C++】 友元

C++友元机制是封装性与灵活性之间的平衡设计,允许特定外部函数或类访问类的私有成员。友元类(单向授权)常用于迭代器模式等场景,友元函数则广泛用于操作符重载(如复数运算)。该机制需谨慎使用,避免破坏封装性,但合理应用可提升性能、简化代码并支持特定设计模式。友元关系具有单向性、非传递性和非继承性特点,使用时需考虑是否有更好的替代设计方案。

2026-02-09 20:16:18 439

原创 【C++】 类成员

摘要: 析构函数是C++中用于对象销毁时自动执行的成员函数,主要完成资源释放等清理工作。其特点包括:名称前加波浪符(~)、无参数无返回值、不可重载、自动调用。若未定义析构函数,编译器会生成默认版本。析构函数在对象作用域结束、程序终止或delete操作时触发,调用顺序与构造函数相反。关键应用包括动态内存管理、文件/网络资源释放等RAII模式实现。注意事项:避免抛出异常,合理使用智能指针减少手动管理,平凡析构函数可优化性能。典型场景涵盖内存释放、资源回收、日志记录和引用计数管理。

2026-02-09 19:49:53 766

原创 【C++】 析构函数

摘要: 析构函数是C++中用于对象销毁时自动执行的成员函数,主要完成资源释放等清理工作。其特点包括:名称前加波浪符(~)、无参数无返回值、不可重载、自动调用。若未定义析构函数,编译器会生成默认版本。析构函数在对象作用域结束、程序终止或delete操作时触发,调用顺序与构造函数相反。关键应用包括动态内存管理、文件/网络资源释放等RAII模式实现。注意事项:避免抛出异常,合理使用智能指针减少手动管理,平凡析构函数可优化性能。典型场景涵盖内存释放、资源回收、日志记录和引用计数管理。

2026-02-08 22:28:17 816

原创 【C++】构造函数

构造函数是类的特殊成员函数,用于初始化对象。主要特性包括:与类同名、无返回值、创建对象时自动调用。构造函数分为三类:默认构造函数(无参数)、带参数构造函数(支持重载)和复制构造函数(用现有对象初始化新对象)。进阶特性包括初始化列表(高效初始化常量/引用成员)、委托构造函数(一个构造函数调用另一个)和explicit关键字(防止隐式转换)。特别要注意构造函数中的资源分配(如动态内存)和默认构造函数的必要性(如对象数组初始化)。

2026-02-08 22:13:32 669

原创 【C语言】 结构体变量操作

本文介绍了嵌套结构体、位域和结构体数组的编程应用。嵌套结构体允许结构体包含其他结构体成员,需通过逐层访问(如A.base.hp)或指针操作(如p->base.hp)来读写数据。位域通过精确控制成员占用的比特位数,可高效利用内存空间,适用于硬件寄存器和协议解析等场景。结构体数组则用于管理具有相同属性的对象集合,支持初始化、遍历和修改操作。这些特性在游戏开发、嵌入式系统等需要高效内存管理的领域尤为重要。

2026-02-07 22:23:55 664

原创 【C语言】 结构体基础与定义

本文系统讲解了C语言内存管理和结构体的核心知识。内存分为栈区(自动管理)、堆区(动态分配)、静态区(全局变量)和代码段。结构体用于组织不同类型但逻辑相关的数据,通过成员名访问而非数组下标。内存对齐机制使结构体大小可能大于成员总和,以提升CPU访问效率。typedef关键字可简化结构体类型声明。结构体嵌套支持构建层次化数据模型,而#pragma pack等指令可控制内存对齐方式。理解这些概念对编写高效、可维护的C程序至关重要。

2026-02-07 21:22:01 416

原创 【C语言】 指针高级应用与内存管理

本文系统解析了C语言中数组、指针和函数声明的辨析方法及高级应用。主要内容包括:1)通过标识符和运算符优先级判断声明类型;2)指针类型分析、数组元素提取和函数返回类型确定;3)指针在函数参数、多返回值及动态内存管理中的应用;4)常量指针与指针常量的区别;5)高级指针技术如多级指针、函数回调和数据结构实现。文章提供了大量代码示例和实用技巧,帮助开发者准确理解复杂声明并避免常见内存错误。

2026-02-06 21:46:39 529

原创 【C语言】 指针与数据结构操作

本文摘要: 文章系统讲解了C语言中指针的三大应用场景:变量操作、数组操作和函数操作。首先介绍了指针的基本概念与定义方法,包括指针的初始化、解引用操作及注意事项。其次详细说明了指针与一维/二维数组的关系,展示了指针算术运算在数组遍历中的应用。最后重点讲解了函数指针的定义与使用,包括函数指针数组的实现方式。文中通过大量代码示例演示了指针的各种操作技巧,并强调了类型匹配、空指针处理等关键注意事项,为深入理解C语言指针提供了全面指导。

2026-02-06 21:34:22 491

原创 【C语言】 指针基础与定义

本文系统介绍了C语言指针的核心概念和使用方法。主要内容包括:指针的基本定义(存储内存地址的变量)、语法(int *p = &a)和操作(解引用*p);指针类型必须匹配的原则及强制转换的风险;指针在32/64位系统中的固定大小(4/8字节);地址获取方法(&运算符)和数组地址的特殊性;指针定义与初始化规范;指针三要素(类型、数值、指向对象类型);野指针的危害与防范措施;以及指针支持的算术运算(加减)、关系运算和赋值运算。文章通过代码示例展示了指针的实际应用,强调了类型安全和初始化的重要性。

2026-02-05 22:06:46 1290

原创 【C语言】 字符数组相关库函数

C语言字符串处理函数详解: puts() - 自动换行的字符串输出函数,参数为字符串指针,返回非负整数或EOF。 gets() - 已废弃的输入函数(存在缓冲区溢出风险),建议改用fgets()。 strlen() - 计算字符串长度(不含'\0'),返回size_t类型值。 strcpy()/strncpy() - 字符串复制函数,后者可限制复制长度更安全。 关键特性: puts()自动添加换行符 strlen()时间复杂度O(n) strcpy()需确保目标缓冲区足够大 所有函数均需包含相应头文件(st

2026-02-05 21:45:04 749

原创 【C语言】 字符数组与多维数组

本文介绍了C语言中字符数组和多维数组的基本概念与应用。字符数组与字符串的区别在于是否以\0结尾,字符串存储在栈区或常量区,分别对应可修改和只读特性。二维数组可视为"数组的数组",文章详细讲解了其地址计算、初始化方式和访问方法,包括指针遍历和动态创建技术。此外还涉及多维数组的内存布局和作为函数参数的注意事项。最后总结了字符数组常见错误和多维数组内存优化建议,为C语言数组编程提供了实用指导。

2026-02-04 22:18:38 640

原创 【C语言】 数组函数与排序算法

本文介绍了C语言中数组的输入输出函数设计及常见排序算法。数组作为函数参数传递时,传递的是首地址而非副本,因此需同时传递数组长度。文章提供了通用的数组输入输出函数示例,并详细解析了冒泡排序、插入排序和希尔排序的原理与实现。冒泡排序通过相邻元素交换实现排序,插入排序将元素逐个插入有序序列,而希尔排序采用分组插入策略提高效率。每种算法均附有代码示例和复杂度分析,为数据处理提供了实用方法。

2026-02-04 21:49:28 697

原创 【C语言】 数组基础与地址运算

本文介绍了C语言中数组的基本概念与应用。数组是存储同类型元素的连续内存结构,通过下标访问元素,具有类型相同、固定长度和随机访问等特点。文章详细讲解了数组的定义语法、内存布局、初始化方法以及数组名与指针的关系。同时介绍了指针的基础知识,包括地址概念、指针运算以及数组与指针的转换关系。通过示例代码演示了数组的各种操作方式,包括下标访问、内存地址计算以及指针算术运算等核心知识点。

2026-02-03 22:10:23 701

原创 【C语言】 递归函数

是计算机科学中一种重要且强大的编程技巧,指的是函数直接或间接调用自身的过程。递归通过将复杂问题分解为结构相似但规模更小的子问题来解决原问题,这种"分而治之"的思想与数学归纳法有着深刻的联系。:函数直接调用自身:函数A调用函数B,函数B又调用函数A。

2026-02-03 21:43:06 759

原创 【C语言】 函数基础与定义

本文系统介绍了C语言函数的基本概念与使用。函数作为模块化编程的核心单元,具有提高代码复用性、可读性和维护性的作用。文章详细讲解了函数的定义、声明与调用方法,包括函数命名规范、参数设计和返回值机制。重点分析了C语言的值传递特性,以及数组参数的特殊处理方式。最后给出了函数设计的最佳实践和常见问题,强调功能单一、合理命名等原则,并指出避免返回局部变量地址等陷阱。文章还提供了实用的调试技巧,帮助开发者更好地理解和运用函数这一重要编程工具。

2026-02-02 20:46:55 754

原创 【C语言】 跳转语句

C语言中的跳转语句(break、continue、goto、return)用于改变程序执行流程。break终止当前循环或switch结构;continue跳过本次循环剩余代码;goto实现无条件跳转(需谨慎使用);return结束函数执行并可选返回值。这些语句能简化代码逻辑,但滥用可能降低可读性。合理使用跳转语句有助于编写高效程序,特别是break和continue在循环控制中非常实用,而goto和return需要特别注意使用场景。

2026-02-02 20:26:42 712

原创 【C语言】 循环结构

特性for循环while循环do-while循环执行顺序先判断后执行先判断后执行先执行后判断最少执行次数0次0次1次适用场景循环次数已知循环次数未知至少执行一次初始化位置表达式1中循环体外循环体外条件位置表达式2while后括号内while后括号内更新位置表达式3循环体内循环体内。

2026-02-01 20:03:02 545

原创 【C语言】 结构化编程与选择结构

C语言是面向过程的结构化编程语言,其核心思想是将复杂程序分解为三种基本结构:顺序结构(代码从上到下执行)、选择结构(if-else和switch-case实现条件分支)和循环结构(for/while/do-while实现重复执行)。C语言通过9个关键字(if-else、switch-case、for、while、do-while、break、continue、goto、return)实现流程控制。选择结构中,if-else用于条件判断,switch-case适用于离散值多分支选择,需注意break的穿透效应

2026-02-01 19:40:02 618

原创 【C语言】 特殊运算符

C语言运算符详解:自增减、复合赋值、条件与逗号运算符 自增减运算符(++/--):包括前置(先运算后取值)和后置(先取值后运算)两种形式,只能用于变量操作,在复杂表达式中可能出现未定义行为,建议单独使用。 复合赋值运算符(+=/-=等):将算术/位运算与赋值结合,具有代码简洁、可读性高的特点,优先级T14,结合性从右向左。 条件运算符(?:):唯一的三目运算符,根据条件选择执行表达式2或3,优先级T13,适用于简单条件判断,但嵌套使用会降低可读性。 逗号运算符(,):依次执行多个表达式并返回最后一个的值,优

2026-02-01 19:20:14 704

原创 【C语言】 逻辑与位运算符

关系运算符和逻辑运算符是C语言中用于比较和逻辑判断的重要工具。关系运算符(>、<、>=、<=、==、!=)用于比较两个操作数,返回0或1的逻辑值。使用时需注意浮点数精度问题和运算符优先级。逻辑运算符(&&、||、!)连接多个条件,具有短路求值特性,可提高效率并避免错误。常见错误包括混淆赋值与相等运算符、多个关系运算符联用等。合理使用这些运算符能实现复杂的条件判断,但需注意优先级规则和使用规范。

2026-02-01 19:04:30 761

原创 【C语言】 基础运算符

本文概述了C语言中的运算符和表达式。运算符是对操作数执行特定操作的符号,分为算术、赋值、关系、逻辑等9类。表达式由操作数和运算符组成,具有值和类型属性。运算符具有目数、优先级和结合性三个重要属性,其中优先级决定运算顺序,结合性决定同优先级运算符的计算方向。此外,文中介绍了类型转换的必要性,包括编译器自动完成的隐式转换和程序员显式指定的强制转换,并指出强制转换可能导致数据截断。通过示例代码展示了运算符优先级和类型转换的实际应用。

2026-01-31 17:36:42 974

原创 【C语言】 格式控制符与输入输出函数

摘要:C语言中的格式控制符是输入输出函数的核心元素,用于指定数据的转换格式。常见控制符包括%d(整型)、%f(浮点型)、%c(字符型)、%s(字符串)等,分别对应不同数据类型。printf和scanf函数通过控制符实现数据格式化,其中printf支持对齐、精度等高级格式,scanf则需注意缓冲区处理。此外,puts、putchar、sprintf等函数提供了更简单的输出方式,而getchar可用于字符输入。使用这些函数时需注意数据类型匹配和缓冲区管理,避免潜在错误。

2026-01-31 17:10:41 786

原创 【C语言】 字符型变量

C语言中的字符型(char)用于存储单个字符,本质是存储对应的ASCII码整数值。ASCII编码将128个字符分为控制字符(0-31)和可显示字符(32-126),其中字母'A'-'Z'(65-90)、'a'-'z'(97-122)和数字'0'-'9'(48-57)最为常用。字符型变量占1字节,数值范围取决于是否有符号(signed char:-128~127,unsigned char:0~255)。输入输出使用%c格式符,可与%d互换显示ASCII码值。转义字符如\n、\t用于表示特殊字符。编程时需注意

2026-01-30 19:33:48 621

原创 【C语言】 浮点型(实型)变量

摘要:C语言中的浮点型用于表示实数,包括单精度(float)和双精度(double)两种类型,分别占4字节和8字节。浮点数采用IEEE 754标准存储,分为符号位、指数位和尾数位三部分。由于内存限制,浮点数存在精度问题,不能精确表示所有实数。在输入输出时需注意格式控制符的使用,float用%f,double输入用%lf、输出用%f。直接比较浮点数可能不准确,建议使用误差范围判断。编程时应考虑精度需求、误差累积和字节序等问题,高精度计算推荐使用double类型。

2026-01-30 19:13:03 785

原创 【C语言】 整型变量

C语言整型数据概述与使用指南 整型数据是C语言中表示整数的基础数据类型,分为int、short、long和long long等类型,可满足不同范围的数值需求。整型又可分为有符号和无符号两类,前者可表示正负数,后者仅表示非负数。计算机内部使用二进制补码存储整型数据,这种表示方法统一了运算规则并简化了硬件设计。在输入输出时需使用正确的格式控制符(如%d、%u等),同时应注意避免数值溢出问题,特别是对于有符号整型的未定义溢出行为。通过合理选择整型类型和正确处理数据范围,可以确保程序的正确性和稳定性。

2026-01-29 22:17:09 953

原创 【C语言】 定义变量

摘要:C语言变量定义遵循"数据类型 变量名;"格式,变量空间大小由数据类型决定。基本类型固定大小,构造类型与结构相关,指针类型在32/64位系统中分别占4/8字节。sizeof运算符用于计算变量或类型的空间占用(编译时确定),而strlen函数计算字符串长度(运行时遍历至'\0')。关键区别在于:sizeof是运算符,计算总内存大小(含'\0');strlen是函数,返回有效字符数(不含'\0')。使用时需注意数组与指针的区别,避免未初始化字符串等陷阱。

2026-01-29 21:48:25 657

原创 【C语言】 关键字与用户标识符

摘要: 本文介绍了C语言中的关键字及其用途,包括const(定义常量)、register(建议变量存入寄存器)、volatile(防止编译器优化)、static(延长变量生命周期)和typedef(类型别名)。还讲解了#define宏定义与条件编译的用法,以及用户标识符的命名规范(字母、数字、下划线组成,避开关键字等)。通过代码示例展示了各关键字的实际应用场景,如static实现局部变量持久化、volatile确保变量实时读取等,帮助开发者合理使用这些特性优化代码。

2026-01-28 22:23:11 1202

原创 【C语言】 数据类型的分类

本文系统介绍了C语言中的数据类型体系。主要内容包括:1)数据分为常量(不可修改)和变量(可修改);2)数据类型决定存储空间、取值范围和运算规则;3)存储单位从bit到TB的换算关系;4)C语言数据类型分类:基本类型(整型、浮点型、字符型)、构造类型(数组、结构体、共用体、枚举)、指针类型和void类型;5)类型修饰符(signed/unsigned, short/long)的使用。通过代码示例详细说明了各类数据类型的定义和使用方法,包括指针操作、结构体、函数指针等高级用法。

2026-01-28 22:18:01 849

原创 【C++】C++类

本文探讨了面向对象程序设计思想的核心概念,包括封装、继承和多态。面向对象通过将现实世界的事物映射为对象,利用对象之间的关系来解决问题,增强了代码的可维护性。封装隐藏了对象的内部实现,提供了简洁的接口;继承允许新类扩展已有类的功能,提高了代码复用性;多态则使得不同对象对同一信息产生不同的行为,增强了程序的灵活性。文章还详细介绍了类的定义与实现,包括类的声明格式、权限控制符、成员函数的定义方式,以及如何声明和引用对象。

2025-03-21 14:43:42 1070

原创 【C++】C++对C语言的扩充

本文主要介绍了c++对c语言的补充。

2025-02-07 22:41:47 1152

原创 【C++】C++概述

本文介绍了c++的历史发展与特点。

2025-02-07 22:36:36 1065

原创 05_四旋翼飞行器姿态表示

本文主要介绍了四旋翼飞行器姿态表示的相关知识点。

2024-07-11 12:16:34 1995 1

空空如也

空空如也

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

TA关注的人

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