当前位置: 首页 > news >正文

构造函数深入理解

目录

  • 构造函数
    • 构造函数体赋值
    • 初始化列表
      • 初始化列表格式
      • 初始化列表的意义以及注意点
        • const修饰的成员变量初始化
        • 对象成员具体初始化的地方
        • 缺省值存在的意义
          • 例子1
          • 例子2
        • 初始化与赋值
        • 引用成员变量的初始化
          • 注意点1
          • 注意点2
          • 我的疑惑
        • 自定义类型成员初始化
          • 例子1
          • 例子2
          • 例子3
          • 例子4
        • 初始化列表可以调用函数
          • 例子1
          • 例子2
          • 例子3
        • 我的疑惑
        • 拓展
          • 例子1
          • 例子2
          • 不同类型的赋值
          • 编译器优化拷贝构造函数的情景
            • 例子1
            • 例子2
        • 总结
    • explicit关键字
      • 例子1
      • 例子2
    • 补充

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒 个人主页
🥸🥸🥸 C语言
🐿️🐿️🐿️ C语言例题
🐣🐣🐣 python
🐓🐓🐓 数据结构C语言
🐔🐔🐔 C++
🐿️🐿️🐿️ 文章链接目录

构造函数

构造函数体赋值

在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值

class Date
{
public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}
private:int _year;int _month;int _day;
};

虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量
的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。因为初始化只能初始
化一次,而构造函数体内可以多次赋值。

初始化列表

初始化列表格式

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟
一个放在括号中的初始值或表达式

class Date
{
public:Date(int year, int month, int day): _year(year), _month(month), _day(day){}/*  Date(int year, int month, int day)之前的构造函数格式{_year = year;_day = day;_month = month;}*/private:int _year;int _month;int _day;
};

下面的写法都是错误的
在这里插入图片描述
在这里插入图片描述

初始化列表的意义以及注意点

const修饰的成员变量初始化
class Date
{
public:Date(int year, int month, int day){_n = 1;_year = year;_day = day;_month=month;}private:int _year;int _month;int _day;const int _n;
};
int main()
{Date d1(2024, 5, 14);return 0;
}

const int _n不能够初始化
在这里插入图片描述
在这里插入图片描述
对于下面的代码我们都知道,这是声明,当对象实例化的时候他们才会整体定义,比如Date d1(2024,5,14)

private:int _year;int _month;int _day;const int _n;

但是有些成员在定义的时候是必须初始化的,就如 const int _n,因为const修饰了int_n,const只有一次修改的机会就是在初始化的时候,初始化的时候没有被修改,就会导致后面要想再修改就不可能了,因为const不允许修改被修饰的变量

对象成员具体初始化的地方

那对象成员具体初始化的地方都在哪呢?

在这里插入图片描述
上图我们可以认为是具体的初始化吗?来看看下面的图片
在这里插入图片描述
定义和初始化应该只有一个位置,但是上图中我们对_year进行了两次初始化,那这是开辟了两次空间吗?
当然不是,这样的情况我们并不想让他发生
所以构造函数才有了初始化列表,初始化列表是每个成员变量定义初始化的位置,也就是说想_year=1这样重复初始化的就别出现在初始化列表当中了
在这里插入图片描述
在这里插入图片描述
上图中_month和_day默认初始化为0
在之前的构造函数当中,有提到过缺省值

缺省值存在的意义
private:int _year=2;int _month=1;int _day=3;const int _n=1;

这里的_year _month _day _n的缺省值分别为2 1 3 1,而这个缺省值其实就是为初始化列表准备的,当初始化列表当中什么都没有的时候,缺省值就发挥作用了

例子1
class Date
{
public:Date(int year, int month, int day){}void Print(){cout << _year << "/" << _month << "/" << _day << "/" << _n << endl;}
private:int _year=2;int _month=1;int _day=3;const int _n=1;
};
int main()
{Date d1(2024, 5, 14);d1.Print();return 0;
}

在这里插入图片描述

例子2

在这里插入图片描述

_year输出的结果是2因为在初始化列表当中我们对_year初始化成了2,所以并没有用到缺省值
_month输出结果是一个随机值因为_month即没给缺省值,又没对其进行初始化
_day输出结果是0,虽然_day给了缺省值,但是在初始化列表当中没有具体给初始化值,所以_day最后初始化的值为0(具体为什么我也不清楚,可能就觉得既然你都有缺省值了,要想让_day=缺省值,就不要在初始化列表里面写_day(),这样让人感觉你就像让_day默认初始化成0)
_n输出结果是4因为给的缺省值是4,虽然在初始化列表当中没有写n,但是初始化列表会用这个缺省值给n进行初始化

初始化与赋值

知道了初始化列表的用处后我们看看下面这个代码

class Date
{
public:Date(int year, int month, int day):_year(1),_month(2), _day(3),_n(4){_year = year;_month = month;_day = day;_year = 1;}void Print(){cout << _year << "/" << _month << "/" << _day << "/" << _n << endl;}
private:int _year=1;int _month;int _day=2;const int _n=4;
};
int main()
{Date d1(2024, 5, 14);d1.Print();return 0;
}

