自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 11 string容器 - 子串获取

摘要:本文介绍了C++中string类的substr()方法,用于从字符串中提取子串。该方法接收起始位置和长度参数,返回指定范围的子字符串。示例展示了基本用法(提取"abcdef"中的"bcd")和实际应用(从邮箱"zhangsan@gmail.com"中提取用户名"zhangsan")。通过结合find()方法定位分隔符,substr()能有效提取字符串中的关键信息,在开发中具有实用价值。

2026-01-26 17:33:32 47

原创 10 string容器 - 字符串插入和删除

本文介绍了C++字符串的插入和删除操作。通过string类的insert()函数可在指定位置插入字符或字符串,包括三种重载形式:插入字符串、插入n个相同字符。erase()函数用于删除从指定位置开始的n个字符。示例代码演示了在"hello"字符串中插入"111"后再删除的操作,展示了字符串从"h111ello"变回"hello"的过程。需要注意的是,这些操作的起始下标都是从0开始计数的。这些方法为字符串处理提供了灵活的修改功能。

2026-01-26 17:20:06 79

原创 09 string容器 - 字符存取

C++中string类提供了两种访问单个字符的方法:使用[]运算符和at()方法。示例代码展示了如何遍历和修改字符串中的字符,两种方式都能实现相同功能,但at()方法会进行越界检查。通过str[i]或str.at(i)可以访问指定位置的字符,也能通过这两种方式修改字符内容。这两种方法在实际应用中可以根据需要选择使用,[]运算符更简洁,而at()方法更安全。

2026-01-26 17:04:41 42

原创 08 string容器 - 字符串比较

本文介绍了字符串比较的功能和方法。字符串比较是通过逐个字符的ASCII码值进行对比的,比较结果返回三种值:相等返回0,大于返回1,小于返回-1。示例代码展示了如何使用string类的compare方法比较两个字符串,并输出比较结果。虽然字符串比较可以判断大小关系,但实际应用中主要用于判断字符串是否相等,判断大小的意义相对有限,不过在算法题中可能会用到这种比较方式。

2026-01-26 16:32:03 48

原创 07 string容器 - 字符串查找和替换

本文介绍了字符串的查找和替换操作。查找功能包括find()和rfind()方法,前者从左往右查找,后者从右往左查找,返回首次/末次出现的位置(未找到返回-1)。替换功能使用replace()方法,需指定起始位置、替换字符数和替换字符串。示例代码演示了查找"de"字符串和将"abcdefg"中部分字符替换为"1111"的操作。总结指出:查找方法返回首个匹配字符位置,替换需明确位置范围和替换内容。这些方法为字符串处理提供了基本操作支持。

2026-01-26 16:22:26 64

原创 06 string字符串拼接

摘要:本文介绍了C++中字符串拼接操作的实现方法,主要包括重载+=运算符和append()函数的不同形式。示例演示了如何连接字符串、字符或字符串片段,以及从指定位置截取字符进行拼接。字符串拼接功能提供了多种重载版本,初学者可以先掌握基本用法,如operator+=和简单的append操作,后续再逐步学习更复杂的参数组合。代码示例展示了"我"、"爱玩游戏"等字符串的拼接过程及输出结果。

2025-12-01 11:45:18 184

原创 05 string容器 - 赋值操作

本文介绍了C++中string类的多种赋值方法,主要包括重载的赋值运算符operator=和assign函数。使用operator=可以接收char*字符串、string对象或单个字符作为右值;assign函数提供了更灵活的赋值方式,包括指定字符串前n个字符、用n个重复字符赋值等。示例代码展示了这些方法的具体使用场景,如str1="hello world"、str5.assign("Hello C++",5)等。总结指出operator=是最常用的赋值方式,同时string类提供了多样化的赋值接口以满足不同

2025-11-27 18:53:34 163

原创 04 string容器 - 构造函数

本文介绍了C++中string类的基本概念和构造函数用法。string是一个封装了char的类,提供了安全的字符串管理功能,包括查找、拷贝、替换等操作,避免了内存越界问题。重点讲解了四种构造函数:默认构造、char初始化、string对象初始化以及指定字符重复构造,并给出了示例代码演示不同构造方法的使用场景。string类通过多种构造方式提供了灵活的字符串创建方案,开发者可根据需求选择合适的方法。

2025-11-27 18:51:51 178

原创 03 vector容器嵌套容器

