自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据库三范式

其他字段依赖主键是指,其他每个字段都与主键完全相关,当确定主键的值时就能确定其他所有字段的值。班级名依赖于学生编号,知道了学生编号就知道了班级名,但它不是直接依赖于学生编号的,是依赖于班级编号的,班级编号依赖于学生编号,所以不符合第三范式。第二范式是在第一范式的基础上,要求表中的每一条数据可以被唯一区分,通常使用主键实现,其他所有字段都完全依赖主键。完全依赖是指,联合主键时,其他字段不可以只依赖主键中的某个字段,必须依赖联合主键中的每一个字段。确保唯一性和依赖性,每个表都有主键,且其他字段完全依赖主键。

2024-12-22 19:33:19 674

原创 C++插入排序和桶排序

遍历桶,从桶中把数取出来放入原数组,假设有 m 个空桶,则时间复杂度为 O(n+m)遍历数组把对应的数放入对应的桶时间复杂度也为 O(n)总上所述时间复杂度为 O(3n+m)=0(n)最坏情况(无序的):O(n^2)原理:将数值作为桶号,遍历整个数组,将相应的桶进行计数。时间复杂度:遍历数组找最大值 max 时间复杂度为 O(n)时间复杂度 : 最好情况(有序的):O(n)空间复杂度:O(1)空间复杂度:O(n)

2024-12-22 19:31:49 397

原创 C++冒泡排序和选择排序

最坏情况是无序的,O(n^2)最好情况是有序的,O(n)时间复杂度:O(n^2)空间复杂度:O(1);空间复杂度:O(1)

2024-12-21 19:52:16 250 1

原创 C++ 中面向对象编程如何处理对象的状态存储与恢复?

手动实现:可以在类中定义方法来保存和恢复对象的状态。例如,可以将对象的状态信息存储到文件中,或者存储到内存中的数据结构中,然后在需要恢复状态时从存储中读取状态信息并恢复对象的状态。在一些应用场景中,需要保存对象的当前状态,以便在以后的某个时间点恢复到这个状态。例如,在游戏中可以保存玩家的进度,在软件的撤销/重做功能中需要保存对象在不同操作下的状态。使用序列化库:一些C++ 序列化库可以方便地实现对象的状态存储与恢复。这些库可以将对转换为一种可以存储或传输的格式,然后在需要时将其反序列化恢复对象的状态。

2024-12-21 09:59:53 633

原创 解释工厂模式

工厂模式是一种创建对象的设计模式,它提供了一种创建对象的方式,将对象的创建和使用分离通过工厂模式,可以根据不同的条件创建不同类型的对象,而不需要在客户端代码中显示地指出具体地对象类型。

2024-12-19 18:30:53 976

原创 如何实现单例模式?

单例模式是一种创建型的设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例单例模式在整个程序运行期间只创建一个对象,常用于管理全局资源,实现日志系统等场景将构造函数私有化,拷贝构造函数和赋值运算符删除private://禁止使用//禁止使用。

2024-12-18 15:41:20 710

原创 C++中的深拷贝和浅拷贝

浅拷贝问题:如果有指针指向堆区内存时,不同对象的指针成员指向同一块堆区内存,当对象释放时,该堆区内存会被释放两次。当一个对象修改堆区内存是,另一个对象也随之变化。深拷贝:申请相同大小的堆区内存,保证两个对象堆区的值相同。浅拷贝:就是简单的赋值操作。

2024-12-18 15:38:36 411

原创 如何处理对象的生命周期管理?

在一个图形绘制程序中,如果需要动态创建和销毁图形对象,可以使用智能指针来管理这些对象的生命周期。例如,使用 std::unique ptr 来管理单个图形对象,或者使用 std:shared_ptr来实现多个部分共享图形对象的所有权。全局对象和静态对象:全局对象和静态对象在程序启动时创建,在程序结束时销毁。需要注意的是,全局对象和静态对象的初始化顺序可能不确定,这可能导致一些问题,因此应谨慎使用。为了避免忘记释放堆对象导致的内存泄露,可以使用智能指针来管理堆对象的生命周期。

2024-12-17 16:51:37 120

原创 如何实现接口继承与实现继承的区别?

接口继承:适用于定义一组通用的接口,让不同的类实现这个接口,以实现多态性,例如,在图形绘画系统中,可以定义一个抽象的图形接口类,让不同的具体图形实现这个接口。接口继承是指子类只继承基类的纯虚函数,即只继承基类的接口,而不继承基类的实现,子类必须实现基类中的所有纯虚函数,否则子类也成为抽象类。实现继承是指子类不仅继承基类的接口,还继承基类的实现,子类可以重写基类的函数,也可以直接使用基类的函数实现。实现继承:适用于已有类的基础上进行扩展和修改,继承基类的实现可以减少代码的重复。