在这里插入图片描述
结果是1/5/14/4,为什么不是1/2/3/4呢?不是说初始化列表值允许初始化1次吗?
初始化的确只能初始化1次,但是赋值可以赋值很多次
所以大括号里面的_year=year…其实是对_year…赋值

并且从这个例子我们也可以看出谁才是初始化,因为按照程序运行的顺序,初始化必然是排在最前面的,赋值是在初始化成功的基础上才能进行

尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化,所以最终的写法如下

class Date
{
public:Date(int year, int month, int day):_year(year),_month(month), _day(day),_n(4){}void Print(){cout << _year << "/" << _month << "/" << _day << "/" << _n << endl;}
private:int _year=1;int _month;int _day=2;const int _n=4;
};
int main()
{Date d1(2024, 5, 14);d1.Print();return 0;
}

在这里插入图片描述

注意:
1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
2. 类中包含以下成员,必须放在初始化列表位置进行初始化:
引用成员变量
const成员变量
自定义类型成员(且该类没有默认构造函数时)

引用成员变量的初始化

为什么引用也要房子初始化列表当中呢?
在写引用的文章当中说过引用必须要在定义的时候初始化

注意点1

在这里插入图片描述
因为是引用,所以在初始化的时候我们可以填入成员变量,如下图_ref是_year的别名
在这里插入图片描述

注意点2

但同时也需要注意因为_ref是引用,所以在初始化的时候需要注意不可以成为const修饰成员的别名
在这里插入图片描述

我的疑惑

在写到这里的时候我还在想像这种引用放在初始化列表开始的位置,在_year还没初始化的时候,就让_ref作为_year的别名会不会报错呢?
在这里插入图片描述
这里我说一下我自己的想法,因为_year已经声明了,而_ref作为_year的别名,由于_year没有初始化,所以_ref只是套了一个空壳子,单号_year初始化后,_ref才真正的初始化成功
为了验证想法我见year的缺省值删掉,并且不在初始化列表当中加入_year,最后输出的是随机值
在这里插入图片描述
这时我有一点疑惑,如果没有初始化_year那_year应该只有一个声明才对,只有一个声明就说明_year没有空间,输出的时候应该会报错才对
于是我打印了一下_year和_ref的地址,发现他们是有地址的,说明_year和_ref是存在的
为了解释这种情况我觉得可能是在定义这个对象的时候想_year这些成员变量就已经有空间了,但是又和前面所的知识冲突,也可能是我自己没学懂😕😕😕
在这里插入图片描述

自定义类型成员初始化
例子1
class A
{
public:A(int a = 0):_a(a){cout << "A(int a=0)" << endl;}
private:int _a;
};
class Date
{
public:Date(int year, int month, int day):_ref(_year), _month(month), _day(day), _n(4)   {}void Print(){cout << &_year << "/" << _month << "/" << _day << "/" << _n << "/" << &_ref << endl;}
private:int _year;int _month;int _day=2;const int _n=4;int& _ref;A _aa;
};
int main()
{Date d1(2024, 5, 14);d1.Print();return 0;
}

现在有一个自定义类型A,将A_aa的声明放在Date的成员声明里,但是A_aa没有在Date的初始化列表当中定义,那A_aa会不会被定义呢?

我们需要理解下面这句话
我们不写默认构造函数,编译器会自动生成,编译器自动生成的默认构造函数不对内置类型进行处理,自定义类型调用他自己的默认构造函数

在Date的初始化列表当中由于没有写A的构造函数,所以在运行的过程当中会调用A的默认构造函数,而A的默认构造函数是在A这个类里面
在这里插入图片描述

例子2

当我们不给a默认构造呢(只写了int a,没有些int a=0)
在这里插入图片描述
因为我们给_a初始化成a,但是a没有给值,所以会报错

例子3

而当我们不给_a初始化成a时,也就是_a(),这样a就是初始化成0
在这里插入图片描述

例子4

我们也可以这样写
在这里插入图片描述