摘要:本文展示了C++中嵌套容器的遍历方法。示例代码构建了vector<vector<int>>结构,先创建4个子vector并填充数据(1-4,2-5,3-6,4-7),然后将子容器存入父容器。通过嵌套迭代器实现两层遍历输出所有元素。代码还注释了使用for_each和lambda表达式实现的替代方案。输出结果以空格分隔子容器元素,换行分隔不同子容器,最后通过system("pause")暂停控制台。该示例演示了STL容器嵌套时的基本操作方法。

2025-11-18 00:46:40 194

原创 02 vector存放自定义数据类型

本文展示了在C++中使用vector存储自定义数据类型(Person类)的两种遍历方法。第一种使用迭代器遍历,通过vector<Person*>::iterator访问元素;第二种采用Lambda表达式结合for_each算法,直接操作指针类型元素。关键点在于遍历方式必须与vector存储类型匹配:存储对象时使用Person&,存储指针时使用Person*。两种方法都能有效访问数据,但Lambda方式语法更简洁直观。文章通过具体代码示例对比了两种方法的实现细节和注意事项,强调数据类型一致性是正确遍历的关键。

2025-11-18 00:46:15 272

原创 01 vector存放内置数据类型

本文介绍了STL中vector容器的基本使用,包括插入数据和三种遍历方式:1)使用迭代器的while循环遍历;2)使用for循环遍历;3)使用STL的for_each算法遍历。重点讲解了for_each的实现原理,即通过函数指针回调执行操作。此外还展示了lambda表达式的使用,可以捕获外部变量进行条件判断。示例代码演示了如何创建vector容器、插入数据(10,20,30,40)以及不同遍历方法的实现,体现了STL将数据与算法分离的设计思想。

2025-11-17 21:17:37 200

原创 00 - STL的基本概念

STL(标准模板库)是基于C++泛型编程思想建立的标准化数据结构和算法库。它包含六大核心组件:容器(如vector、map)、算法(如sort、find)、迭代器(连接容器与算法)、仿函数、适配器和空间配置器。容器分为序列式和关联式两类,算法分为质变和非质变两类。迭代器作为关键纽带,提供类似指针的访问方式,分为输入/输出/前向/双向/随机访问五种类型。STL通过模板技术实现高度复用性,使开发者能专注于业务逻辑而非底层实现。

2025-11-17 21:17:18 363

原创 15类模板案例

本文实现了一个通用的数组类MyArray,采用模板类技术支持内置和自定义数据类型存储。关键特性包括:1)堆区数据存储;2)提供深拷贝构造函数和赋值运算符防止浅拷贝;3)支持尾插(Push_Back)和尾删(Pop_Back)操作;4)重载[]运算符实现下标访问;5)可获取当前元素个数(m_Size)和容量(m_Capacity)。测试用例展示了整数数组和自定义Person类的存储管理,验证了数组类的通用性和功能完整性。该实现运用了C++核心概念,如模板、深拷贝、运算符重载等,是面向对象程序设计的典型范例。

2025-11-16 16:38:51 232

原创 14类模板与友元

本文介绍了类模板中友元函数的两种实现方式:类内实现和类外实现。类内实现直接在类内声明友元函数即可,使用简单且编译器能直接识别;类外实现需要提前声明全局函数和类模板,并在定义时使用空模板参数列表。通过Person类模板示例,演示了两种实现方式的区别,建议优先采用类内实现方式,因其语法更简洁且编译器支持更好。文中包含完整的代码示例,展示了如何为模板类定义全局打印函数的具体实现方法。

2025-11-16 16:38:13 161

原创 13类模板分文件编写

本文探讨了类模板成员函数分文件编写时出现的问题及解决方案。由于类模板成员函数在调用时才会创建,导致分文件编写时出现链接错误。提出了两种解决方法:1)直接包含源文件(.cpp);2)将声明和实现合并为.hpp文件。第二种方法是主流解决方案,它通过将类模板的声明和实现统一放在.hpp文件中,确保编译器能够同时访问完整的模板定义,从而避免链接错误。文中提供了完整的代码示例,展示了两种解决方案的具体实现方式。

2025-11-15 10:15:56 127

原创 12类模板成员函数类外实现

本文介绍了类模板成员函数类外实现的方法。重点对比了普通类和类模板在构造函数和成员函数类外实现时的区别:1) 类模板实现需添加模板声明template<class T1,class T2>;2) 在类名后作用域符前添加<T1,T2>;3) 成员函数实现方式相同。通过Person类模板示例展示了构造函数和showPerson()方法的类外实现语法,包括模板参数声明和类名后模板参数的特殊标注方式。示例代码演示了如何实例化类模板对象并调用成员函数。该方法适用于所有类模板成员函数的类外实现。

