- 博客(35)
- 收藏
- 关注
原创 类和对象(五)--初始化列表与static成员
摘要: 本文介绍了C++中类的初始化列表和static成员。初始化列表是真正的成员初始化方式,解决了构造函数体内赋值的局限性,特别适用于引用、const成员和无默认构造的自定义类型。static成员(变量和函数)为所有类对象共享,需在类外初始化,可通过类名直接访问。通过统计类对象数量的例子展示了static成员的应用场景,并分析了其共享性、访问方式和内存特性。文章还讲解了explicit关键字防止隐式类型转换的作用,提升代码安全性。
2026-01-02 12:26:19
577
1
原创 类和对象(四):默认成员函数详解与运算符重载(下)
本文深入讲解了C++类和对象中的关键概念,主要包括: 拷贝构造函数:详细解析了拷贝构造的概念、特征、深浅拷贝区别及适用场景,强调管理动态资源的类必须自定义深拷贝构造函数。 运算符重载:介绍了赋值运算符重载的基础语法、重载限制和实现要点,特别指出处理自赋值和连续赋值的重要性。 const成员:阐述了const修饰成员函数的作用,解释了mutable关键字的特殊用途。 取地址操作符重载:简要说明了普通和const版本取地址操作符的重载方式。 文章通过大量代码示例,系统性地剖析了这些默认成员函数的核心实现机制和使
2025-12-25 14:05:32
706
3
原创 类和对象(三)-默认成员函数详解与运算符重载
本文详细介绍了C++类和对象中的默认成员函数,重点解析了构造函数和析构函数的核心概念与使用特性。主要内容包括: 类的6个默认成员函数概述 编译器为空类自动生成的6个特殊函数 包含构造函数、析构函数、拷贝控制函数等 构造函数详解 作用:对象创建时自动初始化 特性:与类同名、无返回值、支持重载 默认构造函数生成规则及C++11改进 析构函数详解 作用:对象销毁时自动清理资源 特性:~类名形式、无参无返回值、不可重载 调用时机与资源释放示例 文章通过代码示例展示了这些核心概念的实际应用,帮助读者理解C++对象生命
2025-12-18 16:08:03
623
5
原创 C++类和对象--访问限定符与封装-类的实例化与对象模型-this指针(二)
本文是C++类和对象系列的第二篇文章,重点讲解了访问限定符与封装的概念。文章通过生动的比喻(如门禁系统、电脑封装)解释了private、protected和public三种访问权限的区别及使用场景。封装作为面向对象的核心特性,通过隐藏实现细节、暴露必要接口,实现了数据保护、灵活性、易维护性和降低复杂度等优势。文章还提供了封装的最佳实践建议,如数据成员设为private、提供完整的Get/Set方法等,并配有详细的代码示例说明如何在实际开发中应用这些原则。
2025-12-14 15:58:43
854
5
原创 C++面向对象与类和对象(一)----C++重要基础入门知识
摘要: 本文是C++面向对象编程的入门指南,重点解析了面向对象与面向过程的区别,以及C++中结构体到类的升级。面向过程关注"怎么做",通过函数实现步骤化操作;面向对象则关注"谁来做",通过封装数据和行为的对象来模拟现实交互。C++中class扩展了struct的功能,支持成员函数和访问控制,两者核心区别在于默认访问权限(class默认为private,struct默认为public)。文章建议:纯数据结构用struct,复杂行为封装用class,并强调显式声明访问权限
2025-12-11 16:37:35
1269
2
原创 C++11(二)核心突破:右值引用与移动语义(上)
本文介绍了C++11中右值引用与移动语义的核心概念。首先区分了左值和右值的定义:左值是可取地址的表达式,右值则不能出现在赋值左边。左值引用为左值取别名,而右值引用则专门处理临时对象。通过代码示例展示了右值引用如何延长临时对象的生命周期并实现高效资源转移。重点分析了移动构造函数和移动赋值运算符的性能优势,它们通过"窃取"资源避免了不必要的深拷贝。文章还对比了左值引用的局限性,说明右值引用在实现高效资源管理和性能优化方面的重要意义。
2025-12-08 15:44:27
663
4
原创 C++11初探(一):初始化列表-范围for-新增关键字-STL新容器
C++11新特性解析:现代C++编程革新 本文系统介绍了C++11标准带来的重要语法改进与特性更新。主要内容包括:1) 统一的列表初始化语法({}初始化)及其原理;2) std::initializer_list容器在STL中的应用;3) 自动类型推导(auto/decltype)机制;4) 空指针安全关键字nullptr;5) 范围for循环语法;6) final/override关键字对继承体系的控制;7) 新容器类型(array/forward_list/unordered系列)的引入。通过对比传统C
2025-12-05 12:17:23
991
5
原创 深入理解C++多态(四):单继承与多继承中的虚函数表(下)
本文深入探讨了C++中单继承与多继承的虚函数表机制。通过代码示例展示了单继承虚函数表的生成规则(拷贝基类虚表、覆盖重写函数、追加新增函数),并提供了打印虚表的实用方法。在多继承部分,分析了派生类会为每个基类维护虚表副本的特点,指出派生类新增虚函数会被放入第一个基类的虚表中。文章还对比了单继承与多继承虚表的关键差异,并通过选择题形式解析了继承和多态的常见问题。最后指出菱形继承等复杂场景的性能损耗问题,建议实际开发中避免使用。
2025-12-03 18:55:45
626
3
原创 深入理解C++多态(三):多态的原理——虚函数表机制(上)
本文深入解析了C++多态的核心机制——虚函数表。主要内容包括: 虚函数表是包含虚函数的类特有的函数指针数组,每个对象通过虚表指针(vfptr)访问虚表; 派生类虚表生成过程:先拷贝基类虚表内容,再覆盖重写的虚函数,最后添加新增虚函数; 多态调用原理:通过基类指针/引用找到对象虚表,再通过虚函数指针调用对应函数; 静态绑定在编译时确定,动态绑定在运行时通过虚表查找,这是多态的本质区别。文章通过代码示例和内存布局图详细展示了虚表的工作机制。
2025-12-01 14:41:27
911
6
原创 深入理解C++多态(二):抽象类与接口继承
本文深入探讨了C++中的抽象类与接口继承。首先介绍了抽象类的基本概念,指出包含纯虚函数的类即为抽象类,不能直接实例化对象。其次分析了抽象类的特性,强调派生类必须重写所有纯虚函数才能实例化。通过完整示例展示了抽象类的实际应用,并对比了接口继承与实现继承的区别:接口继承只定义规范不提供实现,实现继承则提供具体实现代码。最后以插件系统为例,说明了抽象类在实际开发中的应用场景,体现了其作为统一接口规范的重要价值。
2025-11-27 10:28:33
599
2
原创 深入理解C++多态(一):多态基础-虚函数-override与final关键字
摘要: 本文深入探讨C++多态的概念与实现基础。多态指不同对象执行相同行为产生不同结果,通过购票系统、支付宝红包等生活实例阐释其意义。实现多态需满足两个条件:通过基类指针/引用调用虚函数,且派生类必须重写基类虚函数。文章详细讲解虚函数定义、重写规则及两个例外情况:协变(允许派生类返回基类返回类型的派生类)和析构函数重写(确保正确释放资源)。此外,对比了重载、重写与隐藏的差异,并介绍C++11的override和final关键字,帮助编写更安全的多态代码。
2025-11-25 13:29:06
1045
6
原创 C++继承进阶篇:深入菱形继承与虚拟继承(三)
C++菱形继承与虚拟继承解析 本文深入探讨了C++中菱形继承的问题及其虚拟继承解决方案。主要内容包括: 继承类型:单继承和多继承的区别,菱形继承作为多继承的特殊情况 菱形继承问题: 数据冗余:派生类中存在多份基类成员 二义性:无法直接确定访问哪个路径的成员 虚拟继承解决方案: 使用virtual关键字声明虚拟继承 消除数据冗余和二义性问题 实现原理: 虚基表指针和虚基表机制 通过偏移量访问共享基类成员 实际内存布局分析 代码验证:通过实际代码展示虚拟继承的内存布局变化 虚拟继承虽然解决了菱形继承问题,但增加
2025-11-23 13:32:53
878
3
原创 C++继承基础:继承中的默认成员函数-静态成员变量-与友元(二)
C++继承特性解析(二) 本文深入探讨C++继承中的派生类默认成员函数、友元关系和静态成员特性。重点分析了派生类构造/析构函数的特殊规则,包括构造顺序(先基类后派生类)和析构顺序(先派生类后基类)。同时指出友元关系不可继承的特性,并提供了解决方案。最后解释了静态成员在继承体系中的共享机制——整个继承层级共享唯一静态实例,可通过任意类名访问修改。通过代码示例展示了这些特性的实际应用场景。
2025-11-22 10:13:26
789
2
原创 C++继承基础:切片-继承访问限定符-作用域-重定义(一)
摘要: 本文介绍了C++继承的基础概念与核心规则。继承是面向对象编程中实现代码复用的重要机制,允许派生类继承基类的成员并扩展新功能。重点讲解了三种继承方式(public/protected/private)对成员访问权限的影响,以及private成员在派生类中的"不可见性"。文章详细分析了派生类与基类对象之间的"切片"赋值规则,并强调基类对象不能反向赋值给派生类。此外,还探讨了继承体系中的作用域问题,特别是同名成员的隐藏(重定义)现象,指出派生类成员会屏蔽基类同名成员
2025-11-20 14:33:24
842
3
原创 C++模板(下)-非类型模板参数与特化
本文介绍了C++模板进阶知识,主要包括非类型模板参数和模板特化。非类型模板参数允许使用常量作为模板参数,实现固定大小容器和编译期优化。模板特化分为函数模板特化和类模板特化,后者又包括全特化和偏特化,可以针对特定类型提供优化实现。文章还分析了模板分离编译导致链接错误的原理,并建议将模板声明与定义放入同一文件来解决。这些技术增强了模板的灵活性和适用性,是C++模板编程的重要进阶内容。
2025-11-15 10:45:14
565
2
原创 C++模板:泛型编程与函数模板详解(上)
C++模板编程:泛型编程利器 文章摘要: 本文详细介绍了C++中的模板机制,包括函数模板和类模板。函数模板解决了代码冗余问题,通过编译器自动生成特定类型版本函数。类模板则实现了数据结构的类型无关性。文章阐述了模板的隐式/显式实例化、参数匹配原则(优先普通函数、类型转换规则)以及模板参数推导机制。模板编程极大提升了代码复用性,是C++泛型编程的核心技术,为STL库提供了基础支持。通过模板,开发者可以编写类型无关的通用代码,提高开发效率和程序可维护性。
2025-11-12 19:28:43
648
3
原创 从C内存管理进阶到C++内存管理(中)-new与delete详解
本文详细讲解了C++内存管理中new/delete的核心机制。首先对比了C和C++的内存管理方式,重点分析了new/delete操作内置类型和自定义类型的区别。深入解析了operator new/delete底层实现原理,指出new会调用构造函数,delete会调用析构函数。特别讲解了数组版本new[]/delete[]的实现机制和严格匹配原则。介绍了定位new表达式及其在游戏开发中的性能优化应用。最后总结了malloc/free与new/delete的区别,并讨论了内存泄漏的危害及防范措施。
2025-11-10 14:13:19
1164
5
原创 从C语言内存管理到C++内存管理(上)-基础篇
这篇文章详细讲解了C/C++中的内存分布和管理机制。主要内容包括:1. 内存分区:栈(存储局部变量)、堆(动态内存)、数据段(全局/静态变量)和代码段(常量区)的特性与使用场景。2. 动态内存管理:深入解析malloc/calloc/realloc/free的工作原理及注意事项,包括内存泄漏检测和悬空指针问题。3. 实践应用:通过具体代码示例说明各变量的存储位置,以及sizeof和strlen的区别,并给出正确的内存操作范例。文章强调了手动内存管理的注意事项,为理解C/C++内存机制提供了实用参考。
2025-11-06 11:25:46
605
3
原创 类和对象--实现一个日期类
本文展示了一个C++日期类的实现,主要应用了面向对象编程的核心概念。该类通过构造函数初始化日期,提供运算符重载支持日期比较和算术运算(如+=、-=、++等),并使用const成员函数确保数据安全。类封装了私有成员_year、__month、_day,通过公有成员函数操作数据。实现中使用了友元函数支持输入输出,通过代码复用减少冗余,并处理了闰年等特殊情况。这个日期类示范了如何将面向对象的封装、运算符重载、const正确性等概念应用于实际问题。
2025-11-05 15:56:38
696
3
原创 类和对象(下)--初始化列表-友元-static-内部类
本文主要讲解了C++中类和对象的高级特性,包括四个方面内容: 初始化列表:介绍了构造函数体赋值与初始化列表的区别,强调初始化列表才是真正的初始化,并列举了必须使用初始化列表的三种情况(引用、const、无默认构造的自定义类型)。同时说明了初始化顺序由成员声明顺序决定,与初始化列表顺序无关。 static成员:讲解了静态成员变量和静态成员函数的概念,强调静态成员为所有类对象共享的特性。详细说明了静态成员必须在类外定义、访问方式(类名::或对象.)、静态成员函数无this指针不能访问非静态成员等重要特性。 友元
2025-11-03 14:08:40
844
1
原创 类和对象(中)-默认成员函数详解与运算符重载
本文详细讲解了C++类的6个默认成员函数:构造函数、析构函数、拷贝构造函数、拷贝赋值运算符、移动构造函数和移动赋值运算符。重点分析了构造函数(对象创建时初始化)、析构函数(对象销毁时清理资源)、拷贝构造函数(克隆已有对象)和拷贝赋值运算符(对象赋值)的特性与实现要求。对于管理动态资源的类,必须自定义深拷贝版本的拷贝构造函数和赋值运算符以防止资源问题。文章还介绍了const成员函数的特性、运算符重载规则及取地址操作符重载的特殊情况,帮助开发者正确使用这些特性编写健壮的C++代码。
2025-11-01 14:38:19
890
1
原创 C++类和对象(上)--类的定义使用-访问限定符与this指针详解
本文摘要: C++面向对象编程入门教程重点介绍了类与对象的基础概念。文章首先对比了面向过程与面向对象编程的区别,强调对象封装数据与方法的特点;然后详细讲解了C++中struct与class的关系及区别,指出它们仅在默认访问权限上有所不同;接着阐述了类的定义规范、访问限定符的作用及封装的重要性;最后深入解析了对象内存模型和this指针原理。教程采用大量代码示例,帮助读者理解面向对象的核心思想,包括封装性、this指针的隐式传递机制等基础概念,为后续学习继承和多态打下坚实基础。
2025-10-30 15:53:40
795
4
原创 C++ String类的核心功能实现(上)
cpp// 迭代器类型定义// 返回指向字符串起始位置的迭代器// 直接返回字符数组首地址// 返回指向字符串末尾('\0'位置)的迭代器// 首地址 + 字符串长度// 常量迭代器 - 不允许修改指向的内容这种end()后面的const修饰的是方法,而end()前面是返回值,在返回值前面加const修饰的是范围值。直接加在括号里面修饰的就是参数本身。注意区分cppprivate:// 类内声明// 类外定义npos。
2025-10-20 11:14:31
531
3
原创 C++基础-缺省参数和简单的函数重载
/这种是声明}//这是定义假如我们在stack.h文件中同时包含声明和定义在编译过程中,定义会转换进符号表,而声明不会。此时,假如我在两个cpp文件中,都包括了了stack.h,就会出现链接错误(函数Add重定义)所以我们通常在.h当中写声明,在cpp中写定义,实现声明定义分离,规避这种错误。当然我们也可以使用static来规避这种错误,static可以影响连接属性,使它仅在当前文件可见,变成非全局属性,就不会在符号表里出现了。
2024-12-09 09:08:21
733
3
原创 C++命名空间
命名空间会进行一个合并,你可以多次用同一个名字创建命名空间,他们不会出现重名冲突 比如可以两次定义 namespace Hst;里面分别放一个栈和队列或者其他任意元素,调用时都用Hst::xxx;不会发生冲突。而且在做项目时,一般不会直接using namespace std;一次性全部展开 平时练习时则无所谓。
2024-06-29 21:58:36
983
1
原创 c语言指针的进阶(其一)
1.可以决定指针进行+1,-1操作时的步长2.决定了指针解引用时的权限,例如:int解引用访问4个字节,而char解引用访问8个字节。
2024-06-27 23:24:35
591
1
原创 关于C语言指针中的一些基础知识
取地址a的地址拿到第一个字节的地址(例如a为整型,而整形有4个字节那么大,即0x11223344,每两位数是一个字节。指针变量就是指针变量,指针不是数组,指针变量的大小就是4/8个字节,专门用来存放地址。数组就是数组,不是指针,数组是一块连续的空间,可以存放1个或多个类型相同的数据。p是一级指针变量,指针变量也是变量,变量是在内存中开辟空间,是变量就要有地址。即指针与指针比大小,地址也是有大小的,所以指针可以进行比大小的运算。指针-指针得到的数值的绝对值是指针与指针之间的元素个数。
2024-05-21 03:24:49
403
3
原创 有关C动态内存管理
但需要注意的是,malloc申请空间后会直接返回这块空间的起始地址,不会初始化空间的内容。3.并不是说动态内存函数写40个字节,就一定只开辟40个字节的空间,可能还会开辟额外字节的空间,用于存储这一次动态内存开辟空间的大小。那么此时如果P进行了++或者--运算都会改变原来的位置,使得原来连续的空间必须从头开始计算,free(P)就会报错。其中前面的()表示强制转换malloc返回的指针,而后面的()则表示申请的空间大小,单位为字节。答案是找一个新的地址(足够开辟所需空间),把旧地址释放掉,返回新的地址。
2024-05-21 01:03:29
388
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