初始化列表可以调用函数
例子1
class Date
{
public:Date():_p((int*)malloc(sizeof(4))){//函数体if (_p == nullptr){perror("malloc fail");}}void Print(){cout << _p << endl;}
private:int* _p;
};
int main()
{Date d1;d1.Print();return 0;
}

在这里插入图片描述

例子2
class Date
{
public:Date(int year, int month, int day):_ref(_year), _month(month), _day(day), _n(4),_p((int*)malloc(sizeof(4))){//函数体if (_p == nullptr){perror("malloc fail");}}void Print(){cout << &_year << "/" << _month << "/" << _day << "/" << _n << "/" << &_ref << endl;cout << _p << endl;}
private:int _year;int _month;int _day = 2;const int _n = 4;int& _ref;int* _p;
};
int main()
{Date d1(2024, 5, 14);d1.Print();return 0;
}

在这里插入图片描述

例子3
class A
{
public:void Print(){cout << a << " " << p1 << " " << *p2 << endl;}
private:int a = 1;int* p1 = nullptr;int* p2 = (int*)malloc(4);};
int main()
{A a;a.Print();
}

因为缺省值是给初始化列表的,这里的int* p2 = (int*)malloc(4)和上面初始化列表当中的 ,_p((int*)malloc(sizeof(4)))写法是相同的,既然初始化列表可以这样写,那缺省值也是可以这样写的

所以缺省值不一定是常量
在这里插入图片描述

我的疑惑
class Date
{
public:Date():_p((int*)malloc(sizeof(4))){//函数体if (_p == nullptr){perror("malloc fail");}}void Print(){cout << _p << endl;}
private:int* _p;
};
int main()
{Date d1();d1.Print();return 0;
}

这段代码和上面的例子1的唯一区别就是Date d1有无括号,但是就是因为这个括号导致报错了,我也不清楚为什么会这样
例子2中Date d1有括号,并且也定义了_p,为什么就可以正常运行
在这里插入图片描述
在这里插入图片描述
除了上面的一些问题还有关于_p初始化的一些问题等

拓展
例子1
class C
{
public:C(int x = 0):_x(x){}void Print(){cout << _x << endl;}
private:int _x;
};
int main()
{C c1(1);c1.Print();
}

在这里插入图片描述

例子2
class C
{
public:C(int x = 0):_x(x){}void Print(){cout << _x << endl;}
private:int _x;
};
int main()
{C c2 = 2;c2.Print();
}

单参数构造函数支持隐式类型的转换,这里的2构造出了一个C的对象,我们先称为c3,然后将c3拷贝构造给c2,这样的话C c2=2就可以理解成c2=c3,

在这里插入图片描述

不同类型的赋值

另外之前提到过不同类型赋值过程也和这个是一样的
比如现在有一个int类型的a和double类型的b
在这里插入图片描述
现在要将b用来给a赋值,在赋值的过程中b会创建出一个临时变量,然后a拷贝这个临时变量,因为double类型有8个字节,而int类型只有4个字节,所以拷贝的时候就出现了数据丢失
在这里插入图片描述
在这里插入图片描述

同样的当一个char类型的变量赋值给int类型的变量,因为char类型只有1个字节,而int类型有4个字节,所以当char类型赋值给int类型的时候会出现类型提升
在这里插入图片描述

所以现在倒回来理解C c2=2应该就容易一点了

在这里插入图片描述

编译器优化拷贝构造函数的情景
例子1

我们也可以验证一下他时候调用了拷贝构造函数

在这里插入图片描述
这里没有调用拷贝构造函数是因为编译器优化了,同一个表达式连续步骤的构造,一般会合二为一

例子2
class C
{
public:C(int x = 0):_x(x){}C(const C& cc){cout << "C(const C& cc)" << endl;}void Print()const{cout << _x << endl;}
private:int _x;
};
int main()
{const C& c2 = 2;c2.Print();
}

这里的c2引用的是临时变量,而临时变量具有常性
在这里插入图片描述

总结

类中以下成员必须放在初始化列表中初始化
引用成员变量
const修饰成员变量
自定义类型成员(且该类没有构造默认成员函数时)
其他成员可以在函数体内初始化也可以在初始化列表里初始化

这里的函数体具体是指哪里呢?