2025-11-15 10:15:16 157

原创 11类模板与继承

摘要:类模板继承需注意三点:1)子类继承模板父类时必须指定父类模板参数T的类型;2)若不指定,编译器无法为子类分配内存;3)若要使父类模板参数可灵活指定,子类也需声明为模板类。示例中展示了固定类型继承(Son)和模板化继承(Son2)两种方式,后者通过多模板参数实现父类模板类型的动态指定,并在构造函数中输出类型信息验证。关键点在于继承模板类时需明确处理父类的模板参数问题。

2025-11-13 16:48:26 168

原创 10类模板对象作函数参数

摘要: 本文介绍了类模板对象作为函数参数的三种传递方式:1)直接指定数据类型;2)将对象参数模板化;3)将整个类模板化。通过Person类模板示例,演示了每种方式的实现方法。第一种方式最常用,直接显示指定对象类型;第二种方式将模板参数传递;第三种方式将整个类类型作为模板参数传递。每种方式都可通过typeid检查实际数据类型。示例代码展示了三种传参方式的典型应用场景,为类模板与函数交互提供了灵活的实现方案。

2025-11-13 16:48:08 134

原创 09类模板中成员函数创建时机

本文探讨了类模板与普通类在成员函数创建时机上的差异。普通类的成员函数在定义时即创建,而类模板的成员函数只有在被调用时才会创建。通过示例代码演示:当实例化MyClass<Person1>并调用func1()时正常执行,但调用func2()会因Person1没有showPerson2()方法而编译失败,验证了模板成员函数的延迟创建特性。这种机制提高了模板的灵活性和编译效率,只有在实际使用时才会检查成员函数的合法性。

2025-11-12 11:15:25 174

原创 08类模板与函数模板区别

本文介绍了C++中类模板与函数模板的两点主要区别:1)类模板在C++17前不支持自动类型推导(示例代码演示了必须显式指定类型参数);2)类模板允许在模板参数列表中设置默认参数(如示例中的AgeType默认设为int类型)。通过Person类模板的实例化过程,展示了如何显式指定类型参数以及使用默认参数的方法。代码示例清晰地体现了这些特性在实际编程中的应用方式。

2025-11-12 11:15:02 134

原创 07类模板语法

类模板通过template<typename T>语法创建通用类,其中T代表任意数据类型。示例中Person类使用NameType和AgeType作为模板参数,实现了对不同数据类型成员(name和age)的通用处理。类模板与函数模板语法类似,在template声明后跟类定义即可,使用时通过Person<string,int>指定具体类型。这种方法增强了代码复用性,使类能灵活处理各种数据类型。

2025-11-11 00:19:08 203

原创 06模板的局限性

C++模板的局限性及解决方法 摘要: C++模板虽然功能强大,但存在局限性,无法直接处理某些特定数据类型。以比较函数为例,模板无法直接比较数组或自定义类对象。为解决这个问题,C++提供了两种方法:1)模板特化,为特定类型提供具体实现;2)运算符重载,在自定义类中重载比较运算符。示例中展示了如何通过模板特化实现Person类的比较功能。掌握这些技巧有助于更好地使用STL中的模板。

2025-11-11 00:18:43 215

原创 04普通函数与函数模板的区别

本文对比了普通函数与函数模板的类型转换特性:1)普通函数支持隐式类型转换;2)自动推导的函数模板不允许隐式转换;3)显式指定类型的模板函数允许隐式转换。通过代码示例展示了对字符和整型的加法操作差异:普通函数自动转换字符ASCII码,自动推导模板会报错,而显式指定int类型的模板则允许转换。最终建议优先使用显式指定类型的模板调用方式,以便明确控制类型转换行为。

2025-11-10 10:25:54 135

原创 05普通函数与函数模板的调用规则

摘要:C++中函数模板和普通函数的调用规则包括:1)优先调用普通函数;2)使用空模板参数列表强调调用模板;3)函数模板支持重载;4)当模板匹配更优时优先调用模板。示例代码展示了通过参数类型匹配程度来决定调用普通函数还是模板函数的情况。最佳实践是尽量避免同时提供普通函数和模板函数,防止出现二义性问题。

2025-11-10 10:25:24 200

原创 03函数模板案例

