自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 post和get的区别

POST和GET是 HTTP 协议中常用的两种请求方法。

2025-02-08 20:42:35 299

原创 纯虚函数和抽象类

纯虚函数的存在是为了在基类中定义一个接口规范,强制要求派生类必须重写这个函数来提供具体的实现。它本身不能被调用(因为没有函数体),但是可以通过基类指针或引用调用,在运行时根据对象的实际类型(派生类对象)来调用派生类中重写后的函数。通过在基类中定义纯虚函数,并且在派生类中重写这些函数,当使用基类指针或引用调用这些函数时,就可以根据对象的实际类型动态地调用相应派生类中的函数版本。虚函数是在基类中声明的虚函数,它在基类中没有定义具体的函数体,只是通过在函数声明的结尾添加 = 0 来表明它是纯虚函数。

2024-12-08 16:49:32 156

原创 C++多态

当一个类中有虚函数时,编译器会为这个类构建一个虚函数表(vtable),虚函数表中存储了虚函数的地址。多态是面向对象编程(OOP)的重要特性之一,它指的是同一个操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。简单来说,多态允许以一种统一的方式来处理多种不同类型的对象,这些对象可以通过继承关系相关联,并且在运行时根据对象的实际类型来决定具体调用哪个函数。多态的关键在于通过基类的指针或引用调用虚函数时,实际调用的函数版本是根据指针或引用所指向(引用的)对象的实际类型来确定的,这就是动态绑定。

2024-12-07 22:50:57 217

原创 C++继承

继承是面向对象编程(OOP)的重要特性之一,它允许创建一个新类(称为派生类或子类),从一个已存在的类(称为基类或父类)继承属性(成员变量)和行为(成员函数)。子类可以在继承基类的基础上添加新的成员变量和成员函数,也可以重写(覆盖)基类中的成员函数,以实现更具体的功能。通过继承,能够建立类之间的层次关系,实现代码的复用。在 C++ 中,通过在派生类的定义中使用冒号(:)和关键字 public、protected 或 private(访问控制修饰符)来指定继承方式,并在后面跟上基类的名称来实现继承。

2024-12-07 12:52:43 149

原创 C++ 封装

它指的是将数据(成员变量)和操作这些数据的函数(成员函数)组合在一起,并对外部隐藏数据的具体实现细节,只通过特定的接口(公共成员函数)来访问和操作这些数据。通常,会将数据成员声明为私有(private)或受保护(protected)的,以限制外部直接访问,而将一些用于操作数据的函数声明为公共(public)的,作为外部访问数据的接口。封装可以隐藏数据的具体表示和内部实现细节,确保数据的安全性和完整性。易于维护和修改内部实现,封装使得每个类都可以看作是一个独立的模块,包含了自己的数据和操作这些数据的方法。

2024-12-05 18:53:01 218

原创 静态链接和动态链接特点

静态链接是在程序编译时,将所有需要的库文件(如.a文件 - 在 Linux 等系统中,是静态库文件格式)和目标文件链接成一个可执行文件的过程。动态链接是在程序运行时,才将程序所需要的库文件(如.so文件 - 在 Linux 等系统中,是动态共享库文件格式)加载到内存并进行链接的过程。如果库文件需要更新(例如修复了库中的一个漏洞或者添加了新功能),那么使用了该静态库的所有程序都需要重新编译链接。动态链接的程序依赖于外部的动态库,如果在运行时找不到所需的动态库或者动态库的版本不兼容,程序将无法正常运行。

2024-12-04 20:09:38 295

原创 volatile关键字和const

const关键字有多种用途,主要用于定义常量和修饰函数、变量等,以确保数据的不可修改性,增强程序的安全性和可读性。const。

2024-12-01 22:02:57 204

原创 Lambda表达式的概念和作用