2024-12-15 15:53:19 891

原创 c++中的纯虚函数和抽象类的作用是什么?

纯虚函数是在基类中声明但没有具体实现的虚函数,但要求任何派生类都要定义自己的实现虚函数在虚表中存放的是函数地址,纯虚函数在虚表中存放的是 0public://纯虚函数有纯虚函数的类叫做抽象类(纯虚类),抽象类不能创建对象,如果子类没有重写父类的纯虚函数,那么子类也是抽象类抽象类,一般作为基类。

2024-12-08 15:51:00 608

原创 什么是多态性?C++中如何实现多态? 多态的好处和注意事项有哪些?

只要类中有虚函数,那么类中就会多一个成员变量,这个成员变量就是虚函数表的指针,调用虚函数,先访问这个对象里的虚函数表指针,通过虚函数表指针找到虚函数那个数组,在遍历数组找到虚函数地址。如果一个函数在基类中被声明为虚函数,那么在派生类中重写该函数时,函数名,参数,返回值必须完全一致。每个包含了虚函数的类都包含一个虚函数表(存放虚函数指针的数组,就是存放的是虚函数的地址),调用虚函数,必须通过虚函数表找到虚函数的地址。主要通过虚函数实现多态,在基类中声明虚函数,在子类中重写这些虚函数。

2024-12-07 15:03:39 618

原创 什么是封装性?C++中如何实现封装? 封装性的好处是什么?

封装性是面向对象编程的一个重要特性。它将数据(成员变量)和操作这些数据的函数(成员函数)包装在一起,形成一个类。外界不能直接访问类中的私有数据成员,只能通过类提供的公共成员函数来访问和操作这些数据。

2024-12-05 15:58:19 566

原创 静态链接的特点是什么?动态链接的特点是什么?

在程序编译时,将程序所依赖的库文件(如 C 语言中的.lib文件)的代码全部复制到可执行文件中。链接器把程序的目标文件和库文件的代码组合在一起,生成一个完整的可执行文件。这个过程在程序构建阶段就完成了,生成的可执行文件可以独立运行,不再需要外部的库文件。例如,一个简单的 C 程序调用了stdio.h库中的printf函数,在静态链接时,printf函数的相关代码会被直接复制到最终的可执行文件中。

2024-12-04 15:06:52 279

原创 c++什么是函数重载? 函数重载的实现原理是什么?

在同一个作用域内,函数名字相同,参数(个数,顺序,类型)不同,那么就是函数重载。

2024-12-01 18:26:55 693

原创 在 C/C++ 中,volatile(易变的、不稳定的)关键字的作用是什么?volatile 关键字与 const 关键字有什么区别?

在 C/C++ 中,volatile关键字是一种类型修饰符。它主要用于告诉编译器,被volatile修饰的变量可能会在程序的执行过程中被意外地改变。这种改变可能来自于外部硬件设备(如寄存器、内存映射的 I/O 端口等)、中断服务程序或者其他并发运行的线程等。

2024-11-29 12:13:57 629

原创 什么是 C++ 中的多继承?它有哪些优缺点?什么是虚继承?为什么要使用虚继承?

多重继承是C++提供的一种强大的特性,使得一个派生类可以继承多个基类。

2024-11-26 21:23:44 860

原创 c++中的lambda表达式!

lambda 表达式是 C++11 引入的一种匿名函数。它可以在需要函数对象的地方简洁地定义一个临时函数。捕获列表[]:捕获一定范围内的变量参数列表():和普通参数列表一样,如果没有参数参数列表可以忽略不写。

2024-11-25 18:45:43 667

原创 什么是 C++ 中的模板特化和偏特化?如何进行模板特化和偏特化?

模板特化是指为特定的模板参数类型提供一个专门的实现。当使用这个特定类型时,编译器会优先选择这个特化版本,而不是通用的模板定义。模板特化有时也称之为模板的具体化,分为函数模板特化和类模板特化。模板偏特化是一种对模板部分参数进行特化的机制。与模板特化不同的是,它不是为所有模板参数指定具体类型,而是只对其中的一部分参数进行特殊化处理。这种方式在处理具有多个模板参数的模板(特别是类模板)时非常有用,可以根据部分参数的特性来提供不同的模板实现,从而更好地适应复杂的类型组合。

2024-11-23 22:01:48 553

原创 什么是 C++ 中的智能指针?有哪些类型的智能指针?

所谓的智能指针本质就是一个类模板,它可以创建任意的类型的指针对象,当智能指针对象使用完后,对象就会自动调用析构函数去释放该指针所指向的空间。智能指针主要有以下三种类型。

2024-11-23 09:08:44 458