本文演示了如何用C++模板实现通用的选择排序算法。通过定义函数模板mySort实现对不同数据类型数组的排序(从大到小),其中mySwap用于交换元素,printArr用于输出数组。测试部分分别对char数组"cafdb"和int数组[7,3,5,2,8,4,1,9,6]进行排序验证。代码中展示了模板参数T的使用方式,以及数组作为指针传递的处理方法,体现了C++模板编程的通用性和灵活性。

2025-11-09 22:15:10 141

原创 02函数模板注意事项

本文介绍了C++函数模板的两个关键注意事项:1)自动类型推导时,必须能够推导出一致的T类型(如mySwap(a,b)正确,但mySwap(a,b,c)错误);2)模板必须明确指定T的数据类型才能使用(如func<int>()必须显式声明类型)。通过示例代码展示了正确和错误的使用方式,强调模板编程中类型一致性和明确性的重要性。

2025-11-09 20:53:10 190

原创 04二进制文件 - 读文件

本文介绍了使用C++以二进制方式读取文件的方法。通过ifstream流对象的read函数实现,该函数接受字符指针和字节数作为参数。示例展示了一个Person类的二进制文件读取过程:先打开文件并校验,然后用read函数将数据读入对象,最后输出内容并关闭文件。关键点包括使用字符数组而非string类存储字符串,以及注意文件打开模式和错误处理。这种方法适用于需要精确控制数据读取的场景。

2025-11-06 15:20:05 157

原创 01函数模板语法

本文介绍了C++中的函数模板机制,它是泛型编程的核心技术。函数模板通过template<typename T>语法创建通用函数,使函数能处理不同类型的数据。示例展示了用模板实现交换函数的过程,对比了传统重载方法与模板方法的区别。使用函数模板有两种方式:自动类型推导和显式指定类型。重点强调了模板的作用在于提高代码复用性,通过类型参数化避免为不同类型编写重复代码。测试案例演示了模板函数对整型和浮点型数据的交换操作。

2025-11-06 15:19:08 181

原创 03二进制文件 - 写文件

本文介绍了使用二进制方式读写文件的基本方法,重点演示了二进制写文件操作。通过创建ofstream流对象并指定ios::binary模式,利用write函数将Person类对象以二进制形式写入文件。示例代码展示了完整流程:包含头文件、创建流对象、打开文件、写入数据(包括字符串和整型数据)以及关闭文件。特别注意字符串处理建议使用字符数组而非string类,以避免潜在问题。该方式适用于需要精确控制数据存储格式的场景。

2025-11-05 11:30:58 113

原创 02文本文件 - 读文件

本文介绍了C++中读取文本文件的基本步骤和四种常见读取方式。读取流程包括:1)包含<fstream>头文件;2)创建ifstream对象;3)使用open()打开文件并检查是否成功;4)选择合适方式读取数据。四种读取方式分别是:操作符>>逐词读取、getline()按行读取字符数组、getline()读取string对象,以及get()逐个字符读取。最后强调必须调用close()关闭文件,并可通过is_open()检查文件打开状态。示例代码演示了整个读取流程,特别展示了利用getli

2025-11-05 10:56:24 188

原创 01-SQL通用语法及分类

本文介绍了SQL的通用语法和分类。SQL语句书写规则包括可以单行或多行书写、以分号结尾,支持空格/缩进增强可读性,在MySQL中不区分大小写但建议关键字大写。注释分为单行(--或#)和多行(/* */)两种。SQL分为四大类:DDL(数据定义语言)用于定义数据库对象,DML(数据操作语言)用于数据增删改,DQL(数据查询语言)用于数据查询,DCL(数据控制语言)用于权限管理。

2025-11-04 11:06:31 215

原创 MySQL的概念

本文介绍了数据库相关概念及MySQL的基本操作。主要包括:1)数据库(DB)、数据库管理系统(DBMS)和SQL语言的定义;2)MySQL服务的启动与停止命令,以及两种客户端连接方式;3)关系型数据库的概念和特点,即通过二维表存储数据,使用统一的SQL语言进行操作。摘要简明概括了数据库基础知识与MySQL实用操作要点。

2025-11-04 10:47:53 299

原创 01文本文件 - 写文件

