自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++-c语言词法分析器

特别的,在预处理阶段,识别单/多行注释时,遇到了一个小问题,由于要支持字符串常量和字符常量,而该常量中可能包含//,/*,导致将字符串内容识别为注释,另外,由于需要支持转义字符‘\’的存在,正确识别的字符串,也成为了一大问题,在多次修改匹配代码后,终于将问题解决。无符号十六进制整型常量,正规式为: 0(X|x)(0-9|a-f|A-F)*赋值运算符 += -= *= /= %= = &= ^= |=实验要求:无符号十进制整型常量,正规式为:(1-9)(0-9)*

2023-04-15 15:14:59 2537 1

原创 数学-排列组合的理解

排列是有顺序的排队,从 m 中选择 n 个进行排队,第 1 个有 m-0 种选择,第 2 个有 m-1 种选择,自然的,第 n 个有 m-(n-1) 种选择。因为有顺序,可以看出前面的选择,会后面影响后面的选择,所以将选择每个的可能数相乘。组合是无顺序的排队,从 m 中选择 n 个进行排队,当采用排列的方法做完时,你可以得到所有可能的排列。而组合,只是去除了其中的有序性,怎么去除?这样我们就可以通过计算 m 选 n 个有多少可能的排列,再去除 n 排列内部的有序性,来计算有多少可能的组合。

2023-04-09 11:02:04 611

原创 Linux-安装Ubuntu 22.04 LTS的一系列操作

CTRL + ALT + F3 进入命令行模式(需要返回桌面时CTRL + ALT + F1)把文件中的 “en_US” 改成 “en_US.UTF-8”保存退出reboot 重启虚拟机打开终端直接输入#将左侧的应用图标移动到窗口底部位置(好看)#根据屏幕大小,给应用图标设置一个合适的大小值,习惯为64,48或32#让应用图标居中显示。

2023-03-18 21:19:54 1049

原创 C++-怎么区分模板函数(类)和函数(类)模板?

回答如下:模板函数是函数,函数模板是模板,抓住主语即可。

2023-03-14 22:18:39 101

原创 C++-如何让一个类不能实例化?

- 将构造函数访问权限设置为私有,即 private xxx()。

2023-03-14 14:51:29 252

原创 C++-构造函数和析构函数能抛出异常吗?

如果构造函数抛出异常,对象的析构函数将不会执行,需要手动去释放已分配的资源,这很可能导致资源泄露的问题。

2023-03-14 14:34:30 1053

原创 C++-为什么基类的析构函数需要定义为虚函数?

当使用多态特性,让基类指针指向派生类对象时,如果析构函数不是虚函数,通过基类指针销毁派生类对象时,会调用`静态绑定`的析构函数,也就是基类的析构函数,从而`只能销毁属于基类的元素`,导致派生类析构不完全,程序就会出现资源泄露或未定义行为。

2023-03-14 13:49:39 1670

原创 C++-为什么基类的构造函数不能定义为虚函数?

在创建派生类对象时,首先执行基类的构造函数,来初始化对象中属于基类的那一部分元素,这时派生类的元素尚未初始化。如果调用的是虚构造函数,虚函数的执行依赖于虚函数表,因为派生类中的虚函数表指针没有被初始化,那么编译器将无法知道应该调用哪一个虚构造函数,导致程序无法继续进行。

2023-03-13 17:16:01 410

原创 C++-虚函数表是针对类的还是针对对象的?同一个类的两个对象的虚函数表是怎么维护的?

当一个对象被创建时,它会在内存中分配一块空间用于存储对象数据和指向虚函数表的指针。这个指针始终指向该类的虚函数表,不会因为对象的不同而改变。如果存在多重继承的情况,则派生类会生成多个虚函数表的指针,分别维护来自不同基类的虚函数表,其规则和单继承相同。总之,虚函数是针对类的,同一个类的两个对象共享同一张虚函数表,虚函数表的内容由类的层次结构和重载情况决定。如果派生类没有重写基类的虚函数,那么它会继承基类的虚函数地址,并将其复制到自己的虚函数表中。每一个类都有一张虚函数表,存储中这个类所有虚函数的入口地址。

