c++
文章平均质量分 89
拾雪藏于春
这个作者很懒,什么都没留下…
展开
-
19.手写线程池
手写线程池原创 2023-11-19 13:54:55 · 719 阅读 · 1 评论 -
18.手写一个function模板函数
使如下代码可以正常运行:实现:模板样式:这里使用模板的偏特化,来实现需求我们想要用同一个数据类型来同时接受两种不同的对象,这里就得使用**继承(接口)**来实现, 这里我们可以使用类来同时接受不同函数和对象。并且由于对象的类型是不确定的,所有我们得在类对象的构造函数上面加上模板,来处理这种情况。 我们在这里定义一个函数指针,来接收我们函数地址,并进行初始话。 我们这里定义了一个指针对象,用来记录对象的地址,并定义了一个指向成员函数的指针(因为是虚函数,所有用虚函数表),来记录成原创 2023-11-18 10:07:33 · 612 阅读 · 1 评论 -
17.变参模板
/ ... sum_test 定义 ...这部分使用宏定义创建了一个名为sum_test的命名空间。这是为了封装sum结构体,防止与其他代码中的相同名称发生冲突。原创 2023-11-17 11:40:00 · 311 阅读 · 0 评论 -
16.模板的特化
模板特化是C++中一种机制,允许为模板提供特定类型或特定值的定制实现。通常,模板是用于创建通用的数据类型或函数,但在某些情况下,我们可能希望为特定的类型或值提供特殊的实现。这就是模板特化发挥作用的地方。 有两种主要类型的模板特化:类模板特化和函数模板特化。原创 2023-11-16 15:55:27 · 352 阅读 · 1 评论 -
15.左值、右值与移动构造
左值是指可识别并具有标识符(有名称)的表达式,其值具有持久性,可以取地址。原创 2023-11-15 08:34:08 · 270 阅读 · 0 评论 -
14.模板基础知识
C++中的模板是一种通用编程工具,允许你编写与数据类型无关的代码。模板允许你编写函数或类,其中的某些部分可以用类型或值替换,从而实现通用性和灵活性。模板是C++中强大而灵活的特性之一,它们使得编写可重用的代码变得更加容易。 在C++中,有两种主要类型的模板:函数模板和类模板。原创 2023-11-15 08:28:50 · 89 阅读 · 0 评论 -
13.哈希表(Hashtable)的实现
我们这里主要想实现一个可以的通用哈希表原创 2023-11-14 10:50:49 · 436 阅读 · 1 评论 -
12.实现IQueue(队列+优先队列)
。原创 2023-11-13 14:52:53 · 258 阅读 · 1 评论 -
11.虚函数与虚函数表
我们来看看上述代码中会输出什么内容呢?我们运行一下看看: 可以发现这里我们输出的是一个类的函数,两个类的函数,由这里我们可以知道普通的成员方法是跟着类走的,可是这里我们的对象明明是一个类,我们想输出3个类的方法,应该这么办呢?这里就要引入虚函数。 **虚函数(Virtual Function)**是面向对象编程(Object-Oriented Programming)中的一个重要概念,主要用于实现多态(Polymorphism)。在许多面向对象的编程语言中(如C++、Java等),虚函数允许子原创 2023-11-07 20:10:22 · 366 阅读 · 0 评论 -
10.C++继承运行顺序
我们来运行一下看看是这么构造的 可以发现调用顺序是这样的:先构造父类,在按照定义的成员属性的顺序来进行构造。至于为什么会这样呢?因为成员属性的构造可能是建立在父类的基础上在进行构造的,而成员属性也是一个道理,后定义的成员属性,可能是在先定义成员属性的基础的上进行构造的。原创 2023-11-06 21:31:17 · 176 阅读 · 1 评论 -
9.手写sort(模仿源码)
int *firstint *lastfirstlastfirstvaluelr我们这里调用sort函数来进行排序,现在sort内部只有一个快速排序,我们我们接着来进行优化。原创 2023-11-05 11:43:02 · 774 阅读 · 1 评论 -
8.智能指针
是 C++ 标准库中的智能指针类型,用于共享对象的所有权和自动化内存管理。它是最常用的智能指针之一,提供了一种安全、方便、自动化地管理动态分配内存的方式。以下是关于的详细解释:允许多个智能指针共享相同的对象。每个都维护一个引用计数,记录有多少个指向相同的对象。当引用计数为零时,对象的内存会被自动释放,确保对象在不再被引用时能够安全地被销毁。构造和初始化:可以使用以下方式来创建// 多个 shared_ptr 共享相同的 int 对象在上面的示例中,p1和p2共享相同的int。原创 2023-11-05 11:41:26 · 267 阅读 · 1 评论 -
5.深拷贝与浅拷贝+返回值优化
在C++中,深拷贝(deep copy)和浅拷贝(shallow copy)是两种不同的对象拷贝方式,它们在处理动态分配内存时表现出不同的行为。浅拷贝是指将一个对象的数据成员的值复制到另一个对象,但如果对象中包含指向动态分配内存的指针,它们将指向同一块内存空间。这样,当一个对象被销毁时,它指向的内存空间会被释放。如果另一个对象仍然引用这片内存,那么这个内存将变成悬空指针,访问它可能导致未定义行为。使用默认的拷贝构造函数和赋值运算符进行拷贝时,通常会发生浅拷贝。原创 2023-11-02 19:53:13 · 674 阅读 · 0 评论 -
3.命名空间
在C++中,是一种用来避免名称冲突的机制。通过将代码放在一个命名空间内,可以确保在程序中可以使用相同的名字来表示不同的实体,只要它们属于不同的命名空间。我们写程序时有没有产生过命名相同的错误呢?比如说定义了两个相同的变量,或定义了两个相同的函数,或在我们上一篇文章中说的类呢?如果有这种错误我们会怎么解决呢?这是有人就说了,这还不简单,直接改了不久好了嘛。可是这是我们可以该的情况下,可是如果我们改不了呢?当我们在写工程项目的时候会使用一些别的公司研发好的命名空间,如果这时两个公司的命名冲突了怎么办呢?原创 2023-11-02 19:38:47 · 507 阅读 · 0 评论 -
2.类和对象
1、类 类 是对一群具有 相同 特征 或者 行为 的事物的一个统称,是 抽象 的,不能直接使用 特征 被称为 属性 行为 被称为 方法 类就相当于制造飞机时的图纸,是一个模板,是负责创建的2、对象 对象 是 由类创建出来的一个 具体 存在,可以直接使用,由哪一个类创建出来的对象,就拥有在哪一个类中定义的: 属性 方法原创 2023-11-02 19:35:09 · 577 阅读 · 0 评论 -
1.C++程序是如何运行起来的呢?
这个问题的具体步骤取决于计算机环境和使用的C++编译器,但大体如下使用文本编辑器编写程序,并将其保存在文件中,这个文件就是程序的源代码。编译源代码。这意味着运行一个程序,将源代码翻译为主机使用的内部语言一一机器语言。包含了翻译后的程序的文件就是程序的目标代码(object code)。将目标代码与其他代码链接起来。例如,C++程序通常使用库。C++库包含一系列计算机例程(被称为函数)的目标代码,这些函数可以执行诸如在屏幕上显示信息或计算平方根等任务。原创 2023-11-02 19:30:19 · 1065 阅读 · 0 评论 -
7.手写Vector(模仿STL-vector)(只有封装思想)
可以发现结构是一模一样的(没有自己的思想,先学着写,啊哈哈哈哈哈哈哈哈哈),但是呢?它传的是一个模板类型,然后在进行来原地构造,(这里由于还没学,就先不写了),它可以适用很多种情况,如果传进来的是个指针类型,原地构造也是可以很好解决的,我们这里只有一个。我们来看看这段最核心的代码(自我认为),它先进行了一个判断,判断这个函数满没有满,如果没有的话,我们就调用。在362行代码中,他先进行了一个判断,判断这个数组是否满了,并且插入的是末尾,如果是的话,我们就会进行和。他最后返回了一个地址,可。原创 2023-11-02 20:03:38 · 647 阅读 · 1 评论 -
6.函数重载与运算符重载
是指在一个类中可以存在多个同名函数,但它们的必须。在调用函数时,编译器会根据传入的参数类型或数量来确定调用哪一个函数。这段代码展示了函数重载的一个简单示例,包含了三个重载的add函数。:这个函数接受两个整数参数a和b,并返回它们的和。:这个函数接受三个整数参数ab和c,并返回它们的和。:这个函数接受两个双精度浮点数参数a和b,并返回它们的和。这两段代码能否进行重载呢?原创 2023-11-02 20:00:05 · 586 阅读 · 0 评论 -
4.构造函数与析构函数
int __y;int __z;A a;return 0;在上述这种情况中发生了什么呢?我们定义了一个a对象,由于我们在类中没有声明构造函数,所以这时C++A() {};这时当我们定义一个A类对象a时,这个默认函数将被调用,并没有进行初始化,因为默认构造函数中并没有初始化内容,为空函数。下面我们将自己写一个构造函数,看看会发生什么。原创 2023-11-02 19:45:57 · 604 阅读 · 0 评论