    Date(int year, int month, int day):_ref(_year), _month(month), _day(day), _n(4)   ,_aa(1){//函数体}

explicit关键字

对于上面的代码有许多情况都是通过隐式类型转换,如果我们不想让这种转换发生,我们可以通过explicit去修饰

例子1

class C
{
public:C(int x = 0):_x(x){}C(const C& cc){cout << "C(const C& cc)" << endl;}void Print()const{cout << _x << endl;}
private:int _x;
};
int main()
{const C& c2 = 2;c2.Print();
}

在这里插入图片描述

例子2

多参数的类也是可以支持explicit修饰

class A
{
public:A(int a1,int a2):_a1(a1),_a2(a2){}
private:int _a1;int _a2;
};
int main()
{A b1 = { 1,2 };const A& b2 = { 1,2 };A b3(1,2);return 0;
}

需要注意的是A b1 = { 1,2 }中用的是花括号
在构造时我们我们可以写成A b3(1,2)

当加上explicit之后

class A
{
public:explicit A(int a1,int a2):_a1(a1),_a2(a2){}
private:int _a1;int _a2;
};
int main()
{A b1 = { 1,2 };const A& b2 = { 1,2 };A b3(1,2);return 0;
}

在这里插入图片描述

补充

看一下下面这道题

class A
{
public:A(int a):_a1(a),_a2(_a1){}void Print() {cout<<_a1<<" "<<_a2<<endl;}
private:int _a2;int _a1;
};
int main() {A aa(1);aa.Print();
}
A. 输出1  1
B.程序崩溃
C.编译不通过
D.输出1  随机值

_a2输出的是一个随机值,这是因为成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关
注意看private的中的_a1和_a2的先后顺序,_a2是在_a1前面的,所以_a2要比_a1先赋值
在这里插入图片描述

在这里插入图片描述
当我们调整顺序后,输出就是1 1了
在这里插入图片描述

相关文章:

构造函数深入理解

目录 构造函数构造函数体赋值初始化列表初始化列表格式初始化列表的意义以及注意点const修饰的成员变量初始化对象成员具体初始化的地方缺省值存在的意义例子1例子2 初始化与赋值引用成员变量的初始化注意点1注意点2我的疑惑 自定义类型成员初始化例子1例子2例子3例子4 初始化列…...

Rocky Linux 9 快速安装docker 教程

前述 CentOS 7系统将于2024年06月30日停止维护服务。CentOS官方不再提供CentOS 及后续版本&#xff0c;不再支持新的软件和补丁更新。CentOS用户现有业务随时面临宕机和安全风险&#xff0c;并无法确保及时恢复。由于 CentOS Stream 相对不稳定&#xff0c;刚好在寻找平替系统…...

go语言并发编程1-Gouroutine

参考文档&#xff1a;www.topgoer.com 使用方法 直接包装成函数&#xff0c;go关键字触发即可 注意事项 1 main方法结束后&#xff0c;main方法内启动的子协程会立即结束&#xff0c;无论是否执行完毕&#xff1b; 启动多个groutine 使用sync包的WaitGroup来控制&#xf…...

Sylar服务器框架——Http模块

1、http.h 定义了HttpMethod和HttpStatus /* Request Methods */ #define HTTP_METHOD_MAP(XX) \XX(0, DELETE, DELETE) \XX(1, GET, GET) \XX(2, HEAD, HEAD) \XX(3, POST, POST) \XX(4, PUT, …...

7km远距离WiFi实时图传模块,无人机海上无线传输方案,飞睿智能WiFi MESH自组网技术

在浩瀚无垠的海洋上&#xff0c;无人机正在开启一场前所未有的技术创新。它们不再只是天空的舞者&#xff0c;更是海洋的守望者&#xff0c;为我们带来前所未有的视野和数据。而这一切的背后&#xff0c;都离不开一项创新性的技术——飞睿智能远距离WiFi实时图传模块与无线Mesh…...

2024年上半年网络工程师下午真题及答案解析

试题一(20分) 某高校网络拓扑如下图所示&#xff0c;两校区核心&#xff08;CORE-1、CORE-2&#xff09;&#xff0c;出口防火墙&#xff08;NGFW-1、NGFW-2&#xff09;通过校区间光缆互联&#xff0c;配置OSPF实现全校路由收敛&#xff0c;两校区相距40km。两校区默认由本地…...

Jmeter下载、安装及配置

1 Jmeter介绍 Jmeter是进行负载测试的工具&#xff0c;可以在任何支持Java虚拟机环境的平台上运行&#xff0c;比如Windows、Linux、Mac。 Jmeter模拟一组用户向目标服务器发送请求&#xff0c;并统计目标服务器的性能信息&#xff0c;比如CPU、memory usage。 2 Jmeter下载 …...

掌握高效实用的VS调试技巧

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 1.编程常见的错误 1.1编译型错误 编程编译型错误是指在编译代码时发现的错误。编译器在编译过程中会检查代码是否符合语法规范和语义要求&#xff0c;如果发现错误会产生编译错误。 直接看错误提示信息&#xff08;双击&#…...

实验2 字符及字符串输入输出与分支程序设计实验

字符及字符串输入输出 从键盘输入两个一位十进制数&#xff0c;计算这两个数之和&#xff0c;并将结果在屏幕上显示出来。 分支程序设计 从键盘输入一字符&#xff0c;判断该字符是小写字母、大写字母、数字或者其他字符。若输入为小写字母&#xff0c;显示“You Input a Lo…...

docker容器间网络仿真工具-pumba

docker-tc&pumba docker-tc:docker-tc项目仓库 pumba:pumba项目仓库 这两个项目理论上都可以实现对容器间的网络环境进行各种模拟干预&#xff0c;包括延迟&#xff0c;丢包&#xff0c;带宽限制等。 但是我在实际使用时&#xff0c;发现docker-tc这个工具在进行网络进行模…...

A36 STM32_HAL库函数 之PCD通用驱动 -- B -- 所有函数的介绍及使用

A36 STM32_HAL库函数 之PCD通用驱动 -- B -- 所有函数的介绍及使用 1 该驱动函数预览1.11 HAL_PCD_SOFCallback1.12 HAL_PCD_ResetCallback1.13 HAL_PCD_SuspendCallback1.14 HAL_PCD_ResumeCallback1.15 HAL_PCD_ISOOUTIncompleteCallback1.16 HAL_PCD_ISOINIncompleteCallbac…...

vue2 + element三级菜单实现模板

需求&#xff1a; 需要一个含有三级菜单的结构模板&#xff0c;用于业务快速开发。 解决&#xff1a; sidebar.vue <template><el-menu :default-active"defaultActive" class"el-menu-vertical-demo" active-text-color"#ffd04b"&…...

vue H5页面video 视频流自动播放, 解决ios不能自动播放问题

视频组件 <videostyle"width: 100%; height: 100%;object-fit: fill"class"player"refplayer_big_boxcontrolspreloadautoplay //自动播放muted //是否静音playsinline"true"x5-playsinline""webkit-playsinline"tru…...

自闭症儿童:探索症状背后的多彩内心世界

在星启帆自闭症康复中心&#xff0c;我们每天与一群独特而珍贵的孩子相遇——他们&#xff0c;是自闭症谱系障碍的患儿。自闭症&#xff0c;这一复杂的神经发育障碍&#xff0c;以其多样化的症状表现&#xff0c;为每个孩子的生活轨迹绘上了不同的色彩。 自闭症孩子的症状各异…...

在Centos7上安装PostgreSQL16的详细步骤

文章目录 环境一、准备二、postgresql下载方法一&#xff1a;wget下载方法二&#xff1a;下载压缩包解压 三、创建用户组、用户四、创建数据主目录五、配置环境变量六、initdb初使化数据库七、配置服务八、设置开机自启动九、设置防火墙十、启动数据库服务 环境 CPU: 4 核心或以…...

MySQL 图形化界面

填完信息之后&#xff0c;圆圈处可以验证是否可以连接数据库 展示所有数据库&#xff08;因为有的可能连上&#xff0c;却没有数据库显示&#xff09;...

【人工智能】GPT-5的即将到来:从高中生进化到,,,博士生?

GPT-5的即将到来&#xff1a;从高中生进化到,博士生&#xff1f; 随着近月GPT-4o的出世&#xff0c;OpenAI也在进行一系列的采访和介绍接下来的展望和目标。 在6月22日的采访中&#xff0c;美国达特茅斯工程学院公布了OpenAI首席技术官米拉穆拉蒂的访谈内容。穆拉蒂确认&#…...

【收录率高丨投稿范围广 | 往届均已EI检索】第四届光学与通信技术国际学术会议(ICOCT 2024,8月9-11)

欢迎参加第四届光学与通信技术国际学术会议&#xff08;ICOCT 2024&#xff09;&#xff0c;该会议将于2024年8月9-11日在南京举办。自2021年首次会议以来&#xff0c;ICOCT已经发展成为光学和通信领域较有影响力的国际会议之一&#xff0c;聚焦最前沿的技术进展与未来发展趋势…...

小阿轩yx-LVS负载均衡群集

小阿轩yx-LVS负载均衡群集 构建群集服务器—通过整合多台服务器使用 LVS 达到服务器的高可用和负载均衡并以同一个 IP 地址对外提供相同的服务 LVS 群集应用基础 群集称呼来自英文单词“Cluster”在服务器领域则表示大量服务器的集合体&#xff0c;区分单个服务器 Cluster …...

CPP知识点记录总结

1、类的const成员函数 const成员函数的const 实际修饰的是该成员函数隐含的this指针&#xff0c;表明在该成员函数中不能对类的任何成员进行修改。 class A {void fun() const {// 常成员函数&#xff0c;在函数名后用const修饰} } 一文带你入门C类和对象【十万字详解&#…...

Spring源码(一) 如何阅读 Spring 源码

学习 Spring 的源码&#xff0c;也可以通过 SpringBoot 搭环境。 不管是什么源码&#xff0c;最好写个 demo&#xff0c;跑起来&#xff0c;然后从常用的类和方法入手&#xff0c;跟踪调试。 配置对象 新建一个 SpringBoot 的项目&#xff0c; 详情见&#xff1a; https://b…...

【代码随想录训练营】【Day 63】【单调栈-2】| Leetcode 42, 84

【代码随想录训练营】【Day 63】【单调栈-2】| Leetcode 42, 84 需强化知识点 单调栈强化 题目 42. 接雨水 注意 python 数组反序用法 result [::-1] class Solution:def trap(self, height: List[int]) -> int:# n len(height)# leftMax, rightMax [0] * n, [0] * …...

CTF常用sql注入(一)联合注入和宽字节

0x01 前言 给自己总结一下sql注入的常用姿势吧&#xff0c;记录一下学习 0x02 联合 联合注入的关键词是union SQL的union联合注入原理是联合两个表进行注入攻击&#xff0c;使用union select关键词来进行联合查询。 那么为什么我们在题目中一般是只写一个呢 因为 $sql &quo…...

薄冰英语语法学习--冠词1

冠词有2个,the 和 a /an the 叫定冠词 常用形容一类事务、特指&#xff08;加强&#xff09;、放在转有名词前面。 就这3个 定冠词 1. 定冠词特指某个&#xff08;某些&#xff09;人或某个&#xff08;某些&#xff09;事物 Many people came here to visit the old cast…...

基于Java中的SSM框架实现野生动物公益保护系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现野生动物公益保护系统演示 摘要 本系统按照网站系统设计的基本流程&#xff0c;遵循系统开发生命周期法和结构化方法&#xff0c;基于Java语言设计并实现了野生动物公益保护系统。该系统基于浏览器/服务器模式&#xff0c;采用JSP技术&#xff0c;后台…...

c->c++(二):class

本文主要探讨C类的相关知识。 构造和析构函数 构造函数(可多个)&#xff1a;对象产生时调用初始化class属性、分配class内部需要的动态内存 析构函数&#xff08;一个&#xff09;&#xff1a;对对象消亡时调用回收分配动态内存 C提供默认构造和析构,…...

11 UDP的可靠传输协议QUIC

1.如何做到可靠性传输 2.UDP与TCP,我们如何选择 3.UDP如何可靠,KCP协议在哪些方面有优势 4.KCP协议精讲(重点讲解 5.OUIC时代是否已经到来 UDP如何做到可靠传输 ACK机制重传机制 重传策略序号机制(后发的包可能先到) 3 2 1-> 2 3 1重排机制 2 3 1-> 3 2 1窗口机制 流…...

14-20 Vision Transformer用AI的画笔描绘新世界

概述 毫无疑问,目前最受关注且不断发展的最重要的主题之一是使用人工智能生成图像、视频和文本。大型语言模型 (LLM) 已展示出其在文本生成方面的卓越能力。它们在文本生成方面的许多问题已得到解决。然而,LLM 面临的一个主要挑战是它们有时会产生幻觉反应。 最近推出的新模…...

LVS FILTER UNUSED OPTION

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 过滤一些版图与spice网表对不上的器件。 一般后端遇不到这个问题,因为通常是需要写到网表中的decap没有写出来造成的,如下图。...

Python后端面试题

1. 文件操作w和r的区别 在Python中&#xff0c;文件操作模式中的w和r都表示对文件的读写操作&#xff0c;但它们在打开文件时的行为有所不同&#xff1a; r模式&#xff1a; 读写&#xff1a;这种模式允许你同时读取和写入文件。文件必须已经存在&#xff0c;否则会抛出一个Fi…...

docker打包 arm32v7/debian 问题总结

1.架构不同 我的宿主是x86 ,但是打包的是arm架构 安装qemu sudo apt-get install binfmt-support qemu qemu-user-static 然后使用buildx打包 docker buildx build --no-cache --platform linux/arm/v7 -t tdc_post:1.0.1 . --load 保存tar docker save -o tdc_post.tar tdc_p…...

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二十)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 30 节&#xff09; P30《29.数据持久化-用户首选项》 实现数据持久化在harmonyOS中有很多种方式&#xff0c;比较常见的是以下两…...

Vuetify3:监听当前手机还是电脑

我们在开发的时候&#xff0c;实现根据移动设备或PC设备来改编一些交互样式&#xff0c;这个时候我们需要监听宽度&#xff0c;在Vuetify3中可我们可以参考 ​​​​显示 & 平台配合监听即可在窗口缩小的时候判断出手机还是电脑 <template><v-app><div v-if…...

Zabbix 配置钉钉告警

Zabbix 配置钉钉告警 随着企业IT运维需求的不断增加&#xff0c;及时、准确地获取系统告警信息显得尤为重要。在众多告警工具中&#xff0c;Zabbix 因其强大的监控功能和灵活的告警机制&#xff0c;成为了很多企业的首选。同时&#xff0c;随着企业内部沟通工具的多样化&#…...

TTL转RS232与USB转TTL

USB转TTL是一种常用的通信接口转换器&#xff0c;它将USB&#xff08;通用串行总线&#xff09;接口转换为TTL&#xff08;晶体管-晶体管逻辑&#xff09;电平的串行接口。这种转换器在许多场景下非常有用&#xff1a; USB转TTL&#xff1a; 功能&#xff1a; 将计算机的USB接…...

【力扣 896】单调数列 C++题解(循环)

如果数组是单调递增或单调递减的&#xff0c;那么它是 单调 的。 如果对于所有 i < j&#xff0c;nums[i] < nums[j]&#xff0c;那么数组 nums 是单调递增的。 如果对于所有 i < j&#xff0c;nums[i]> nums[j]&#xff0c;那么数组 nums 是单调递减的。 当给定…...

代码随想录Day71(图论Part07)

53.寻宝 题目&#xff1a;53. 寻宝&#xff08;第七期模拟笔试&#xff09; (kamacoder.com) 思路&#xff1a;首先&#xff0c;我不知道怎么存这样的东西&#xff0c;用三维数组吗&#xff0c;没搞懂&#xff0c;果断放弃 prim算法实现 import java.util.*;class Main {publi…...

[Mdp] lc 494. 目标和(01背包变种+dp+dfs)

文章目录 1. 题目来源2. 题目解析1. 题目来源 链接:494. 目标和 2. 题目解析 方法一:dfs 数据量比较小,长度只有 20,那么针对每一个数都有两种选择,正、负,即 2 20 = 100 w 2^{20} = 100w 220=100w 差不多的时间复杂度,dfs 解决即可。时间复杂度: O ( 2 n ) O(2^{n…...

React vs Vue:谁是构建现代Web应用的王者?

在前端开发领域&#xff0c;React 和 Vue 是两大备受推崇的框架&#xff08;React实为库&#xff09;&#xff0c;各自拥有庞大的社区和丰富的生态系统。本文旨在深入探讨这两者之间的区别&#xff0c;通过代码示例来分析它们各自的优势和适用场景&#xff0c;从而帮助开发者做…...

Linux CentOS 宝塔中禁用php8.2的eval函数详细图文教程

PHP_diseval_extension 这个方法是支持PHP8的, Suhosin禁用eval函数&#xff0c;不支持PHP8 一、安装 cd / git clone https://github.com/mk-j/PHP_diseval_extension.gitcd /PHP_diseval_extension/source/www/server/php/82/bin/phpize ./configure --with-php-config/ww…...

Matlab 中 fftshift 与 ifftshift

文章目录 【 1. fftshift、ifftshift 的区别】【 2. fftshift(fft(A)) 作图 】【 3. fftshift(fft(A)) 还原到 A 】Matlab 直接对信号进行 FFT 的结果中,前半部分是正频,后半部分是负频,为了更直观的表示,需要将 负频 部分移到 前面。【 1. fftshift、ifftshift 的区别】 M…...

被裁了(9年)

那年&#xff08;2015年&#xff09;我刚毕业有一年多&#xff08;20出头&#xff09;&#xff0c;阴差阳错来到了现在的单位。 那时互联网腾起&#xff0c;单位也迅速发展&#xff0c;部门从起初的不到30号人发展到500人&#xff1b;A轮、B轮.....D轮&#xff0c;一轮轮的融资…...

13. Revit API: Filter(过滤器)

13. Revit API: Filter&#xff08;过滤器&#xff09; 前言 在讲Selection之前&#xff0c;还是有必要先了解一下的过滤器的。 对了&#xff0c;关于查找一些比较偏的功能或者API的用法&#xff0c;可以这样查找 关键词 site:https://thebuildingcoder.typepad.com/ site是…...

hadoop 3.X 分布式HA集成Kerbos(保姆级教程)

前提&#xff1a;先安装Kerbos 1、创建keytab目录 在每台机器上上提前创建好对应的kertab目录 [hadooptv3-hadoop-01 ~]$ sudo mkdir -p /BigData/run/hadoop/keytab/ [hadooptv3-hadoop-01 ~]$ sudo mkdir -p /opt/security/ [hadooptv3-hadoop-01 ~]$ sudo chown hadoop:had…...

VDS虚拟导播切换台软件

VDS 导播软件是一款功能强大的虚拟导播系统软件&#xff0c;具有全媒体接入、播出内容丰富、调音台、快捷切播与导播键盘、云台控制等特点&#xff0c;同时支持向多个平台直播推流。以下是一些常见的 VDS 导播软件特点&#xff1a; 1. 全媒体接入&#xff1a;支持多种设备和网…...

UE4_材质_使用彩色半透明阴影

学习笔记&#xff0c;不喜勿喷&#xff01;侵权立删&#xff0c;祝愿大美临沂生活越来越好&#xff01; 本教程将介绍如何配置虚幻引擎来投射彩色半透明阴影。 此功能在许多应用中都很有用&#xff0c;常见例子就是透过彩色玻璃窗的彩色光。 一、半透明阴影颜色 阴影在穿过半…...

arthas监控工具笔记(二)monior等

文章目录 monitor/watch/trace 相关monitormonitor例子monitor -c <value>monitor -m <vaule>monitor 条件表达式monitor -b monitor文档(界面描述)monitor文档(help) stack - 输出当前方法被调用的调用路径trace - 方法内部调用路径&#xff0c;并输出方法路径上的…...

【mybatis】mybatis-plus中主键生成策略

1、简介 MyBatis-Plus 中的主键生成策略是一个关键特性&#xff0c;它决定了如何为新插入的行生成唯一标识符&#xff08;即主键&#xff09;。MyBatis-Plus 提供了多种主键生成策略&#xff0c;以满足不同场景下的需求。 2、常见主键生成策略 1. AUTO&#xff08;数据库ID自…...

模型情景制作-如何制作棕榈树

夏天&#xff0c;沙滩&#xff0c;海景&#xff0c;棕榈树&#xff0c;外加美女&#xff0c;想象下热带海滨的样子吧 可是口年的上班族没有多少机会去到海滩&#xff0c;肿么办&#xff1f;我们自己DIY一个海滨情景摆在办公桌上吧~~~ 什么什么&#xff1f;棕榈树不会做&#xf…...

# mysql 中文乱码问题分析

mysql 中文乱码问题分析 一、问题分析&#xff1a; MySQL 中文乱码通常是因为字符集设置不正确导致的。MySQL 有多种字符集&#xff0c;如 latin1、utf8、utf8mb4 等&#xff0c;如果在创建数据库、数据表或者字段时没有指定正确的字符集&#xff0c;或者在插入数据时使用了与…...

【C#】委托

1.委托 delegate 委托是一种引用类型&#xff0c;能封装一个或者多个方法。类似于C中的函数指针&#xff0c;但是比指针更灵活、安全。 C中函数指针通常用于&#xff1a; 1.动态调用函数&#xff1a;在编译时不调用&#xff0c;而是在运行时。 2.回调机制&#xff1a;异步操作…...

iis部署前后端分离项目(React前端,Node.js后端)

iis虽然已经有点过时&#xff0c;但不少用户还在用&#xff0c;故总结一下。 1. 安装iis 如果电脑没有自带iis管理器&#xff0c;打开控制面板->程序->启用或关闭Windows功能&#xff0c;勾选iis安装即可 2. 部署前端项目 打开iis&#xff0c;添加网站&#xff0c;物理…...

Ubuntu 22.04远程自动登录桌面环境

如果需要远程自动登录桌面环境&#xff0c;首先需要将Ubuntu的自动登录打开&#xff0c;在【settings】-【user】下面 然后要设置【Sharing】进行桌面共享&#xff0c;Ubuntu有自带的桌面共享功能&#xff0c;不需要另外去安装xrdp或者vnc之类的工具了 点开【Remote Desktop】…...

[AHK V2]鼠标悬停展开窗口,鼠标离开折叠窗口

演示鼠标悬停窗口标题栏则展开窗口&#xff0c;鼠标离开窗口标题栏则折叠窗口。 ;作者&#xff1a;sunwind ;日期&#xff1a;2024年6月30日11:36:08 ;脚本&#xff1a;演示鼠标悬停窗口标题栏则展开窗口&#xff0c;鼠标离开窗口标题栏则折叠窗口。 MyGui : Gui() mytext:MyG…...

2024亚太杯数学建模竞赛(B题)的全面解析

你是否在寻找数学建模比赛的突破点&#xff1f;数学建模进阶思路&#xff01; 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024亚太杯数学建模竞赛&#xff08;B题&#xff09;的全面解析。这个解决方案包不仅包括完整的代码实现&#xff0c;还有详尽的建模过程和解…...

深度学习与浅层学习:技术变革下的竞争态势

深度学习与浅层学习&#xff1a;技术变革下的竞争态势 在过去十年中&#xff0c;深度学习的崛起对整个人工智能领域产生了巨大影响&#xff0c;几乎在各种任务中显示出超越传统浅层学习方法的性能。这种变化不仅推动了技术的进步&#xff0c;还对硬件市场&#xff0c;尤其是显…...

那么大的一个车卖24.9万?一起来看24款大众途昂

记得大众途昂刚上市的时候,所有看到这台车的人都会由衷感叹——“这车可真大”,那时的途昂还算是大众旗下偏高端的SUV,售价还要30多万起步。而如今,途昂还是那么大,但地位已不比当年,而且起售价格已经来到了24.9万。随着近年来汽车价格战的愈演愈烈,相比前几年,我们手持…...

家人们,咱们汽车界有自己的“显眼包”!

现在想换辆新车太难了,选择太多了,挑的眼花缭乱的。就在我一筹莫展的时候,我在店里遇到了传祺新能源E8,属实是没想到虽然它的价格不到25万,但是却拥有着特别抢眼的优势。它的智能化配置很高,5月份传祺E8首次升级OTA后新增了广汽魔方场景设定功能,可以让我自定义设置2000…...

美国电动汽车电力需求跃升至新高

盖世汽车讯 据外媒报道,随着美国电动汽车保有量的持续提升,此类车型的电力消耗也迎来了提升。2024年前两个月中,美国电动汽车的用电量同比跃升了50%以上。美国能源信息署发布的数据显示,今年前2个月,美国电动汽车总用电量为158万MWh,而2023年同期为104万MWh。与2023年同期…...

Java(六)——抽象类与接口

文章目录 抽象类和接口抽象类抽象类的概念抽象类的语法抽象类的特性抽象类的意义 接口接口的概念接口的语法接口的特性接口的使用实现多个接口接口与多态接口间的继承抽象类和接口的区别 抽象类和接口 抽象类 抽象类的概念 Java使用类实例化对象来描述现实生活中的实体&…...

SOL 交易机器人基本知识

有没有可以盈利的机器人&#xff1f; 是的&#xff0c;各行各业都有许多盈利机器人。在金融领域&#xff0c;交易机器人被广泛用于自动化投资策略并根据预定义的算法执行交易。这些机器人可以分析市场趋势并做出快速决策&#xff0c;从而可能带来可观的回报。同样&#xff0c;在…...

Java基础:异常(三)

Java基础&#xff1a;异常&#xff08;三&#xff09; 文章目录 Java基础&#xff1a;异常&#xff08;三&#xff09;1. Java异常体系1.1 错误的分类1.2 异常的分类 2. 异常的捕获与处理2.1 try-catch2.2 finally 3. 异常的抛出4. 自定义异常 1. Java异常体系 Java的异常体系是…...