- 博客(98)
- 收藏
- 关注
原创 C++核心编程_ 函数调用运算符重载
C++中的函数调用运算符()可以重载,这使得对象能像函数一样被调用,称为仿函数。文中通过两个示例展示仿函数的用法:MyPrint类重载()实现字符串输出功能,MyAdd类实现整数加法。仿函数既可以通过实例对象调用,也可以使用匿名对象形式。这种方式提供了灵活的使用形式,将对象与函数调用的优势结合起来,增强了C++的表达能力。
2025-06-03 09:51:41
193
原创 C++核心编程_关系运算符重载
摘要:本文展示了C++中关系运算符重载的实现方法。通过Person类示例,重载了==和!=运算符,使自定义类型对象能够进行相等性比较。代码中比较了两个人的姓名和年龄属性,当两者都相同时返回true。测试函数test01()创建了两个Person对象并演示了运算符重载的使用效果。该技术扩展了运算符对自定义类型的支持,增强了代码的表达能力。
2025-06-03 09:21:41
51
原创 C++核心编程_赋值运算符重载
C++编译器会自动为类生成4个默认函数:无参构造函数、析构函数、拷贝构造函数和赋值运算符。当类属性涉及堆区内存时,默认赋值运算符会导致浅拷贝问题。示例中Person类通过重载operator=实现深拷贝,先释放原堆内存再新建内存空间拷贝数据。测试代码展示了三个Person对象通过重载的赋值运算符进行链式赋值,确保每个对象拥有独立的内存空间,避免了浅拷贝引发的内存问题。
2025-05-30 17:11:28
755
原创 C++_核心编程_ 左移运算符重载 “<<” 左移运算符
本文演示了如何通过重载左移运算符"<<"实现自定义类型的输出功能。在Person类中,将运算符重载函数声明为友元函数,使其能访问私有成员m_A和m_B。全局重载函数接收ostream引用和Person对象,以链式方式输出对象属性。测试代码创建Person对象p1并直接使用cout输出,验证了重载的有效性。关键点在于:1)使用友元突破封装;2)返回ostream引用实现链式调用。这种方法使自定义类型能像内置类型一样直接输出。
2025-05-29 15:16:53
157
原创 C++核心编程_4.5 运算符重载_4.5.1 加号运算符重载
本文介绍了C++中的运算符重载概念,重点讲解加号运算符重载的实现方法。通过Person类示例,展示了两种重载方式:成员函数形式和全局函数形式。成员函数实现通过this指针访问对象属性,全局函数则通过参数传递对象。同时演示了运算符重载的函数重载特性,如Person对象与整数的相加操作。测试代码验证了重载效果,输出两个Person对象相加及Person对象与整数相加的结果。运算符重载扩展了运算符功能,使其适用于自定义数据类型。
2025-05-28 09:44:14
188
原创 C++核心编程_const修饰成员函数
**常函数:*** 成员函数后加const后我们称为这个函数为**常函数*** 常函数内不可以修改成员属性* 成员属性声明时加关键字mutable后,在常函数中依然可以修改**常对象:*** 声明对象前加const称该对象为常对象* 常对象只能调用常函数
2025-05-26 17:07:03
95
原创 C++_核心编程_空指针访问成员函数
本文探讨了C++中空指针调用成员函数的问题。空指针可以调用不涉及this指针的成员函数(如ShowClassName),但若函数中使用了this指针(如访问成员变量mAge的ShowPerson),则可能导致程序崩溃。为确保代码健壮性,应在成员函数中检查this指针是否为NULL。示例代码演示了如何通过条件判断来避免空指针引发的错误,展示了正确处理空指针调用的方法。
2025-05-26 15:50:54
104
原创 C++核心编程_this指针的概念_
本文介绍了C++中的this指针概念及其应用。this指针是隐含在每个非静态成员函数中的特殊指针,指向调用该函数的对象。主要用于解决成员变量与形参同名时的区分问题,以及实现链式编程返回对象本身。示例代码展示了通过this指针区分同名变量(age)和使用return*this实现链式调用的方法,最终输出p1.age=2和p2.age=60的结果。
2025-05-26 11:10:41
201
原创 C++核心编程_对象模型和this指针
在C++中,类的成员变量和成员函数的存储方式有所不同。非静态成员变量属于类的对象,而静态成员变量、非静态成员函数和静态成员函数则不属于类的对象。代码示例中,Person类包含一个非静态成员变量m_A和一个静态成员变量m_B,以及非静态成员函数func()和静态成员函数func2()。通过test01()函数,可以输出类对象p的大小,结果显示只有非静态成员变量m_A占用了对象的内存空间。静态成员变量m_B在类外初始化,使用作用域解析运算符::。
2025-05-22 10:12:48
108
原创 C++核心编程静态成员
静态成员变量在编译阶段分配内存,类内声明、类外初始化,所有对象共享同一份数据。静态成员函数则共享同一个函数,且只能访问静态成员变量。示例1展示了静态成员变量的声明、初始化和访问方式,包括通过对象和类名访问。示例2则演示了静态成员函数的定义和调用,强调了其只能访问静态成员变量的特性。静态成员函数和变量也有访问权限的限制,私有静态成员无法在类外直接访问。
2025-05-21 16:51:12
91
原创 C++核心编程类对象作为类成员
当一个类的成员是另一个类的对象时,该成员称为对象成员。在创建包含对象成员的类对象时,构造和析构的顺序是固定的。具体来说,构造顺序是先调用对象成员的构造函数,再调用本类的构造函数;析构顺序则相反,先调用本类的析构函数,再调用对象成员的析构函数。例如,在代码中,Person类包含Phone类的对象成员m_Phone。当创建Person对象时,首先调用Phone的构造函数,然后调用Person的构造函数;析构时,先调用Person的析构函数,再调用Phone的析构函数。这种顺序确保了对象成员的正确初始化和清理。
2025-05-21 15:49:01
198
原创 C++核心编程_深拷贝与浅拷贝
该代码展示了C++中深浅拷贝的概念及其实现。浅拷贝仅复制对象的成员变量,而深拷贝则会在堆区重新申请内存空间进行复制,特别是当对象包含指向堆内存的指针时。代码中,Person类包含一个指向堆内存的指针m_height,通过自定义拷贝构造函数实现深拷贝,避免浅拷贝导致的资源管理问题。析构函数负责释放堆内存,防止内存泄漏。test01函数演示了深拷贝的使用,确保两个对象独立管理各自的堆内存。总结:当类成员涉及堆内存时,必须自定义拷贝构造函数实现深拷贝,以确保资源正确管理。
2025-05-21 09:04:00
340
原创 C++_构造函数调用规则
在C++中,编译器默认会为类生成三个函数:默认构造函数、默认析构函数和默认拷贝构造函数。默认构造函数和析构函数无参且函数体为空,而默认拷贝构造函数会对属性进行值拷贝。如果用户定义了有参构造函数,编译器将不再提供默认无参构造函数,但仍会提供默认拷贝构造函数。如果用户定义了拷贝构造函数,编译器将不再提供其他构造函数。代码示例中,Person类展示了这些构造函数的定义和调用规则,并通过test01和test02函数演示了不同情况下构造函数的调用行为。
2025-05-20 16:17:29
204
原创 C++核心编程_拷贝构造函数调用时机
在C++中,拷贝构造函数在以下三种情况下会被调用:1. 使用已创建的对象初始化新对象;2. 以值传递方式向函数传递参数;3. 以值方式返回局部对象。代码示例中,Person类展示了这些情况。test01函数通过已存在的Person对象初始化新对象,test02函数通过值传递调用拷贝构造函数,test03函数通过返回局部对象调用拷贝构造函数。然而,某些编译器(如VSCODE 2022)可能会优化返回值,避免调用拷贝构造函数。
2025-05-20 09:49:48
171
原创 C++核心编程_拷贝构造函数调用时机
构造函数分为无参构造、有参构造和拷贝构造三种类型,分别用于初始化对象、带参数初始化和拷贝对象属性。代码中通过Person类演示了这三种构造函数的实现,通过test01和test02函数展示了构造函数的调用方法,包括括号法、显式法和隐式转换法。此外,代码还强调了调用无参构造函数时不能加括号,以及匿名对象和拷贝构造函数的注意事项。最后,程序通过main函数调用测试函数,展示了构造函数的执行过程。
2025-05-19 15:56:20
193
原创 C++_核心编程_对象的初始化和清理
在C++中,对象的初始化和清理是通过构造函数和析构函数来实现的。构造函数在对象创建时自动调用,用于初始化对象的成员属性;而析构函数在对象销毁前自动调用,用于执行清理工作。构造函数和析构函数的名称与类名相同,构造函数可以有参数并支持重载,而析构函数不能有参数也不支持重载。在示例代码中,Person类定义了构造函数和析构函数,分别在对象创建和销毁时输出信息。通过test01函数创建Person对象后,程序在对象销毁时会自动调用析构函数,确保资源的正确清理。
2025-05-19 09:39:02
346
原创 **练习案例2:点和圆的关系**设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系。(拆解为.h和.cpp文件)
本文介绍了如何通过C++实现点和圆的关系判断。首先定义了一个Point类,用于表示点的坐标,并提供了设置和获取坐标的方法。接着定义了一个Circle类,包含圆的半径和圆心(Point类对象),并提供了设置和获取半径及圆心的方法。在main函数中,通过计算点与圆心之间的距离平方与半径平方的比较,判断点与圆的位置关系(点在圆内、圆上或圆外)。代码展示了如何创建圆和点对象,并调用check_Point_C函数进行关系判断。
2025-05-16 16:17:10
158
原创 **练习案例2:点和圆的关系**设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系。
本文介绍了如何通过C++编程判断点与圆的位置关系。首先,定义了一个Point类来表示点的坐标,包含设置和获取坐标的方法。接着,定义了一个Circle类来表示圆,包含半径和圆心坐标的属性,并提供设置和获取这些属性的方法。通过计算点与圆心之间的距离平方与半径平方的比较,判断点是在圆内、圆上还是圆外。最后,通过main函数创建了一个圆和一个点,并调用check_Point_C函数输出点与圆的位置关系。
2025-05-16 15:28:11
211
原创 C++核心编程_练习案例1_设计立法体类
该案例设计了一个立方体类(Cube),用于计算立方体的体积和表面积,并通过成员函数和全局函数判断两个立方体是否相等。类中包含设置和获取长、宽、高的方法,以及计算体积和表面积的函数。成员函数IsSameByClass和全局函数IsSame通过比较两个立方体的体积来判断它们是否相等。在main函数中,创建了两个立方体对象,并分别使用成员函数和全局函数进行相等性判断,最终输出结果。该案例展示了类的封装、成员函数与全局函数的使用,以及对象之间的比较操作。
2025-05-14 15:52:50
206
原创 C++核心编程_struct和class区别_ 成员属性设置为私有
本文介绍了C++面向对象编程中的封装特性,并通过多个示例展示了如何在实际编程中应用封装。首先,封装是将属性和行为作为一个整体,表现生活中的事物,并通过访问权限控制属性和行为的可见性。文章通过设计圆类和学生类,展示了如何将属性和行为封装在类中,并通过公共、保护和私有权限控制访问。此外,文章还比较了struct和class在默认访问权限上的区别,并强调了将成员属性设置为私有的优点,如控制读写权限和检测数据的有效性。最后,通过一个Person类的示例,展示了如何通过私有属性和公共方法实现对数据的有效管理和控制。
2025-05-12 09:44:55
112
原创 3.3 函数重载
函数名可以相同,提高复用性同一个作用域下函数名称相同函数参数类型不同或者个数不同或者顺序不同函数的返回值不可以作为函数重载的条件//3 函数提高//3.1 函数默认参数//在C++ 中,函数的形参列表中的形参是可以有默认值的//语法:` 返回值类型 函数名 (参数= 默认值){}`//}//////1.如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须有默认值////2.如果函数声明有默认值,函数实现的时候不能有默认参数////}//////20//
2025-05-08 09:40:29
145
原创 C++_核心编程04 引用的使用
2.1作用: 给变量起别名语法: `数据类型 &别名 = 原名`2.2 引用注意事项* 引用必须初始化* 引用在初始化后,不可以改变。
2025-04-30 15:51:22
316
原创 武汉地铁客流预测:2025年五一期间总客运量可能达到2800万-2850万乘次。单日峰值:5月1日或5月2日可能突破550万乘次,返程日(5月5日)预计约480万-500万乘次
2025年五一期间,武汉地铁客流将呈现以下特征:总量再创新高:日均约550万乘次,总客运量逼近2850万乘次。结构性增长:2号线、5号线及景点车站成核心增长点,交通枢纽站夜间压力突出。管理升级:通过智慧化手段和动态调度,保障“大客流”下的安全与效率。
2025-04-30 11:17:41
1691
原创 长沙地铁2025年五一假期(5月1日-5日)客流预测分析 整体客流趋势单日峰值创新高:5月1日客流量达392.2万人次,刷新历史单日纪录
长沙地铁1-6号线2025年五一假期(5月1日-5日)客流分析 整体客流趋势单日峰值创新高:5月1日客流量达392.2万人次,刷新历史单日纪录
2025-04-30 10:48:21
1170
1
原创 C++核心编程_指针VS数组
指针和数组是密切相关的。事实上,指针和数组在很多情况下是可以互换的。可以通过使用指针的算术运算或数组索引来访问数组。例如,一个指向数组开头的指针,
2025-04-30 09:27:46
138
原创 C++核心编程 1.2 程序运行后
注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放。由编译器自动分配释放, 存放函数的参数值,局部变量等。
2025-04-29 16:27:37
251
原创 C++核心编程 1.内存分区模型
* C++中在程序运行前分为全局区和代码区* 代码区特点是共享和只读* 全局区中存放全局变量、静态变量、常量* 常量区中存放 const修饰的全局常量 和 字符串常量
2025-04-29 09:41:54
610
原创 C++ 基础综合练习案例01:联系人管理系统(Part04)_
清空联系人数组,将abs->m_size- = 0。功能描述:清空通讯录中所有信息。* 封装清空联系人函数。
2025-04-29 08:46:29
448
原创 C++ 基础综合练习案例01:联系人管理系统(Part03)
/ 若要进行联系人修改,先需要进行查找联系人,查找联系人后进行修改。功能描述:按照姓名重新修改指定联系人。* 封装修改联系人函数。* 测试修改联系人功能。## 9、修改联系人。// 修改联系人函数。
2025-04-28 17:25:08
210
原创 AFC自动售检票系统专业名词解释
在AFC系统24小时连续运营时,为保障持TVM/BOM在上一个运营日发售的单程票的乘客可在下一个运营日顺利使用而设定的宽限时间段。指一天AFC系统结算的截止时间, AFC系统以运营开始时间之后及该时间之前所接收本运营日的交易数据进行当天(本运营日)的结算统计。指运营开始时间与运营结束时间内的时间段, 目前系统运营日为本日凌晨2:00(含2:00)至次日凌晨2:00(不含2:00),运营日≤24小时。指一天开始运营的某一时间点,到达该时间时,AFC系统开始运营,使AFC系统进入对乘客的各种服务状态。
2025-04-28 16:24:40
456
原创 C++ 基础综合练习案例01:联系人管理系统(Part02)
/ 输入联系人姓名,判断联系人是否存在,若存在则返回该联系人在联系人数组内的索引,不存在返回-1。// 分为两部分,首先查找判断联系人是否存在及存在位置,再进行删除。//进行函数封装,传入联系人,及联系人姓名。// 判断联系人是否存在函数。
2025-04-28 15:14:03
421
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人