自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 计算机网络与通信复习

接收端收到的一定是一个线性叠加的结果,首先在收到一个序列之后,我们要用收到的这个序列和相应的站点作内积运算:把两个向量按位相乘然后结果相加,最后做一个归一化处理(除以分量的个数) 如果结果是正一说明该站点发送的是1,如果结果是负一,说明他发送的是0,如果结果是0,说明该站点没发送数据。集线器只是把信号集中在一起,所以它会产生广播风暴,多用户放一起会进行信道的征用,出现碰撞传输,连接在集线器上的多个站点共享带宽,而交换机不会,它工作在链路层,支持多端口,可以进行无碰撞传输,它是所有的站点都独享所有的带宽。

2024-12-30 14:38:31 1017

原创 C/C++基础知识复习(46)

动态绑定:通过使用virtual关键字在基类中声明虚函数,并通过基类指针或引用来调用派生类的重写函数,从而实现动态绑定。内存管理:C++ 提供了手动内存管理机制(new和delete),通过栈和堆内存管理不同类型的数据。此外,C++11 引入了智能指针(如和)来自动管理内存,减少内存泄漏的风险。

2024-12-25 00:09:11 915

原创 C/C++基础知识复习(45)

数据隐藏:通过使用private或protected访问修饰符,并通过public方法进行数据访问和操作来实现。异常处理:通过trythrow和catch来处理异常,能够捕获并处理程序中的错误。可以使用标准异常类或自定义异常类来表达不同的错误情况。

2024-12-24 23:54:23 365

原创 C/C++基础知识复习(44)

是面向对象编程(OOP)中的一个重要概念,指的是将对象的内部状态(数据成员)隐藏在类的外部,只通过公共的方法(通常是成员函数)来访问和修改这些数据。在需要动态加载插件的系统中,多态性使得可以通过统一的接口与插件进行交互,而不需要在编译时确定插件的具体类型。通过封装技术,可以将类的数据和操作数据的函数捆绑在一起,外部只能通过公共的接口(即类的公共方法)来与类的内部数据交互,从而实现数据隐藏。是面向对象编程(OOP)中的一个重要特性,指的是不同的对象可以通过相同的接口来表现不同的行为。)和继承机制来实现。

2024-12-23 21:15:09 893

原创 C/C++基础知识复习(43)

运算符重载是指在 C++ 中为现有的运算符定义新的行为,使得它们能够用于用户定义的数据类型(如类或结构体)。通过运算符重载,可以让自定义类型像内置数据类型一样进行运算,例如加法、减法等操作。运算符重载通过定义一个特殊的函数来实现,称为运算符函数。这些函数通常是成员函数或友元函数。public: // 运算符重载作为成员函数ReturnType operator符号 (参数列表) {// 函数体} };示例:重载加法运算符假设我们有一个表示二维向量的类Vector2D,希望能够使用。

2024-12-23 20:42:55 1126

原创 C/C++基础知识复习(42)

纯虚函数是没有实现的函数,它规定了派生类必须实现该函数,确保接口的统一性和多态性的实现。抽象类是含有至少一个纯虚函数的类,不能实例化对象,它主要作为派生类的基类,定义公共接口并强制派生类实现具体功能。在面向对象编程中,纯虚函数和抽象类发挥着至关重要的作用,通过强制派生类提供特定功能和统一接口,提高了程序的可维护性、可扩展性和灵活性。

2024-12-09 21:10:48 386

原创 C/C++基础知识复习(41)

多态性(Polymorphism)是面向对象编程中的一个重要特性,它允许不同的对象通过相同的接口表现出不同的行为。多态性使得程序能够根据对象的实际类型来决定调用哪个方法,而不是依赖于对象的静态类型。这种能力使得同一接口可以根据对象的不同类型有不同的实现,从而增加了系统的灵活性和扩展性。在C++中,多态性通过虚函数和基类指针或引用来实现。编译时多态(静态多态):通过函数重载(Function Overloading)和运算符重载(Operator Overloading)实现。

2024-12-07 15:36:48 873

原创 C/C++基础知识复习(40)

