
C/C++
文章平均质量分 89
C++ 是一门面向对象编程的语言,把问题分解成各个对象,建立对象的目的不是为了完成一个步骤.而是为了描述某个事物在整个解决问题的步骤中的行为,更注重的是程序的整体设计,方便程序后期维护、优化和管理,让一个功能尽可能的通用。面向对象编程只有一个价值: 应对需求的变化,本意是要处理大型复杂系统的设计和实
天喜Studio
6月份城市(哈尔滨)之星TOP2、C/C++领域新星创作者。
展开
-
【C++】四种强制类型转换
C++四种类型转换static_cast(待转换量)dynamic_cast(待转换量 )const_cast(待转换量 )reinterpret_cast( 待转换量 )为什么要提出新的类型转换?C语言中的强制类型转换无所不能,而C++强调类型安全。发生隐式类型转换精度丢失时可能无法察觉到static_cast静态转换编译时确定的,用于相关内容的转换 ,基本的数据类型之间转换,指针之间类型的转换int short char 之间浮点数与整数普原创 2024-10-24 22:57:53 · 782 阅读 · 0 评论 -
【C/C++】菱形继承问题
菱形继承是一种多重继承的特殊情况。当一个类从两个或多个基类派生,而这些基类又有共同的基类时,就形成了菱形继承结构。原创 2024-08-21 21:36:07 · 1256 阅读 · 0 评论 -
【LeetCode】146.LRU页面置换
LRU 是操作系统中的缓存淘汰策略,还有 FIFO、LFU 等淘汰算法当缓存空间不足时,淘汰掉最近最少使用的数据项Least Recently Used通过使用链表维护一个数据项的访问历史来决定哪些数据项应该被淘汰,当访问一个数据项时,将其移到链表的头部,代表最近使用;当需要淘汰数据项时,将链表的尾部开始删除。原创 2024-08-02 22:00:56 · 1028 阅读 · 0 评论 -
【C++STL】优先级队列priority_queue
priority_queue优先级队列(priority_queue)即堆(heap),内部可以看作是一颗完全二叉树分为大根堆和小根堆,父节点均大于孩子节点是大根堆,父节点均小于孩子节点是小根堆优先级队列能够每次将优先级最大的元素拿出,然后自动调整堆的结构#include //存储int型元素的大顶堆std::priority_queue pq;//存储int型,队列底层vector,大顶堆std::priority_queue原创 2024-08-01 17:30:56 · 402 阅读 · 0 评论 -
【C++】面向对象的软件设计原则
单一职责原则 Single Responsibility Principle单一职责原则指出:“就一个类而言,应该仅有一个引起它变化的原因。”实现单一的功能开闭原则 Open-Closed Principle开闭原则指出: “一个软件实体应当对扩展开发,对修改关闭。”里氏替换原则 Liskov Substitution Principle里氏代换原则指出: “当一个子类的实例应该能够替换任何其超类的实例的时候,它们之间才具有继承的关系。”子类型必须能够替换它们的基类依赖倒置原则 D原创 2024-07-27 21:00:40 · 566 阅读 · 0 评论 -
【C/C++】printf和cout的区别
printf 函数是 C 语言标准库 中的输出函数,是 C 语言用于向标准输出设备输出数据的主要方式cout 是 C++ 标准库 中的输出流对象,是 C++ 面向对象编程思想下的输出方式类型安全printf 需要手动指定格式控制符来确定输出数据的类型例如格式控制符与实际传递给 printf 的参数类型不匹配,如果将一个浮点数作为参数传递给使用 %d格式控制符的 printf 调用,可能会出现错误的输出结果而cout 是类型安全的。它能够根据传递给它原创 2024-07-24 14:04:23 · 1603 阅读 · 0 评论 -
【C++】Qt实现简易的计算器(附代码)
中缀表达式和后缀表达式后缀表达式,又称逆波兰式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)。中缀表达式转换为后缀表达式创建一个空栈和一个空串,用于存放运算符和转换后的后缀表达式;从左到右遍历中缀表达式中的每个元素:如果当前元素是操作数,将其添加到输出串的末尾;2.如果当前元素是左括号“(”,将其压入栈中;3.如果当前元素是右括号“)”,则重复出栈操作直到栈顶元素是左括号,并将所有操作符加入输出串中;4.如果原创 2024-07-24 13:53:22 · 2144 阅读 · 1 评论 -
【Qt】信号和槽机制
信号和槽的优点1.实现了类之间的数据通信2.实现了对象之间的松散耦合,易于维护和扩展3.信号和槽机制容易扩展,实现自定义的通信机制信号和槽可以一对一 、一对多和多对一原创 2024-06-28 16:08:25 · 634 阅读 · 0 评论 -
【C++】final关键字 | 避免派生、重写
C++11 标准引入的新关键字:final一、避免继承使用 final修饰整个类,表示这个类不能被其他类继承例如:在单例模式中使用 final关键字防止类被继承,严格控制实例化,保证了类不被进一步扩展例如:在单例模式中使用 final关键字防止类被继承,严格控制实例化,保证了类不被进一步扩展原创 2024-06-26 16:20:16 · 512 阅读 · 0 评论 -
【C++STL】Vector扩容机制
Vector 扩容机制Vector 在存储元素时,会预先分配一定的存储空间。当不断向 Vector 中添加元素,导致已分配的空间不足时,就需要进行扩容 来增加存储空间,以满足新元素的添加需求为什么需要扩容机制通过扩容机制,Vector 能够灵活地适应元素数量的变化,提供稳定和可靠的数据存储扩容策略固定倍数扩容每次扩容为原来容量的两倍。假设初始容量为n,当空间不足时,将容量扩展为2n优点:简单高效缺点:可能会造成空间浪费渐进式扩容每次扩容增加一个固定的增量,比如每次增加n个元素的空间原创 2024-06-25 20:40:54 · 1100 阅读 · 0 评论 -
【C++】Template模板
Template在 C++ 中 模板被用于编写通用、可复用的代码,通过使用模板,可以避免重复编写相似的代码,提高代码的复用性和可维护性。模板分为函数模板和类模板,模板是泛型编程的基础,可以代表多个类型函数模板用于定义通用的函数,可以接受不同的参数,模板 T 会自动推导类型add 函数中可以接受 int型与 float型参数原创 2024-06-15 22:07:03 · 480 阅读 · 2 评论 -
【C/C++】观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。一、观察者模式的实现1. 定义观察者接口:包含 update 更新方法,定义为虚函数2. 创建具体观察者:实现观察者接口,定义接收到通知时的更新动作3. 定义主题接口:添加、删除和通知观察者4. 创建具体主题:实现主题接口,实现观察者列表,更新数据时通知观察者当主题对象状态发生变化时,它的所有依赖者(观察者)都会自动收到通知并更新原创 2024-05-27 23:12:35 · 567 阅读 · 0 评论 -
【C/C++】Makefile文件的介绍与基本用法
Makefile 是被用于自动化构建过程的脚本文件,对一个项目具有高可用性和可重用性。Makefile 描述了如何从一个或多个源文件编译、链接和生成目标文件或可执行文件。可以通过使用 make 命令方便地编译和重新编译项目,而无需手动执行每个构建步骤。源代码的编译过程 在我们编写完代码之后的.c文件被称为源代码文件,此时是代码的预处理期。● 编译期:在我们按下调试键后,编译软件中的编译器会将我们的源代码进行编译,成为汇编语言,如果我们在书写代码中有语法等错误,在编译时编译器将不会通过,会报出以原创 2024-05-26 22:52:49 · 1467 阅读 · 0 评论 -
【C/C++】设计模式——工厂模式:简单工厂、工厂方法、抽象工厂
工厂模式提供了一种封装对象创建过程的方式,使得代码更易于管理和扩展。工厂模式隐藏了对象的具体创建过程,从而可以通过接口来创建对象,而无需关心具体的实现细节。扩展性高:工厂模式利于后期方法的维护,解耦合。简单工厂模式(静态工厂)将对象的创建和使用分离,由一个工厂类根据传入的参数来决定创建哪一种产品类的实例,简单工厂违背了开闭原则,故将简单工厂中的工厂拆分为多个工厂:增加产品时 Factory 工厂不用改变,只需要添加对应产品类型的工厂原创 2024-05-11 14:22:00 · 1110 阅读 · 0 评论 -
【C++11新特性】lambda表达式和应用场景
C++11 中的 lambda表达式用于定义匿名函数,同样有参数列表,返回值、类型和函数体,但是它可以在函数内部定义。定义小型匿名函数对象时更加便捷。lambda表达式的格式:auto 函数名 = [capture](parameters) -> return_type { body };其中:captures 捕获列表,用于捕获lambda外部的变量 , lambda可以把上下文变量以**值=或引用&**的方式捕获(如果是引用传递,lambda 函数将会改变变量值),在body中直接使原创 2024-05-09 22:53:52 · 521 阅读 · 0 评论 -
【C/C++】设计模式——单例模式
单例模式确保了一个类只有一个实例,并提供一个全局访问点来获取这个实例。单例模式的特点:1.一个类只有一个实例2.提供一个全局访问点来获取这个实例3.单例对象必须由单例类进行创建(构造函数设为私有 private)如何实现单例模式?构造析构拷贝构造私有提供静态公有的获取对象的方法控制资源访问:通过单例模式,可以确保对某个资源的全局访问点只有一个,这样可以防止其他对象对该资源的访问导致状态不一致或数据污染。减少系统开销:如果一个类的实例创建非常消耗资源(如读取配置文件、打开数据库连接等),原创 2024-05-04 19:43:42 · 889 阅读 · 0 评论 -
【C/C++】右值引用 | 完美转发 | std::move移动语义
引用可以分为左值引用,右值引用,常引用左值:可以出现在赋值号左和右的值可以取地址、修改、起名例如:变量、指针、对象右值:只能出现在赋值号右面不可取地址、修改、起名例如:常量、函数返回值、表达式返回值常引用可以接受左值也可以接受右值,但是不可以修改引用的值左值引用:给变量起别名,使用 &定义,定义了引用就要初始化,不存在空的引用!左值引用知识点:引用的概念和用法右值引用:用 && 符号引用右值左值引用和右值引用定义举例:原创 2024-03-01 11:13:57 · 797 阅读 · 5 评论 -
【C/C++】inline内联函数详解
内联函数在C++中是一种特殊的函数,内联函数的代码在编译时会在调用的位置展开,而不是在运行时调用函数。这样做可以消除函数调用的开销,从而提高程序的执行效率。相当于define宏替换内联函数可以分为:隐式内联函数:类内的函数(虚函数除外)都为隐式内联函数显式内联函数:在类外使用inline关键字修饰的函数原创 2024-02-28 23:40:37 · 1670 阅读 · 4 评论 -
【C++STL】迭代器分类 失效问题
正向迭代器iterator容器.begin()容器.end()正向遍历容器内元素常正向迭代器容器.cbegin()容器.cend()正向遍历容器内的常量元素反向迭代器容器.rbegin()容器.rend()反向遍历容器内元素常反向迭代器容器.crbegin()容器.crend()反向遍历容器内的常量元素int main()//正向迭代器while (it!it++;//常正向迭代器while (cit!cit++;//反向迭代器。原创 2024-02-25 18:29:54 · 738 阅读 · 2 评论 -
【C++STL】STL容器详解
容器底层实现描述包含头文件向量vector数组,快速访问可以在O(1) 时间内访问和修改任意元素,在序列尾部进行插入和删除时,具有 O(1)时间复杂度,对任意项的插入和删除就有的时间复杂度较高,尤其对向量头的添加和删除开销非常高双端队列deque一个中央控制器和多个缓冲区基本上与向量相同,唯一的不同是,其在序列头部插入和删除操作时间复杂度也为 O(1)表list双向链表,快速增删对任意元素的访问时间复杂度为 O(n),支持快速插入删除 O(1)原创 2024-02-24 17:11:42 · 870 阅读 · 3 评论 -
【C++11新特性】详解智能指针 创建、使用、注意事项
C++11 中引入了智能指针,便于进行内存管理使用智能指针 需要包含头文件:#include 以及 std 命名空间智能指针会自动回收空间,不需要担心内存泄漏问题四种智能指针:auto_ptr(C++11 被弃用)unique_ptrshared_ptrweak_ptr一、 auto_ptr创建auto_ptr对象的三种方式:原创 2024-02-18 17:04:18 · 1937 阅读 · 0 评论 -
【C++】静态库lib和动态库dll的优缺点、使用方法
静态库lib优点静态库的运行效率高、速度快缺点动态库dll优点1.多个应用程序依赖一个动态库时,动态库只需要拷贝一份,节省内存空间2.更新、部署、发布简单1.多个应用程序依赖一个静态库时,静态库会存在多份,浪费内存空间2.更新、部署麻烦:修改静态库代码后,需要重新编译库文件以及整个可执行文件使用方法1.将头文件拷贝到当前项目中,添加头文件依赖#include "./xx.h"2.将库文件lib拷贝到当前项目中,添加库文件依赖#pragma comment(lib,"./xx.lib")原创 2023-09-08 16:06:33 · 1319 阅读 · 0 评论 -
C++全部基础知识汇总 全篇超3万字超详细!(干货笔记分享)零基础学C++这一篇就够了
C++ 是一门面向对象编程的语言,把问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为,更注重的是程序的整体设计。2.c++输入输出3.小结三、命名空间与作用域1.作用域2.命名空间3.为什么需要using namespace std ?四、动态申请内存空间new-delete1.c语言动态申请内存空间2.new-delete3.new指针、new数组3. 总结五、bool布尔类型1.自制BOOL类型2.bool3.BO原创 2023-09-01 23:19:13 · 3093 阅读 · 6 评论 -
【C/C++】#define宏替换高级用法
传参数的宏替换二、宏替换不会做表达的运算三、宏替换多行—反斜杠连接四、#undef取消宏替换五、宏替换转字符串、拼接等用法六、宏替换的优缺点宏替换的优点:便于维护,提高代码的可读性由于宏替换将代码片段在预处理期替换,可以提高程序的执行效率宏替换的缺点:没有安全类型的检查宏定义在部分代码中可能不直观,可能不方便调试宏替换不会运算求解原创 2023-08-30 10:20:25 · 3406 阅读 · 0 评论 -
【C/C++】虚析构 | 抽象类
纯虚函数、抽象类在多态下,有时抽象出来的父类的虚函数作为接口函数,不知道如何实现或不需要实现只有继承的子类才明确如何实现,就可以把父类的虚函数变为纯虚函数做法是:将父类中的虚函数加上 =0 virtual void fun() = 0;纯虚函数在当前类不必实现,而子类必须要重写实现纯虚函数,否则不能定义子类对象(error:纯虚函数xxx 没有强制替代项)当类中存在纯虚函数时,这个类就被称为抽象类,抽象类不允许定义对象接口类:类中的所有虚函数都是纯虚函数原创 2023-08-29 11:13:00 · 183 阅读 · 0 评论 -
【C/C++】虚函数调用流程 | 虚函数和一般函数的区别
虚函数指向一个虚函数表,表中存放了虚函数的地址,实际的虚函数存放在代码段中。当子类继承了父类的时候也会继承父类的虚函数表,当子类重写父类中虚函数的时候,会将继承到虚函数表中的地址替换为重写的函数地址。这个过程称为覆盖虚函数列表中,在重写虚函数的后面是父类未重写的虚函数,然后是子类虚函数以上的过程将在编译阶段进行调用流程不同:虚函数通过虚函数指针间接引用,普通函数可以使用函数名直接调用调用效率不同:虚函数调用流程复杂,效率低,普通函数效率高使用场景不同:虚函数的目的是为了实现多态使用了虚函数原创 2023-08-28 09:30:07 · 1393 阅读 · 0 评论 -
【C/C++】多态的概念 | 虚函数 | 虚函数指针
多态是C++面向对象编程中重要的特性。相同的行为方式可能导致不同的行为结果,即产生了多种形态行为,即多态。就是不同的类可以共享一个函数,但是各自的实现不同为了实现多态,首先要有继承关系,在基类中声明一个虚函数,然后再派生类中进行不同的实现根据继承中的父类指针可以指向子类对象:继承的条件下,父类的指针可以指向任何继承于该类的子类对象,多种子类对象具有多种形态由父类的指针统一管理 父类的指针也会具有多种形态多种子类表现为多种形态由父类的指针进行统一,那么这个父类指针就具有了多种形态。(多态)原创 2023-08-27 12:30:58 · 320 阅读 · 0 评论 -
【C/C++】父类指针指向子类对象 | 隐藏
隐藏在同一个类中,两个只有参数列表不同(同名同返回类型)的函数能构成函数重载,我们调用的时候,可以根据参数类型、参数个数,编译器自动匹配调用哪个函数。例如:class CTest { void fun(); void fun(int a); void fun(char a);}如果在父类和子类中出现同名函数,由于在不同的类中即不同的作用域,即使函数的参数列表不同,也不能构成函数重载这种情况称为隐藏C++中,当一个派生类定义了一个和基类同名的成员函数时,基类的同名函数会被隐藏,这原创 2023-08-26 09:51:20 · 2819 阅读 · 0 评论 -
【C/C++】继承中构造函数与析构函数执行的顺序
构造函数执行顺序:当派生类对象被创建时,首先会调用基类的构造函数,然后调用派生类自己的构造函数。构造函数的调用顺序是按照继承的顺序,从基类依次往下调用。即先调用最上层的基类,再依次往下调用定义子类对象,优先调用的是子类的构造函数,在子类的初始化参数列表初始化父类和子类的成员,先调用父类的构造函数初始化父类成员,再初始化子类成员(与内存布局顺序一致)析构函数执行顺序:析构函数的调用顺序与构造函数的调用顺序相反,先调用派生类自己的析构函数,再依次回溯调用基类的析构函数,直至最上层的基类的析构函数原创 2023-08-25 13:24:21 · 1832 阅读 · 0 评论 -
【C/C++】继承的方式和优点
继承方式描述了父类成员在子类中的访问控制继承方式是指子类从父类继承了一些成员,包括数据成员和成员函数。继承方式共有三种:publicprotectedprivate继承方式和访问修饰符共同决定了父类成员在子类中表现出来的属性在继承关系中,子类可以访问父类中被继承的公有成员和受保护成员,但无法访问父类中被继承的私有成员。公有成员在子类中的访问控制仍然保持为公有,受保护成员在子类中的访问控制变为受保护。原创 2023-08-24 11:17:46 · 525 阅读 · 0 评论 -
【C/C++】类之间的纵向关系——继承的概念
继承的概念继承是类之间的纵向关系,是C++面向对象中的重要特性继承的类称为派生类(子类),被继承的类称为基类(父类)在子类类名后加: 继承方式 父类class CFa子类和父类内存空间分布成员在内存空间分布为:先父类成员后子类成员,而每个类中的成员分布与在类中声明的顺序一致。子类对象所占用的空间:子类继承父类,相当于将父类的成员包含到自己的类里,所以定义子类对象所占用的空间大小除了子类自身的成员还包括父类的成员。父类对象的内存空间只包含父类自己的属性和方法,不包含任何子类的属性和方法原创 2023-07-31 10:32:14 · 246 阅读 · 0 评论 -
【C/C++】类之间的横向关系
类之间的关系可以分为横向关系和纵向关系,本文介绍类之间的横向关系一、组合组合(Composition):表示一种拥有的关系,它使一个类成为另一个类的一部分。组合关系是一种强依赖关系,如果父对象销毁,则子对象也将被销毁。组合是包含与被包含的关系。组合是一个类中包含另一个类对象。组合是一种强所属关系,组合关系的两个对象往往具有相同的生命周期,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,整体不存在,部分一定不存在。例原创 2023-07-23 22:29:54 · 384 阅读 · 1 评论 -
【C/C++】类成员进阶——类中常量成员const
常量的特性是:定义就必须初始化,一旦初始化后就不能再进行修改实际上,上面的方式在构造函数中并不是真正的初始化,而是对变量进行赋值当类中有const类型的变量时,在定义的时候必须要初始化,而这个初始化操作是在初始化参数列表中完成的,而构造函数的函数体代码中进行的操作严格来说是赋值,而并非初始化。先执行初始化参数列表,在执行构造函数体中的代码。对于普通的变量来说也可在初始化参数列表中初始化。初始化参数列表:用来真正初始化对象中成员属性,构造参数列表后加冒号,多个成员属性用逗号分隔常函数:类中的成原创 2023-07-22 12:47:04 · 460 阅读 · 0 评论 -
【C/C++】类成员进阶——类中静态成员static
静态static成员属性属于类,编译期存在,一个类中只会存在一份,多个对象共享这一份静态成员存在与否和是否定义对象无关,在构造函数中不能对其初始化(赋值)静态、静态成员二、静态成员变量1.静态成员变量属于类2.静态成员变量一个类中只会存在一份3.静态成员变量存在与否和是否定义对象无关4.多个对象共享一份静态成员变量静态static成员属性三、静态成员函数1.静态成员函数的定义2.静态成员函数的使用3.静态成员函数没有this指针普通成员函数与静态成员函数的区别本文全部代码:原创 2023-07-16 21:07:43 · 399 阅读 · 0 评论 -
【C/C++】深拷贝与浅拷贝
深拷贝是在堆区重新申请空间,进行拷贝操作深拷贝是指在对象复制过程中,不仅复制对象的值,还复制指针所指向的内容这意味着新对象将有其独立的内存副本,对其中一个对象进行修改不会影响到另一个对象浅拷贝是简单的赋值拷贝操作浅拷贝是指在对象复制过程中,只会简单地复制对象的值,包括指针的地址,而不复制指针所指向的内容新对象和原对象将共享同一块内存,如果其中一个对象修改了这块内存,那么另一个对象也会受到影响拷贝构造函数中通过为m_height分配新存并复制p.m_age和p.m_height的值来执原创 2023-06-30 20:58:20 · 402 阅读 · 1 评论 -
【C/C++】拷贝构造函数的调用 使用方法
默认情况下,c++编译器至少给一个类添加3个函数1.默认构造函数(无参,函数体为空)2.默认析构函数(无参,函数体为空)3.默认拷贝构造函数,对属性进行值拷贝构造函数的调用规则:* 如果用户定义有参构造函数,c++不再提供默认无参构造,但是会提供默认拷贝构造* 如果用户定义拷贝构造函数,c++不再提供其他构造函数拷贝构造函数的调用拷贝构造函数调用有三种情况:使用一个已经创建完毕的对象来初始化一个新对象值传递的方式给函数参数传值以值方式返回局部对象根据构造函数的分类创建原创 2023-06-30 20:42:40 · 1346 阅读 · 0 评论 -
【C/C++】构造函数的分类及调用
构造函数的分类按照参数分类分为有参构造无参构造(默认构造函数)按照类型分类分为普通构造拷贝构造构造函数的调用括号法(常用)显式法隐式转换法- 普通构造普通构造函数在创建对象时初始化对象的成员变量,并返回一个新的对象- 拷贝构造拷贝构造接受同一类的对象作为参数,并创建一个新的对象,新对象的成员变量与原始对象相同拷贝构造函数能够确保新对象具有独立的数据副本而不是共享原始对象的引用原创 2023-06-30 20:17:19 · 1464 阅读 · 0 评论 -
【C/C++】类成员函数指针 定义 使用方法
类成员函数编译器会默认加上一个隐藏的参数:this指针所以定义类成员函数的指针与普通的函数指针肯定会有所区别:C++ 提供了三种运算符 ::* .* ->.用于定义和使用类成员函数指针定义类成员函数指针时,注意&和类名作用域不能省略使用指针间接调用函数优的点:调用便于分层设计、利于系统抽象、降低耦合度使接口与实现分开提高代码的复用性、扩展性。类成员函数指针是指指向类中成员函数的指针调用函数的两种方式:通过函数名直接调用通过函数指针间接调用通过函数指针调用的好处:真正的函数原创 2023-06-29 18:25:58 · 3829 阅读 · 2 评论 -
【C/C++】解析 类成员函数和this指针
类成员函数类成员函数属于类本身,在编译期间存在,并且每个类只有一份。this指针的作用:指向调用该函数的对象,函数中使用类成员都是通过this指针调用连接对象和成员函数,可以在函数中无感知的使用成员使用:可以使用 this->成员名或者省略 this-它们与是否定义对象无关,可以通过类名直接访问调用。this指针类中的非静态成员函数包括构造、析构函数,会有一个默认的隐藏的参数this 指针它是编译器默认加上的在所有参数之前,类型为当前类的指针 即:类 * const this原创 2023-06-29 15:35:04 · 646 阅读 · 0 评论 -
【C/C++】解析 类成员属性
当定义一个类时,其中的成员属性只是类的一分,在没有创建对象之前,这些属性并不存在的内存空间通过创建对象来实例化类时,每个对象都有自己独立的成员属性。在为每个对象分配内存空间时,会为对象的成员属性分配相应的内存类成员属性:属于对象,当定义对象时,属性才会真正的存在(在内存中分配空间),才开辟对应的空间多个对象会存在多份的成员属性(表现为在内存中的地址不同),彼此独立,互不扰原创 2023-06-29 14:45:45 · 442 阅读 · 0 评论