2023-03-13 15:39:42 520

原创 C++-纯虚函数有什么作用?如何实现?

为接口类提供了一种强制规范。

2023-03-13 14:32:59 1333 1

原创 C++-动态多条有什么作用?有哪些必要条件?

是指在程序运行时根据实际对象类型来确定调用哪个函数的机制。

2023-03-13 14:17:47 169

原创 C++-动态绑定是如何实现的?

记录每一个虚函数,并有一个指针指向对应类的虚函数表。当派生类重写了父类对应的虚函数时,派生类的虚函数表中对应的父类虚函数地址就。当使用父类指针或引用调用虚函数时,编译器就可以。当派生类继承自具有虚函数的类时,编译器会。,来调用虚函数的版本,产生不同的行为。vptr,指向虚函数表。

2023-03-13 14:03:26 185

原创 C++-有哪几种多态?

总之,多态性是面向对象编程中的重要概念,它可以使得代码更加灵活和易于扩展。我们应该熟练掌握多态性的实现方式,并在实际开发中合理运用多态性,从而提高代码的可读性、可维护性和可扩展性。在C++中,有两种多态性:编译期多态性(静态多态)和运行期多态性(动态多态)。

2023-03-11 15:51:01 814

原创 C++-类成员访问权限

总之,访问权限是C++语言中重要的概念,它可以帮助程序员控制程序的行为和保证程序的正确性。因此,在设计类时应该合理使用访问权限来限制成员的访问范围,从而达到信息隐藏和代码重用的目的。访问权限通过类的访问说明符指定,在类的定义中,每个访问说明符影响其后面定义的成员,直到遇到下一个访问说明符或者类定义结束为止。

2023-03-11 15:05:37 592

原创 C++-面向对象的三大特征是哪些?

这三个特征是面向对象编程的核心概念,它们使得程序具有更好的可读性、可维护性和可扩展性,并且使得 C++ 语言可以用于开发大型、复杂的软件系统。

2023-03-11 14:24:15 170

原创 C++-对四个智能指针:shared_ptr,unique_ptr,weak_ptr,auto_ptr的理解

实现独占资源的方式不再是拷贝构造和拷贝赋值函数,因此,当将一个auto ptr P1赋值给另一个auto ptr P2时,编译器会报错,解决了auto ptr 赋值后指向无效数据的问题,如果实在需要像auto ptr那样赋值,可以。在C++中,有四种主要类型的智能指针:auto_ptr,unique_ptr,shared_ptr,weak_ptr。,通过计数来表明资源被几个智能指针引用和共享,当计数为0时,说明资源已经不再被任何智能指针使用,从而可以进行释放资源的操作。,多个智能指针可以指向相同的对象,

2023-03-11 11:29:26 532

原创 C++-说一说异常机制

异常类提供了一些常见的异常类型和消息,可以方便地在代码中使用。在上述代码中,MyException类继承自std::exception类,表示一个自定义的异常。在C++中,异常是通过抛出异常对象来实现的。异常类可以包含一些有关异常的信息,如异常类型、异常码、错误消息等。在上述代码中,如果 try 块中的代码抛出了类型为 ExceptionType 的异常,则会被 catch 块捕获,并执行相应的处理代码。语句来处理异常,try块中包含可能抛出异常的代码,catch块则用于捕获和处理这些异常。

2023-03-09 12:32:09 364

原创 C++-C语言的结构体和C++的有什么区别?

C语言的结构体成员变量默认是公共的,而C++的结构体支持三种访问权限:public、private和protected。可以通过这些关键字来控制成员变量的访问权限。:C语言的结构体只能包含成员变量,不支持定义成员方法。而在C++的结构体可以像类一样定义成员方法。:C语言的结构体没有构造函数和析构函数的概念,而C++的结构体可以像类一样定义构造函数和析构函数。:C语言中的结构体不支持继承和多态特性,而C++的结构体可以通过继承来实现代码的重用和多态。总之,C++的结构体比C语言的结构体更加灵活和强大,

2023-03-09 12:20:31 552

原创 C++-拷贝初始化和直接初始化,初始化和赋值的区别?