它按照常规的函数参数传递方式在 Lambda 表达式内部使用。是按值捕获的,其值不会因为外部变量的变化而改变。函数内部使用,用于分别打印数据和对数据进行变换。进行了输出和自增操作,由于是引用捕获,所以外部的。在 Lambda 表达式内部,无论外部的。的第三个参数,用于定义排序时的比较规则,使得。这两个 Lambda 表达式定义的函数只在。在 Lambda 表达式内部,,然后在 Lambda 表达式内部。如何变化,它使用的都是捕获时。的引用和其他变量(这里是。中的元素按照升序排列。自增,最后在外部输出。

2024-11-25 21:01:42 830

原创 C++ 中的智能指针及其类型

智能指针是一种类模板,它的行为类似于常规指针,但能够自动管理所指向对象的生命周期。智能指针的主要目的是防止内存泄漏,确保在对象不再被使用时自动释放其占用的内存。

2024-11-23 12:44:10 199

原创 拷贝语义和移动语义

拷贝语义:移动语义:

2024-11-23 12:42:24 134

原创 C++ 中的初始化列表

例如,如果一个类的成员变量 A 在成员变量 B 之前声明,但是在初始化列表中或者构造函数体内先初始化 B 再初始化 A,那么可能会导致 A 的初始化依赖于一个未初始化的 B,从而导致错误。如前所述,对于没有默认构造函数的成员变量、常量成员变量和引用成员变量,使用初始化列表是唯一的正确初始化方式。而对于其他类型的成员变量,虽然在构造函数体内赋值也可以实现初始化,但是会先调用成员变量的默认构造函数创建一个临时对象,然后再将这个临时对象赋值给成员变量,这会导致不必要的构造函数调用和赋值操作,降低程序的性能。

2024-11-20 22:37:31 446

原创 友元函数的作用

的成员函数,但通过在类的定义中使用 fiend 关键字声明,可以获得访问该类私有和保护成。在 C++ 中,友元函数是一个可以访问另一个类的私有和保护成员的非成员函数。提高代码灵活性:友元机制允许在不破坏类的封装性的前提下,为特定的函数或类提供访问。实现特定的功能需求:有时候,为了实现特定的功能需求,需要让外部函数或类能够直接访。破坏封装性:友元机制破坏了类的封装性,因为友元函数或友元类可以直接访问类的私有和。变化,可能会影响到使用友元机制的类的正确性。友元类是一个可以访问另一个类的私有和保护成员的类。

2024-11-18 21:44:27 146

原创 C++内联函数

如果函数过于复杂或者编译器认为内联展开不合适,编译器可能会忽略inline关键字,将函数作为普通函数进行处理。内联函数是一种在编译时将函数体插入到调用点的函数。这意味着在调用内联函数时,编译器不会像对待普通函数那样进行函数调用的开销,而是直接将函数体的代码插入到调用点,从而减少了函数调。调试难度:由于内联函数的代码在调用点被展开,调试内联函数可能会比较困难。代码膨胀:使用内联函数可能会导致代码膨胀,因为函数体的代码会在每个调用点被复制。可以在代码中直接调用内联函数,编译器会在编译时将函数体插入到调用点。

2024-11-17 19:31:05 213

原创 拷贝构造函数,赋值运算符重载,浅拷贝,深拷贝

它和拷贝构造函数的区别在于,赋值运算符是对一个已经存在的对象进行赋值操作,而拷贝构造函数是创建一个新对象并进行初始化。对于包含动态分配内存的类,赋值运算符重载需要先释放目标对象原来占用的资源,再将源对象的资源复制过来,以避免内存泄漏和悬空指针的问题。比如,一个String类中有一个char*指针成员用于存储字符串,拷贝构造函数就可以为新对象分配足够的内存,然后将原字符串的内容复制到新分配的内存中。时,赋值运算符重载函数会被调用。拷贝构造函数用于创建一个新对象,这个新对象是另一个已有对象的副本。

2024-11-09 12:33:03 185

原创 什么是构造函数和析构函数?它们的作用是什么?

当一个对象的生命周期结束时,例如对象超出作用域或者通过delete操作符释放动态分配的对象时,析构函数会自动被调用。例如,如果一个类中动态分配了内存,在析构函数中就可以释放这些内存,防止内存泄漏。假设我们有一个Array类,它在构造函数中动态分配了一个数组,那么在析构函数~Array()中,我们就需要使用delete []操作符来释放这个数组所占用的内存。系统默认会有一个无参构造函数,如果自己定义了一个有参构造,那系统给的无参构造函数就没有了,一个类可以有多个构造函数。

2024-11-09 12:16:43 606

原创 函数参数传递的方式有哪些?分别有什么特点?

参数副本:当将变量作为值传递给函数时,实际传递的是变量的一个副本,所以对函数内部的修改不会影响到原始变量。函数参数的传递主要有三种方式:值传递、引用传递和按引用传递。直接操作原值:函数接收的是变量在内存中的地址,可以直接修改该变量的值。内存开销小:因为传递的是副本,不会消耗额外内存用于存储原值的引用。改变外部:由于直接访问了原数据,函数内部的操作会影响原始变量。需要注意副作用:如果不小心,可能会导致意外的数据更改。也像引用一样,但不允许修改原始变量,仅提供读取。适用于返回结果但又不想让函数改变输入的情况。

2024-10-27 16:14:40 369

原创 C/C++ 顺序结构,选择结构,循环结构

功能:结束当前循环,继续进行下一次循环,没有跳出循环体,还在当前循环体中,只是进行了下一次循环中。功能:结束当前循环,继续进行下一次循环,没有跳出循环体,还在当前循环体中,只是进行了下一次循环中。表达式 2 通常为循环条件,表示是否继续执行循环体,该判断条件若恒真,则会进入死循环。每个语句都会按先后顺序依次被执行。作用:并不是终止整个循环,只是提前结束本次循环,继续执行下次循环;如上,当i=3时,continue跳过本次循环,进行下一次循环。如上,当i=3时,continue跳过本次循环,进行下一次循环。

2024-10-26 20:13:03 1263

原创 简述enum

枚举常量表>是由枚举常量构成的列表,枚举常量是以标识符形式表示的整型量,表示枚举类型的取值。强类型枚举不会隐式地转换为其他类型(如 int),这有助于防止意外的类型转换和类型错误。强类型枚举的成员(枚举值)具有枚举类型的作用域,这意味着你不能在枚举类型的作用域之外直接使用枚举值,除非使用枚举类型名和作用域解析运算符。在这个例子中,Color是枚举类型的名称,RED、GREEN和BLUE是枚举值,它们的底层类型被指定为 unsigned int。定义枚举类型后,可以定义该枚举类型的变量。

2024-10-24 18:40:59 212

原创 常量和变量的区别C++(简单版)

2、若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的。但并不是真的不能修改,const 修饰的变量可以用指针间接的被修改。常量:常量是指程序中值不能改变的标识符。3,变量的作用域范围比常量更广,可以在更大的代码块中使用,而常量除非特别指定全局可见,否则通常只在其声明范围内有效。4,常量一旦初始化就不可修改,试图改变常量的值会编译错误;1,常量的值在编译时就被确定下来,而变量的值可以在程序运行时更改。

2024-10-23 20:30:10 153

原创 实现单例模式

保证一个类只有一个实例,控制某些共享资源的访问权限。创建了一个对象后,之后再创建一个新对象,此时会获得之前已创建的对象,而不是一个新对象。()//2.该函数返回静态局部对象的引用,保证只有一个对象,不会创造新对象,一直是对同一个对象的引用,静态局部变量是线程安全的。为该实例提供一个全局访问节点。单例模式允许在程序的任何地方访问特定对象。但是它可以保护该实例不被其他代码覆盖。//1.定义一个获取单例对象的静态函数 getInstance。//禁止使用赋值运算符构造实例。

2024-03-24 21:06:43 139 1

原创 前向声明解决头文件互相包含问题

简记一下做项目遇到的问题,小菜鸡一个,比较浅显,不正确的地方欢迎指正。前向声明不能用于定义声明的类的对象,只能定义指向该类的指针和引用。#include "被声明的类"class 被声明的类。用法:#pragma once。

2024-03-24 21:03:08 198 1

空空如也

空空如也

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

TA关注的人

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