本文介绍了C++文件操作的基本知识和使用方法。文件操作分为文本文件和二进制文件两种类型,主要通过ofstream、ifstream和fstream三类实现读写操作。重点讲解了写文件的五个步骤:包含头文件、创建流对象、打开文件、写入数据和关闭文件。文章还详细说明了文件的不同打开方式,如ios::in、ios::out等,以及如何配合使用这些方式。通过示例代码展示了如何创建文本文件并写入内容,最后总结了文件操作的关键要点:必须包含头文件、正确选择流对象、指定路径和打开方式、使用写入操作符以及及时关闭文件。

2025-11-03 11:04:03 306

原创 07多态案例3—电脑组装

本文通过面向对象方法实现了一个电脑系统的模拟,包含CPU、显卡和内存条三个核心组件。采用抽象基类封装各部件功能(计算、显示、存储),并通过具体厂商类(Intel和Lenovo)实现具体功能。电脑类通过构造函数依赖注入方式组合各部件,实现工作流程。测试代码展示了三种不同配置的电脑运行情况,验证了系统的灵活性和可扩展性。代码实现完整,包含资源管理和防悬空指针处理,展示了良好的面向对象设计原则。

2025-11-03 00:51:49 195

原创 06虚析构和纯虚析构

摘要:在多态场景下,当子类包含堆区属性时,父类指针释放时无法调用子类析构函数,导致内存泄漏。解决方法是将父类析构函数设为虚析构或纯虚析构。虚析构和纯虚析构都能确保正确释放子类对象,区别在于纯虚析构会使得类成为抽象类(无法实例化)。纯虚析构需在类外实现,否则基类堆区属性也无法释放。代码示例展示了通过虚/纯虚析构解决Cat子类中string*内存泄漏的问题。关键点:1)虚析构用于父类指针释放子类对象;2)无堆区属性时可省略;3)纯虚析构使类变为抽象类。

2025-11-03 00:38:47 245

原创 05多态案例2——制作饮品

本文演示了使用C++多态技术实现饮品制作的过程。通过定义抽象基类AbstractDrinking,声明了制作饮品的4个纯虚函数(Boil、Brew、PourInCup、PutSomething)和一个统一接口makeDrink()。派生类Coffee和Tea分别实现了这些虚函数,具体化了咖啡和茶叶的制作流程。测试函数doWork通过基类指针接收不同子类对象,调用统一的makeDrink()接口时表现出多态特性,能够根据实际对象类型执行相应的制作步骤。这种设计体现了面向对象的多态思想,通过统一接口实现了不同饮

2025-11-02 15:58:26 138

原创 02多态的原理剖析

摘要:C++多态分为静态多态(函数重载、运算符重载)和动态多态(虚函数机制)。静态多态在编译期确定函数地址(早绑定),而动态多态在运行期通过虚函数表(vftable)确定函数地址(晚绑定)。实现动态多态需要:继承关系、子类重写父类虚函数、父类指针/引用指向子类对象。示例中,Animal类的虚函数speak()被子类Cat和Dog重写,通过父类引用调用时执行各自子类的实现,展示了运行时多态特性。虚函数机制会增加类的大小(通常一个指针大小)。

2025-11-02 15:21:51 201

原创 01多态的基本概念

摘要:C++多态分为静态多态(函数重载/运算符重载,编译时绑定)和动态多态(虚函数继承,运行时绑定)。动态多态需满足继承关系和虚函数重写,通过父类指针/引用调用子类对象实现。示例中Animal基类定义虚函数speak(),Cat/Dog子类重写该函数,通过doSpeak()函数传递不同子类对象实现运行时多态调用。

2025-11-02 15:08:03 218

原创 04纯虚函数和抽象类

摘要:本文介绍了纯虚函数和抽象类的概念。纯虚函数通过在虚函数声明后加"=0"实现,包含纯虚函数的类称为抽象类。抽象类具有两大特点:1) 无法实例化对象;2) 子类必须重写纯虚函数,否则仍为抽象类。文中给出了代码示例,展示了Base抽象类定义纯虚函数func(),Son子类实现该函数,并通过基类指针调用子类函数的过程,演示了抽象类的特性与应用。

2025-11-02 14:43:11 217

原创 03多态案例1——计算器的类

摘要:本文通过C++代码展示了普通写法和多态实现计算器的对比。普通写法使用条件判断处理不同运算符,违背开闭原则;而多态通过抽象基类和派生类实现,代码结构更清晰、可读性强且易于扩展。多态利用父类指针指向不同子类对象,实现了加减乘法运算,符合面向对象设计原则,使后期维护和功能扩展更加便捷,是C++推荐的程序设计架构。

2025-11-02 11:24:30 174

空空如也

空空如也

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

TA关注的人

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