总之,它们都实现了分配对象的数值,但它们在语法、时机和行为方面有所不同。在编写代码时,需要根据具体情况来选择使用哪种方式。在C++中,初始化对象有两种常见的方式:拷贝初始化和直接初始化。在C++中,初始化和赋值是两个不同的概念。

2023-03-09 12:07:23 438

原创 C++-顶层const和底层const是什么 ?

正如我们所看到的,指针是一个可以指向不同对象的对象。因此,我们可以独立地讨论一个指针是否为const,以及它所指向的对象是否为const。,我们将该const称为。

2023-03-08 23:04:49 272

原创 C++-说一说 extern “C“

它通常用于解决C++文件引入C文件后,因为C语言不支持函数重载,名称修饰等特性,导致的不兼容问题。再比如在团队开发中,有人擅长C语言,有人擅长C++的情况,在这种情况下,使用extern关键字进行处理,也可以很好的实现。总的来说,extern关键字将指定的代码块(包括函数和变量)以C语言的方式进行编译和链接,比如函数,因为。这个功能十分有用,在C++出现之前,很多底层库和代码都是C语言写的,extern关键字就可以用来更好的支。,所以在编译C语言函数时不会带上参数类型,一般只包括函数名。

2023-03-08 19:50:17 64

原创 c++-句柄和指针的区别和联系是什么?

句柄提供了对物理地址的抽象,实现了由于操作系统内存调度和管理,导致物理地址多变的系统资源,也可以。句柄是Windows编程中非常重要的一个概念,指针指向的是物理地址,而句柄是。,使得开发者可以更好在应用程序中访问和操作系统资源。

2023-03-07 22:27:18 307

原创 C++-结构体和类的异同

结构体和类的唯一区别就是默认访问权限,除此以外,两者并无太大差异,甚至类和结构体可以互相继承。实现继承,封装,多态。

2023-03-07 21:11:34 296

原创 C++-设置地址为0x67a9 的整型变量的值为0xaa66

直接修改地址的值可能会导致程序出现未定义的行为,因此应该避免这种写法。如果需要修改某个变量的值,可以使用正常的变量赋值方式或者传递引用参数等方式来修改。其中 reinterpret_cast 用于无关类型的转换,这里可以将 0x67a9 重新解释为 int* 类型的指针。

2023-03-07 20:29:32 553

原创 C++-如何避免“野指针”和“悬挂指针”?

正确使用指针、合理管理内存,并且在编码过程中注重细节,才能有效地避免野指针和悬挂指针的问题。

2023-03-07 17:14:00 296

原创 C++-简述指针常量和常量指针的区别

总之,指针常量和常量指针的主要区别在于修饰的对象不一样。,但可以修改指向的内存地址。,但可以修改指向对象的值。指向的对象的值不可变。

2023-03-07 16:11:55 496

原创 C++-简述队列和栈的异同

队列和栈都是常用的数据结构,但它们在实现细节和使用场景上有不同。

2023-03-07 15:38:22 288

原创 C++- typedef 和 #define 有什么区别?

typedef 和 define 都可以用来定义别名,但它们有以下区别:总之,虽然两者都可以定义别名,但 typedef 具有类型安全检查和更强大的语法支持,在实际编程中建议优先使用 typedef。

2023-03-07 14:50:34 193

原创 C++-指针和引用有什么区别?

总之,指针和引用是 C++ 中两个重要的概念,注意在合适的环境使用它们即可。

2023-03-07 14:27:08 85

原创 C++-请解析 (*(void(*)())0)()的含义

调用该函数,意味着会尝试在内存地址0处执行代码,这通常会导致程序崩溃或产生未定义行为。

2023-03-07 13:58:15 385

原创 C++-悬挂指针和野指针有什么区别?

悬挂指针和野指针都是程序中常见的错误指针,但它们的产生原因和含义不同。避免产生悬挂指针和野指针的方法有很多,例如在指针被释放后即使将其。可以有效的避免悬挂指针和野指针的问题。声明指针时进行初始化。

2023-03-06 22:39:57 663

原创 C++-右值引用有什么作用?

