- 博客(27)
- 收藏
- 关注
原创 cpp自学 day27(—>运算符)
文章摘要: 本文展示了一个基于作用域的智能指针(ScopedPtr)的实现,用于自动管理Entity对象的内存生命周期。代码包含以下核心内容:1) Entity类作为被管理对象,包含构造/析构函数和成员函数;2) ScopedPtr类通过operator->重载提供指针式访问,并在析构时自动释放内存;3) 禁用拷贝构造和赋值运算符确保独占所有权;4) 解释了箭头运算符的重载机制和执行流程;5) 补充了使用nullptr计算结构体成员偏移量的技巧。该实现模拟了unique_ptr的基本行为,展示了智能指
2025-06-08 23:26:23
406
原创 cpp自学 day26(智能指针)
摘要:本文详细解析C++11引入的智能指针机制,重点介绍三种核心类型:unique_ptr(独占所有权,支持移动语义)、shared_ptr(共享所有权,基于引用计数)和weak_ptr(非拥有性引用,解决循环引用问题)。智能指针通过RAII原则自动管理内存,有效防止内存泄漏和野指针。文章对比了make_unique/make_shared与传统new创建方式的优劣,提供典型使用场景示例,并列出各类型常用方法。特别强调使用注意事项,包括避免裸指针混用、循环引用风险等。通过智能指针可提升代码安全性和简洁性,是
2025-06-08 21:37:22
1115
原创 cpp自学 day24(STL初步认识)
C++ 早期缺乏标准化的数据结构和算法库,开发者需要重复实现基础功能。:通过模板技术实现,提高代码复用性和开发效率。:由 Alexander Stepanov 提出并推动成为 C++ 标准的一部分(1994 年正式纳入)。
2025-05-08 15:30:46
390
原创 cpp自学 day23(类模板02)
C++类模板的核心应用需关注继承关系、成员函数实现及友元函数协作。当子类继承模板父类时,须明确指定父类的模板参数类型以确保内存分配,若需灵活指定类型则子类自身也需定义为模板类。类模板的成员函数在类外实现时需严格遵循模板声明规范,通过作用域运算符关联所属类,构造函数推荐使用初始化列表直接初始化成员变量以提升效率。分文件编写类模板时需将声明与实现统一至.hpp文件,避免因延迟实例化特性导致的链接错误。友元函数实现分为类内直接定义和类外分步声明两种,后者需提前前向声明模板类及函数模板,并通过空模板参数标记确保绑定
2025-04-23 16:49:37
890
原创 cpp自学 day22(类模板01)
类模板允许我们定义通用的类,这些类可以针对不同的数据类型进行实例化。当我们创建一个类模板的实例并将其作为参数传递给函数时,有几种不同的方法可以实现这一点。// 1. 即使存在错误语法(如未定义变量),只要不调用就不会报错。2. 参数模板化 --- 将对象中的参数变为模板进行传递。3. 整个类模板化 --- 将这个对象类型模板化进行传递。1. 指定传入的类型 --- 直接显示对象的数据类型。// 2. 支持模板类型相关的延迟编译特性。类模板实例化出的对象,向函数传参的方式。
2025-04-22 10:14:15
399
原创 cpp自学 day21(模板)
C++模板特化技术通过类型特化解决通用模板对自定义类型(如Person类)的局限性。全特化语法template<>显式定义特定类型逻辑,例如myCompare<Person>直接比对对象的m_Name和m_Age属性,突破通用模板无法访问成员变量的限制。该技术优先于通用模板调用,避免冗余条件判断,提升代码维护性,在保持泛型优势的同时实现精准类型适配。其核心价值在于平衡通用性与灵活性,适用于自定义类型比较、STL算法适配(如排序规则)等场景,通过特化版本扩展模板应用边界,成为处理类/结构体专属逻辑的核心方案。
2025-04-21 17:01:24
963
原创 cpp自学 day20(文件操作)
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放通过文件可以将数据持久化C++中对文件操作需要包含头文件的三大类:1. ofstream:写操作2. ifstream:读操作3. fstream:读写操作。
2025-04-07 23:02:44
894
原创 cpp自学 day18(继承)
继承的好处:减少重复代码语法: class 子类 : 继承方式 父类派生类中的成员,包含两大部分: 一类是从基类继承过来的,一类是自己增加的成员。从基类继承过过来的表现其共性,而新增的成员体现了其个性。
2025-04-01 15:46:33
932
原创 cpp自学 day17(运算符重载)
何时使用全局函数重载运算符以及何时使用成员函数重载运算符运算符类型全局函数重载成员函数重载备注一元运算符是是如operator++(前置和后置)和operator!二元运算符是否如operator+operator-,当操作数之一不是类类型时使用全局函数输出运算符是否operator<<用于输出流输入运算符是否operator>>用于输入流下标运算符是否operator[]用于访问数组或容器元素函数调用运算符是否operator()用于类实例的函数调用。
2025-03-27 15:30:21
1493
原创 cpp自学 day16(友元)
在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术友元的目的就是让一个函数或者类 访问另一个类中私有成员。
2025-03-25 11:13:58
1520
原创 cpp自学 day15(类和对象——对象模型和this指针)
概念核心要点空对象内存占1字节,保证对象有唯一地址。this指针隐含指针,指向调用者对象;支持链式编程和解决命名冲突。常函数用const修饰,禁止修改成员变量(mutable例外)。常对象用const修饰,只能调用常函数,禁止修改非mutable成员。关联记忆this->明确指向 → 常函数锁成员 → 常对象限调用 → mutable破约束。
2025-03-21 17:41:33
800
原创 cpp自学 day14(类和对象——对象的初始化和清理)
构造函数调用规则用户定义有参构造 → 保留默认拷贝构造用户定义拷贝构造 → 不生成其他默认构造对象成员构造顺序成员对象构造 → 本类构造析构顺序相反(后进先出)匿名对象生命周期Person(10);// 本行结束立即调用析构深浅拷贝选择原则含指针/堆资源 → 必须深拷贝基础类型 → 可用浅拷贝。
2025-03-18 15:13:58
1258
原创 cpp自学 day6
号用于字符串时,为字符串拼接运算符,表示把+号前后的两个字符串拼接成一个新的字符串。添加随机数种子,利用当前系统时间生成随机数,防止每次生成的随机数都一样。数组名在大多数情况下会被解释为指向数组首元素的指针,但在某些情况下(如。数组名不仅仅是一个地址,它还有这代表数组首地址以外的其它性质。数组作为函数参数传递时,实际上传递的是数组的首地址。号前后的两个字符串拼接成一个新的字符串。时,为字符串拼接运算符,表示把。表示生成的数在0-100。
2025-03-01 16:17:55
394
原创 cpp自学 day3
因为是整形 所以数组元素后续地址值与首地址差4,则指针往后移动4个字节就可以,指到下一个元素。32位操作系统 sizeof(int */float */double */char *)都是占4个字节。//表示数组首地址。常量指针:const int *p = &a;指针常量:int const *p = &a;使用指针:*p 表示找到指针地址值对应的数据。个人理解:地址值可以改,但指向的值不能更改。int * 就是一个类型,指针类型。指针:用于保存变量的地址值。
2025-02-26 00:23:00
246
原创 cpp自学 day2(2)
如果函数不需要返回值,则在声明函数的时候void ,return(可写可不写)函数的声明:函数写在主函数以后,可以在主函数前面写个声明告诉其函数的存在。三目运算符:a>b?a:b,a大于b返回a,否则返回b。例:int max (int a,int b);system("pause")按任意键继续。头文件写声明 源文件写定义。
2025-02-25 10:48:18
177
原创 cpp自学 day2(1)
sizeof:sizeof(int/arr/double)统计数据类型所占内存空间。数组占用空间根据其中元素类型而定。continue:在循环中跳过后面的语句,继续循环。例:goto FLAG;数组:数组名是常量,不可赋值。goto 标志:强制跳转。
2025-02-24 17:19:34
205
原创 cpp自学 day1
后置递增 先运算 再让变量+1 (运算结束后再让对应变量+1。cout << "输出结果为:" <<a<<前置递增 先让变量+1 再进行运算。给字符a输入值:cin >> a。a=0 a+=2 a=2 加等于。字符串、布尔类型同理。
2025-02-24 10:46:19
106
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人