原创 什么是 C++ 中的移动语义?它的作用是什么?右值引用是什么?如何使用右值引用实现移动语义?

移动语义允许资源的“移动”而不是“拷贝”。在传统的 C++ 中,当一个对象被赋值或传递给函数时,通常会发生拷贝操作,这会导致性能下降,尤其是在处理大型对象时。移动语义通过引入右值引用和移动构造函数、移动赋值运算符,允许程序员将资源的所有权从一个对象转移到另一个对象,而不是进行深拷贝。

2024-11-21 18:37:12 681

原创 什么是 C++ 中的初始化列表?它的作用是什么?初始化列表和在构造函数体内赋值有什么区别?

在 C++ 中,初始化列表是一种用于初始化类的数据成员的语法机制。它在构造函数的定义中使用,位于构造函数的参数列表之后,函数体之前,以一个冒号:开始。

2024-11-20 16:45:14 715

原创 什么是 C++ 中的友元函数和友元类?友元的作用是什么?有什么注意事项?

友元类是指一个类可以访问另一个类的私有(private)和保护(protected)成员。如果类 A 是类 B 的友元类,那么类 A 的所有成员函数都可以访问类 B 的私有和保护成员。友元关系是单向的,不具有传递性。如果类A是类B的友元,类B不一定是类A的友元。

2024-11-18 20:09:33 552

原创 C/C++ 中有哪些类型转换方式? 分别有什么区别?类型转换可能会带来哪些问题?

不合理地使用reinterpret_cast进行类型转换可能会导致未定义行为。例如,将一个指针转换为不相关类型的指针,然后进行解引用操作。不恰当的const_cast操作也可能引发未定义行为。比如,通过const_cast去除一个const限定符后修改了一个原本被定义为常量的对象,而这个对象可能存储在只读内存区域或者被其他部分的代码假设为不可变的。int a = 10;*d = 3.14;// 这种操作可能导致未定义行为,因为它改变了内存中原本按照int格式存储的数据的解释方式。

2024-11-16 19:11:30 1293

原创 什么是 C++ 中的常量表达式? 有什么用途?and如何判断一个表达式是否是常量表达式?

在 C++ 中,常量表达式是一种在编译期间就能计算出结果的表达式。字面量常量:如整数字面量(1、2、3等)、字符字面量('a'、'b'等)、布尔字面量(true、false)和浮点字面量(3.14、2.718等)。例如,表达式3 + 4中的3和4就是整数字面量,整个表达式在编译时可以计算出结果为7。const修饰的变量(满足一定条件):当一个变量被const修饰并且它的初始值是一个常量表达式时,这个变量也可以用于常量表达式。例如,const int a = 5;

2024-11-15 15:58:54 769

原创 C++命名空间介绍、定义、作用、是否允许嵌套

C++命名空间是一种机制,用于解决全局变量名或函数名之间的冲突问题。它可以将一组相关的变量、函数和类组织在一起,形成一个独立的命名空间,避免命名冲突。命名空间通过在代码中定义和使用关键字"namespace"来创建。// 定义命名空间// 使用命名空间A中的变量和函数// 输出:10A::func();// 输出:This is function in namespace A// 使用命名空间B中的变量和函数// 输出:20B::func();

2024-11-12 18:30:56 776

原创 宏定义和函数调用的区别。

五、作用域和命名空间。

2024-11-09 19:30:46 531

原创 C++循环引用指的是什么,在使用过程当中需要注意什么问题

在 C++ 中,循环引用是指两个或多个对象相互引用,形成一个环状的引用关系。

2024-11-07 20:49:17 223

原创 new或malloc在申请空间时,超出可申请的大小就会分配异常,可申请的大小是多少

物理内存的大小会影响可分配的总量。如果物理内存不足,即使理论上虚拟内存空间较大,也可能无法满足大规模的内存分配请求。在 32 位系统中,进程的虚拟地址空间通常限制在 2GB 到 4GB 左右(具体取决于操作系统设置和其他因素),这限制了可分配的最大内存量。而在 64 位系统中,虚拟地址空间非常大,理论上可以达到数 TB 甚至更大,但实际可分配的大小仍受物理内存和系统资源的制约。

2024-11-07 20:47:28 303

原创 什么是c++模板,有哪些类型的模板

定义:函数模板允许定义一个通用的函数,可以用于不同的数据类型。函数模板不是一个真正的函数,而是一个函数生成器。当编译器遇到对函数模板的调用时,它会根据实际的参数类型生成一个具体的函数实例这个函数模板可以用于对不同类型的数值进行加法运算,如add(10, 20)(整数相加)或 add(3.5, 2.5)(浮点数相加)。

2024-11-05 21:18:30 329

原创 拷贝构造函数和赋值运算符重载的作用