继承性(Inheritance)是面向对象编程的一个基本特性,它允许一个类从另一个类派生,继承父类的属性和方法,并可以扩展或修改这些属性和方法。继承实现了代码的重用,允许创建一个新类时不必从头开始,而是从已有的类中继承基础功能。在C++中,继承通过类之间的“is-a”关系来实现。一个类(派生类)可以继承另一个类(基类)的成员(属性和方法)。通过继承,派生类能够直接访问基类的公共(public)和保护(protected)成员,但不能访问基类的私有(private)成员。

2024-12-07 14:55:44 336

原创 C/C++基础知识复习(39)

封装性(Encapsulation)是面向对象编程中的一个重要概念,它指的是将对象的状态(数据)和行为(方法)绑定在一起,并且通过访问控制来隐藏对象的内部细节,只暴露必要的接口。封装的目标是防止外部代码直接访问或修改对象的内部数据,从而保证数据的安全性和一致性。在C++中,封装通过类(class)来实现。类的成员变量通常声明为私有(private),只能通过公共(public)方法来访问和修改。这样可以控制对数据的访问,确保数据不会被无意或恶意修改。// 私有数据成员int age;

2024-12-07 14:36:59 400

原创 C/C++基础知识复习(38)

两者在使用上的选择,通常取决于具体的应用场景以及对性能、存储、兼容性等需求的权衡。

2024-12-05 12:48:10 267

原创 C/C++基础知识复习(37)

(也叫自动类型转换)是指在表达式中,程序自动将一种数据类型的值转换为另一种兼容类型的值,而无需开发者显式地进行转换。这通常发生在不同数据类型之间进行操作时,编译器自动完成类型转换。

2024-12-02 21:05:41 463

原创 C/C++基础知识复习(36)

通过函数重载,程序员可以使用相同的函数名称处理不同类型或数量的参数,而不需要为每种情况创建不同的函数名称。如果参数类型不完全匹配,编译器还会进行类型转换(如自动将整数转换为浮点数),选择最合适的重载版本。编译器在编译时会根据函数的名称、参数类型、参数数量以及参数的顺序等信息,自动生成一个唯一的符号(名称修饰),用于区分不同的重载版本。:虽然函数的返回类型不同可以作为区分,但单纯通过返回类型是无法实现函数重载的,因为返回类型不会影响编译器选择函数版本的规则。函数重载的实现原理依赖于编译时的。

2024-12-02 16:28:38 890

原创 各大常见编程语言应用领域

不同编程语言因其特性和设计目标而适用于不同的应用领域。

2024-12-01 19:47:27 730

原创 C/C++基础知识复习(35)

内存对齐通过优化数据存储位置来提升访问效率、简化硬件设计,并满足平台要求,是现代计算机系统中非常重要的优化机制。

2024-12-01 12:01:57 236

原创 C/C++基础知识复习(34)

自动类型推导auto用于声明变量并自动推导类型。decltype用于获取表达式的类型。右值引用与移动语义右值引用&&)表示对临时对象的引用,主要用于实现移动语义。移动语义通过右值引用使对象的资源能够被转移,而非复制,从而提高程序的效率,特别是涉及大对象或资源密集型对象时。

2024-11-30 14:50:46 863

原创 C/C++基础知识复习(33)

volatile主要用于防止编译器优化内存读取,确保变量始终反映最新的内存值,通常用于硬件、寄存器访问或多线程同步中。const主要用于标识变量不可更改,且可以帮助编译器进行优化,常用于常量值。

2024-11-30 14:09:17 636

原创 C/C++基础知识复习(32)

函数对象(Function Object)是一个可以像函数一样调用的对象。换句话说,函数对象是重载了operator()运算符的类或结构体的实例。由于 C++ 中一切都是对象,函数对象实际上是一个类的实例,它的行为类似于函数,因此也被称作“可调用对象”。函数对象是一个类的实例:普通函数是一个独立的代码块,而函数对象是一个有状态的对象,通常通过类来实现。函数对象可以保存状态:普通函数不能有成员变量,不能保存任何数据,而函数对象可以有成员变量来存储数据。函数对象可以在调用时传递不同的参数:通过重载。