右值引用是C++中一项非常重要的特性,通过实现移动语义、完美转发等功能,能够提高程序效率、避免内存泄漏,并在标准库中得到了广泛的应用。:右值引用可以绑定到临时对象(右值),通过将资源的所有权从一个对象转移到另一个对象,,使得该对象的所有权可以被移交,从而避免了内存泄漏的问题。,例如std::vector、std::string等。,避免了不必要的复制和类型转换,提高了程序效率。:右值引用还可以用于函数模板的完美转发,即。

2023-03-06 22:19:18 2680

原创 C++-shared_ptr是如何实现的?

可以使用 weak_ptr 来解决这个问题,weak_ptr 不会增加引用计数,只是提供了对 shared_ptr 所指向对象的弱引用,不会影响内存的回收。:定义了一个模板类 shared_ptr,用于表示指向类型为 T 的共享内存对象的指针,其中需要记录被指向对象的指针和一个计数器,用于管理内存的生命周期。shared_ptr 是 c++ 标准库中的一种智能指针,用于管理动态分配的内存资源,采用计数技术来进行内存管理。中,左边的对象引用计数-1,右边的对象引用计数加1。赋值运算符和析构函数。

2023-03-06 22:02:04 346

原创 C++-什么是智能指针?智能指针有什么作用?分为哪几种?各自有什么样的特点?

智能指针分为:auto_ptr,unique_ptr,shared_ptr和weak_ptr四种。总之,每种智能指针都有其特点和适用场景,选择合适的智能指针可以更好地管理内存并提高程序效率。,就可以在离开作用域时,自动调用delete删除指针所指向的内存空间,从而。它们提供了一种自动管理内存的方式,其设计思想是将基本类型封装为(模板)智能指针是C++中用于。指针,这样,借助于类的。在C++11中被抛弃。

2023-03-06 21:23:37 504

原创 C++-对于一个频繁使用的短小函数,应该使用什么来实现?有什么优缺点?

如果一个函数被频繁调用且代码较短,则可以考虑将其定义为内联函数,从而提高程序的执行效率。但对于复杂的函数或需要多次调用的函数,则应该避免使用内联函数。这种方式可以减少函数调用的开销和额外的栈内存分配,从而提高程序的执行效率。,它是一种特殊的函数,编译器会将它的代码。中,而不是像普通函数那样创建一个新的。

2023-03-06 19:38:05 1046

原创 C++-简述strcpy、sprintf 和 memcpy 的区别

需要注意的是,参数 num 表示要复制的字节数,要保证目标地址有足够的空间容纳源内存块。该函数的第一个参数是目标字符串缓冲区,第二个参数是输出格式字符串,后面的参数表示要输出的具体数据,可以有多个。需要注意的是,输出的字符串长度不能超过缓冲区大小。需要注意的是,该函数会复制整个字符串,包括 NULL 终止符,因此要保证目标地址有足够的空间容纳源字符串。从上面可以知道,strcpy,sprintf 和 memcpy 都是用于字符串或内存块的复制操作的函数,但是也有很多区别。,来选择合适的函数实现拷贝功能。

2023-03-06 16:29:35 1302

原创 C++-全局变量和局部变量有什么区别?操作系统和编译器是怎么知道的?

当编译器遇到一个变量时,会根据变量的作用域和存储类型,来确定它们的存储位置和生命周期,并将这些信息记录在符号表中,在程序执行时,操作系统就可以。,识别变量的类型,是全局变量,还是局部变量,然后对其进行内存管理和生命周期管理。操作系统和编译器通过。

2023-03-06 16:08:41 518

原创 C++-一个参数可以既是 const 又是 volatile 吗?

可以使用const 和 volatile 关键字修饰同一个参数

2023-03-06 15:47:33 1189

原创 C++-volatile有什么作用?

volatile 关键字用来告诉编译器禁止对变量进行优化操作,避免相关问题的出现。

2023-03-06 15:29:06 420

原创 C++-C 语言的关键字 static 和 C++ 的关键字 static 有什么区别?

总之,因为c++引入了类的概念,static可以修饰的范围更加广泛。

2023-03-06 14:46:21 144

空空如也

空空如也

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

TA关注的人

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