如果不写赋值运算符重载,那么p1=p2就是简单赋值操作,浅拷贝,就是,p1、p2同时指向那一块空间,当函数结束,p1,p2的析构函数会释放同一块地址,导致一个地址被多次释放,会报错。当使用运算符重载时,p1会释放掉之前的值,然后开辟出一块堆区空间,放p2传过来的值,p1的指针指向这块空间。

2024-11-05 21:16:11 803

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

作用:在创建对象的时候,给对象的成员变量赋值,创建对象的时候自动调用,无需手动调用。当没有实现构造函数的时候,编译器会自动提供默认的无参构造。创建对象的时候一定调用构造函数,当实现任意一个构造函数时,编译器则不提供默认的构造函数。语法:没有参数返回值也不写void​ 名字和类名相同​ 有参数可以重载构造函数三种方法:括号法显式法隐式法:构造函数前加explicit,隐式法报错。

2024-11-04 20:11:36 453

原创 C++ 中类的三大特性是什么?

封装是将数据和操作数据的方法捆绑在一起,形成一个类。通过封装,类的内部实现细节被隐藏起来,只对外提供公共的接口。在 C++ 中,可以通过访问限定符(public、private、protected)来实现封装。private 成员只能在类的内部访问,protected 成员只能在类的内部和子类中访问,public 成员可以在任何地方访问。

2024-11-04 19:58:52 411

原创 结构体和联合体有什么区别?能否在声明过程当中缺省名字?and结构体可以包含函数吗?在 C 和 C++ 中有何不同?

结构体:结构体中的成员在内存中是顺序存储的,每个成员都有自己独立的内存空间,总空间大小等于对齐数的整数倍1、先找对齐数,找成员当中最大的类型,作为对齐数2、按照定义的成员的顺序实现空间分配3、按照整数倍地址进行对齐联合体:联合体中的所有成员共享同一块内存空间,其大小等于最大的成员变量大小的整数倍。

2024-11-03 21:19:56 381

原创 C、C++中字符串的存储方式有何不同?以及如何在C下比较两个字符串是否相同?

在c语言中,字符串是以字符数组的形式存储的,并且以空字符'\0'作为字符串的结束标志。C 语言中对字符串的操作主要通过标准库函数来实现,如 strcpy(字符串复制)、strcat(字符串连接)、strcmp(字符串比较)等。这些函数在使用时需要特别小心,因为它们没有内置的安全检查机制,容易导致缓冲区溢出等问题。例如,使用 strcat 连接两个字符串时,如果目标数组的空间不够大,就会覆盖相邻的内存区域,导致程序出现错误甚至崩溃。

2024-11-02 21:49:10 798

原创 C/C++中数组定义和初始化的方式有哪些?and数组名字有什么含义?

使用malloc使用new。

2024-11-01 16:09:35 314

原创 new 和 delete 运算符在 C++ 中的作用以及什么是内存泄漏?如何避免内存泄漏?

1、动态内存分配可以在程序运行时根据需要分配堆区内存2、调用构造函数当为类对象分配内存时,new会自动调用类的构造函数来初始化对象。

2024-10-31 19:31:08 522

原创 C/C++ 中内存分为哪些区域?分别存储什么内容?

常量字符串:例如:“helloworld".这些字符串通常不能被修改常量数值:const int a=10;中的a。

2024-10-30 17:14:53 364

原创 空指针和野指针的概念and如何避免野指针

野指针:野指针是指未初始化的指针或者指向已被释放内存的指针。野指针指向的内存地址是不确定的,访问野指针可能使程序出现崩溃。空指针:是指向地址为0的指针,表示不指向任何有效的对象。

2024-10-30 17:11:01 340

原创 指针是什么,有什么用途,与引用的区别

指针是一个变量,其值为另一个变量的内存地址。通过指针,可以访问和修改该地址指向的内存中的的值声明指针:在变量类型后面加上*表示声明一个指针变量初始化指针:使用取地址符号&来获取变量的内存地址,并赋值给指针。指针的解引用:解引用是通过指针访问其指向的内存地址中的值,使用解引用操作符*可以实现解引用空指针:是指向地址为0的指针,表示不指向任何有效的对象野指针:是指向未初始化或者指向已经释放内存的指针,可能导致程序崩溃int *p;//声明一个指针int a=10;p=&a;

2024-10-29 20:07:31 581

原创 递归函数的特点以及什么是回调函数?

递归函数是指一个函数在函数体内调用自身的函数特点:有两个条件:1、递归条件:函数调用自己本身的过程2、终止条件:终止调用自己本身的过程(结束递归),也叫基线条件递归算法求x的n次方。

2024-10-28 22:25:58 233

空空如也

空空如也

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

TA关注的人

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