- 博客(11)
- 问答 (1)
- 收藏
- 关注
原创 数组指针和指针数组
数组指针:type(*name)[size]这个表达式的意思是存有size个type类型的数组的指针,type可以是int,flaot,自定义类型等等。指针数组:type*name[size]这个表达式的意思是定义了一个type类型的指针数组,包含了size个type类型的指针数组。数组指针A是指向数组的指针,而指针数组B是包含指针的数组。
2025-04-01 11:21:25
70
原创 虚函数表和虚函数实现
虚函数表:虚函数表是一种用于实现虚函数的机制。每个包含虚函数的类都有自己的虚函数表,这个表是一个存储函数指针的数组。每个具有虚函数的对象都包含一个指向其所属类的虚函数表的指针。3.当通过基类指针或引用调用虚函数时,程序会先通过对象的 vptr 找到对应的虚函数表,然后从表中获取实际要调用的函数的地址,最后调用该函数。2.当创建一个包含虚函数的类的对象时,编译器会在对象的内存布局中添加一个指向该类虚函数表的指针。1.编译阶段编译器会把所有拥有虚函数的类创建一个虚函数表,表中存储着该类所有虚函数地址。
2025-03-31 13:31:08
263
原创 设计模式随笔
遵循开闭原则:对扩展开放,对修改关闭。当要增加新的功能时,只需要增加新的装饰器,不需要修改之前的代码。消除条件判断:避免了在代码中使用大量的条件判断语句来选择不同的算法,提高了代码的可读性和可维护性。将对象的创建和使用分离,使用者无需关心对象的具体创建过程,只需通过工厂获取所需对象。可延展性强:需要创建新的对象时,只需要创建新的工厂类,不需要修改使用对象的代码。扩展性好:当需要添加新的算法时,只需创建新的策略类,而不需要修改原有代码。动态扩展功能:不改变原有对象的功能的情况下,为对象动态地增加新的功能。
2025-03-30 17:05:49
188
原创 智能指针随笔
独占所有的智能指针确保同一时间只有一个智能指针可以拥有某个对象的所有权。智能指针可以自动管理内存的生命周期,当智能指针超出作用域时,会自动释放所指向的对象的内存,从而避免内存泄漏。在使用手动内存管理时,如果在对象的生命周期内发生异常,可能会导致内存无法正确释放。智能指针可以确保在异常发生时,对象的内存仍然能够被正确释放,从而提高程序的异常安全性。智能指针使得代码的内存管理逻辑更加清晰,降低了代码的维护难度。当需要修改内存管理逻辑时,只需要修改智能指针的实现,而不是在代码中查找new和delete语句。
2025-03-27 18:00:31
166
原创 面相对象的设计原则 六个
即一个类应该尽量减少与其他类的交互,如果两个类之间不必之间通信,那么两个类就不应该发生直接的相互作用。作用:如果多个类承担的职责过多,就等于把这些职责耦合在一千零,一个职责的变化可能会消弱或者抑制这个类完成其他职责的能力。作用:遵循开闭原则可以使用代码具有跟好的可维护性和可拓展性,减少因修改代码而引入的新的错误风险。作用:降低了类之间的耦合度,使得每个类都能独立进行修改和扩展,提高了系统可维护可拓展性。作用:避免了依赖不必要的接口,减少了类之间的耦合度,提高了代码灵活性和可维护性。一个类只负责一项职责。
2025-03-26 18:16:57
183
原创 CPP中友元的优点和缺点
封装时面向对象编程的重要原则之一,他要求类的私有成员需要通过类的公共接口进行访问。使用友元会破坏封装,因为友元可以直接访问类的私有成员,这可能会导致类的内部变量状态被外部意外修改,从而增加代码的维护难度。友元会使类之间的耦合度增加,因为一个类的实现细节被暴露给了外部的函数或类。这意味着当一个类的实现发生变化时,可能会影响所有依赖于它的友元函数或类,从而增加代码的复杂性和脆弱性。使用友元可能会导致一个类承担过多的职责,因为它需要与其他类或函数进行紧密合作,这可能会使类的设计变得复杂,难以理解和维护。
2025-03-26 13:56:20
160
原创 面向对象编程的特性
一般是把类中的成员属性进行隐藏或保护,对外部对象访隐藏内部细节,提供可视化方法进行访问的方法。通过这种方法的好处是,保护内部数据不被随意访问和修改,提高代码安全性和可维护性。一个类可以继承自另一个类,并且继承基类的方法和属性;子类可以复用父类的代码,并且还能添加自己的属性和方法,或者对父类的方法进行重写。能够根据对象的实际类型来调用相应的方法。抽象类是一种不能被实例化的类,它主要用于定义一组抽象方法,这些方法只有声明而没有实现,具体的实现由子类完成。四个特性:封装,继承多态,继承,抽象。
2025-03-26 12:37:05
186
原创 我认为运算符重载的意义
运算符重载是C++的一项强大特性,它允许程序员重新定义已有运算符的行为,使其能够用于自定义的数据类型。运算符重载的意义主要体现在以下几个方面:(1)增强代码可读性和可为何性1.自然表达逻辑:在处理自定义类型时,使用运算符重载可以让代码更符合人类的思维习惯。2.减少学习成本:对于熟悉常规运算符的开发这来说,使用重载后的运算符无需额外学习新的函数名和调用方式,降低代码学习成本,提高了代码可维护性。(2)实现自定义类型的操作1.模拟内置类型行为:通过运算符重载,可以让自定义类型的对象内置类型一样进行操作。例如,自
2025-03-24 15:14:20
179
原创 cpp中定义常量使用宏还是const
1.简单直接:宏定义是一种简单的文本替换机制,在预处理阶段,编译器会将代码中所有出现的宏名替换为对应的常量值,不涉及类型检查等复杂操作,使用起来非常方便。2.不受作用域限制:宏定义每一作用域的概念,一旦定义,在整个文件甚至整个项目中都可以使用,除非使用#undef取消定义。2.调试困难:由于宏在预处理阶段就被替换,调试时无法看到宏名,只能看到替换后的文本,这给调试带来了一定的困难。1.类型安全:const定义的常量具有明确的类型,编译器会进行类型检查,避免了一些潜在的错误。
2025-03-24 14:04:59
111
原创 指针是不是数据结构?
(1)数据结构是对数据的组织、管理和存储方式,其目的是为了高效进行数据访问和操作。常见的数据结构有:数组、链表、栈、队列、图等。这些数据结构规定了数据的存储形式以及对数据的操作方法。(1)指针是一种变量,用于储存内存地址,而非具体数值。通过指针可以直接对内存地址进行操作,进而访问或者修改该地址所存储的数据。(1)指针在数据结构中起到关键作用,许多数据结构都依赖指针来构建和操作。3.指针与数据结构的关系。
2025-03-24 13:09:06
106
原创 CPP中静态库和动态库的区别
1.在编译时,可执行文件记录了动态库的引用信息,并不包含动态库的实际代码。在程序运行时,操作系统会动态加载所需要的动态库。2.动态库的代码不会被包含在可执行文件中,可执行文件只包含对动态库的引用,所以可执行文件的体积相对较小。3.如果动态库发生了更新,只要接口保持不变,通常只需要替换动态库文件,而不需要重新编译可执行文件。3.如果静态库发生了更新,需要重新编译整个可执行文件,因为静态库的代码已经被嵌入到可执行文件中。5.可执行文件不依赖于外部的静态库文件,因为静态库的代码已经被包含在可执行文件中。
2025-03-24 12:25:55
145
空空如也
ensp,如何让四个pc之间ping通
2021-10-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人