2024-11-28 12:56:45 1302

原创 C/C++基础知识复习(31)

多继承(Multiple Inheritance)是指在 C++ 中,一个类可以继承自多个基类,从而拥有多个基类的特性和行为。具体来说,子类可以通过继承多个父类,继承它们的数据成员和成员函数。虚继承(Virtual Inheritance)是 C++ 中的一种机制,用于解决多继承中的菱形继承问题。通过虚继承,确保从多个路径继承的同一个祖先类只有一份实例。

2024-11-27 19:49:19 682

原创 C/C++基础知识复习(30)

在 C++ 中,Lambda 表达式是一种可以定义匿名函数的机制,可以在代码中快速创建一个内联的函数对象,而不需要显式地定义一个函数。Lambda 表达式通常用于简化代码,尤其是当需要传递一个简单的函数给 STL 算法或作为回调时,十分方便。[捕获列表](参数列表) -> 返回类型 { // 函数体 };捕获列表[]):指定外部变量如何在 Lambda 中使用,捕获外部作用域中的变量。参数列表:指定 Lambda 函数的参数(可选)。返回类型。

2024-11-26 18:54:03 1839

原创 C/C++基础知识复习(29)

usingtypedef和 using都用于为现有类型或模板类型创建别名,帮助简化代码。typedef是传统的类型别名方式,而 using是 C++11 引入的更现代、更简洁的方式,特别是在模板类型别名的定义上更为灵活。对于模板类型别名,using声明比typedef更具可读性和表达能力。

2024-11-25 17:28:44 369

原创 C/C++基础知识复习(28)

在 C++ 中,模板特化和偏特化是两种针对模板类型的高级用法,用于在某些特定情况下对模板的行为进行特殊处理。模板特化(Full Specialization)模板特化是对模板的某个具体类型提供专门的实现。这种特化完全替代了泛型模板的实现,适用于特定的类型。模板偏特化(Partial Specialization)模板偏特化是为一类特定的模板参数提供部分特定的实现,而不是对某个特定类型进行完全特化。偏特化只适用于类模板,而函数模板不能偏特化。模板特化:针对特定类型提供完全定制的实现。模板偏特化。

2024-11-24 12:43:33 414

原创 C/C++基础知识复习(27)

是C++中对象所有权管理的两种机制,主要在对象初始化、赋值或传参时体现。通过合理使用智能指针,可以显著减少手动内存管理带来的复杂性和错误风险。

2024-11-22 14:54:14 1180

原创 C/C++基础知识复习(26)

移动语义(Move Semantics)是 C++11 引入的一个概念,旨在通过移动资源而非拷贝资源来提高程序的性能。它允许将资源(例如内存、文件句柄等)从一个对象转移到另一个对象,而不是创建资源的副本。在 C++ 中,资源管理通常是通过拷贝构造函数和赋值操作符来实现的。但是,对于某些对象,尤其是大对象,拷贝操作会非常昂贵。移动语义通过允许对象"窃取"资源(例如堆内存)而非复制它们,避免了昂贵的拷贝操作,极大地提高了性能。提升性能。

2024-11-22 12:50:35 400

原创 C/C++基础知识复习(25)

初始化列表(Initialization List)是在 C++ 构造函数的声明中,通过冒号()来初始化类成员变量的一种方式。它在构造函数执行之前,首先对类成员变量进行初始化。double b;public:// 使用初始化列表初始化成员变量// 构造函数体(可选)} };在上面的代码中,a(x)和b(y)就是初始化列表。它们的作用是将参数x和y分别赋值给类的成员变量a和b。作用性能优化。

2024-11-20 19:25:52 472

原创 万字教程 stm32避障智能小车(持续更新中)

记录一下自己的学习过程。

2024-11-20 17:12:47 272

原创 C/C++基础知识复习(24)

友元函数和友元类提供了一种特殊的方式来访问类的私有数据,突破了封装性。使用友元时要谨慎,它可能带来安全性问题,因为它允许外部代码访问类的内部细节。友元关系不能被继承,也不能跨类传播,因此要在类设计时清楚地定义友元关系,避免不必要的暴露。

2024-11-18 21:23:46 480

原创 文件夹大小和U盘剩余空间匹配问题

前段时间将磁盘文件迁移到U盘中遇到了一点问题,首先通过查看属性,我知道这个文件夹所占的空间是16.5G,而U盘剩余可用空间是24.8G,但是在移动过程中显示U盘上的空间不足再一个问题就是文件属性中大小和占用空间并不一致这两个问题让我产生了困惑,通过度娘最终知晓了大致的原理1. 为什么文件夹大小和U盘剩余空间不匹配?首先,文件夹的大小(在属性中显示的大小)是文件实际存储的数据量,但U盘上显示的和文件并不总是直接相关的。

2024-11-18 10:37:16 934

原创 C/C++基础知识复习(23)

是一种通过编译器优化的特殊函数。内联函数的主要作用是减少函数调用的开销,使得程序执行更加高效,尤其是对于那些频繁调用的函数。当你在 C++ 中使用内联函数时,编译器会将该函数的代码直接嵌入到调用该函数的地方,而不是执行常规的函数调用过程(即跳转到函数的地址并执行)。这意味着,内联函数本质上是通过消除函数调用的开销来提高效率。

2024-11-18 00:06:41 631

原创 C/C++基础知识复习(23)

某些类型转换可能会引发未定义行为,尤其是使用或const_cast时。如果转换不合理或对原数据结构产生不正确的操作,可能会导致程序崩溃或者出现奇怪的运行时错误。int x = 10;// 错误的类型转换,可能导致程序崩溃或未定义行为。

2024-11-17 12:19:03 585

原创 C/C++基础知识复习(22)

常量表达式是可以在编译时求值的表达式,通常通过constexpr声明。判断一个表达式是否是常量表达式,可以通过constexpr声明或在 C++20 中使用函数。

2024-11-17 12:17:00 326

原创 C/C++基础知识复习(21)

虚拟内存是一种内存管理技术,它通过将物理内存(RAM)和磁盘上的硬盘空间(通常是交换文件或页面文件)结合使用,让操作系统认为它拥有比实际物理内存更多的内存。虚拟内存通过将程序需要的内存分配给虚拟地址空间,然后通过硬件(通常是内存管理单元,MMU)将虚拟地址映射到物理内存上,支持程序运行时的内存隔离和地址空间扩展。然而,当虚拟内存的使用量超过物理内存时,性能会受到影响,因为硬盘的读写速度远远慢于内存,导致频繁的页面交换(page swapping)会引起系统变慢。:是的,虚拟内存的大小通常比物理内存大。

2024-11-15 14:08:34 319

原创 C/C++基础知识复习(20)

总的来说,异常处理适用于那些需要集中错误处理和资源管理的情况,但应避免滥用,尤其是在性能要求高的场合。这三部分共同工作,以便在程序发生错误时进行处理,确保程序的健壮性。C++ 中的异常处理机制通过。

2024-11-13 22:47:45 543

原创 C/C++基础知识复习(19)

命名空间(Namespace)是 C++ 中的一种机制,用于将标识符(如变量、函数、类等)组织在一起,从而避免命名冲突。使用namespace关键字来定义命名空间。命名空间可以包含变量、函数、类、结构体、枚举等。int x = 10;命名空间用于避免命名冲突,组织代码,提高可读性和可维护性。可以通过namespace关键字定义命名空间,使用运算符或using声明来使用命名空间中的成员。命名空间是支持嵌套的,可以在一个命名空间内部定义另一个命名空间。

2024-11-13 12:49:23 1011

原创 C/C++基础知识复习(18)

替换时间宏定义:在预处理阶段进行文本替换,不会经过编译,遵循代码替换原则。// 替换后成: int y = ((5) * (5));函数调用:经过编译后执行,代码行为更为规范且有类型检查。参数类型宏定义:不支持类型安全,没有参数类型检查,容易出错。函数调用:进行类型检查,提高了安全性。调试宏定义:难以调试,因为没有类型信息,可能导致误解和意外结果。函数调用:调试工具能提供更多信息,有助于理解和定位问题。返回值宏定义:没有返回值的概念,仅进行文本替换。函数调用:可以返回值,具备一致的返回机制。

2024-11-09 18:26:51 767

原创 C/C++基础知识复习(17)

通过避免重复代码,减少了编译后的代码大小;同时影响性能的部分,如内联函数,也可以直接生成针对特定类型的代码。:模板允许编写一次代码,并在不同类型上重用,减少了代码重复。函数模板允许你编写一个函数,接受任意类型的参数。类模板允许你创建一个类,可以处理任何数据类型。:模板是在编译时进行类型检查的,避免了一些运行时错误。:使用模板可使设计更加灵活,可以为多种类型定制功能。是一个函数模板,它可以用于不同的数据类型。是一个类模板,可以存储任何类型的值。

2024-11-09 18:21:52 193

原创 C/C++基础知识复习(16)

在上述示例中,类 A 的实例持有类 B 的实例,而类 B 的实例持有类 A 的实例。这在特定上下文下,尤其在对象管理和内存控制中,可能导致问题。:尽量避免设计中出现循环引用,考虑重构以减少依赖关系,如通过观察者模式、事件机制等更灵活的设计来解耦。分配内存时,如果请求的大小超过了系统可用内存或最大允许分配的大小,会导致分配失败并抛出异常或返回。:如果使用普通指针,则很难自动释放这些对象的内存,因为它们互相引用。:确保在对象销毁时能够顺利地释放资源,特别是在涉及复杂的对象生命周期和依赖关系时。

2024-11-09 18:17:38 257

原创 C/C++基础知识复习(15)

时,总是应在使用指针之前检查其是否为。在内存分配失败时会返回。

2024-11-09 18:13:15 819

原创 C/C++基础知识复习(14)

如果没有自定义拷贝构造函数,编译器会自动生成一个默认的拷贝构造函数,但对于类中有动态分配资源的情况,通常需要自定义拷贝构造函数以避免浅拷贝带来的资源共享问题。赋值运算符重载和拷贝构造函数的不同之处在于,赋值运算符用于已创建的对象间的赋值操作,而拷贝构造函数用于对象创建时的拷贝。它的作用是在创建一个对象时,将另一个对象的值赋给新对象。(或称模板参数的嵌套模板):C++支持模板参数本身也是模板的情况,允许在模板内定义更复杂的数据结构。通过模板,可以实现代码复用,提高代码的通用性,同时增强类型安全性。

2024-11-07 19:20:57 516

原创 C/C++基础知识复习(13)

封装是将对象的状态(数据)和行为(方法)绑定在一起,形成一个独立的类,防止外部直接访问类的内部细节。通过封装,类可以控制对其数据的访问权限,一般通过设置为私有成员(private),并通过公共接口(public)进行访问。构造函数可以是默认构造函数(没有参数)或带参数的构造函数,允许在对象创建时赋值。析构函数的名称与类名相同,但在前面加一个波浪号(~),没有返回类型,也没有参数。在C++中,通过继承,可以创建一个新类(子类),它继承自已有的类(基类),从而复用基类的代码,并在子类中增加或重写功能。

2024-11-07 18:09:25 377

原创 C/C++基础知识复习(12)

在C++中,结构体与类的语法基本相同,唯一的区别是默认的访问控制(结构体默认是公有的,而类默认是私有的)。因此,C++中的结构体可以包含函数。你可以在结构体中直接定义成员函数,这使得结构体能够更方便地封装数据和功能。在C语言中,结构体是用来存储数据的,它本身不能包含函数。C语言中的结构体只能包含数据成员,不允许定义方法(函数)。但是,结构体成员可以是函数指针,间接地调用函数。虽然C语言的结构体不能直接包含函数,但可以通过函数指针实现类似的功能。,它可以直接调用,并且结构体本身也可以封装数据和行为。

2024-11-05 13:00:23 632

空空如也

空空如也

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

TA关注的人

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