【C++】类和对象(下):友元、static成员、内部类、explicit 和 匿名对象
文章目录
- 前言
- 一、友元
- 二、static成员
- 三、内部类
- 四、隐式类型转换(加explicit可以阻止隐式类型转换)
- 五、匿名对象
前言
一、友元(友元函数 和 友元类)
二、static成员(类中被static修饰的成员变量 和 成员函数)
三、内部类( 如果⼀个类定义在另⼀个类的内部,这个类就叫做内部类)
四、隐式类型转换(加explicit可以阻止隐式类型转换)
五、匿名对象
一、友元
友元提供了⼀种突破类访问限定符封装的方式,友元分为:友元函数和友元类,在函数声明或者类声明的前面加friend,并且把友元声明放到⼀个类的里面。
友元函数的特点:
• 外部友元函数可访问类的私有和保护成员,友元函数仅仅是⼀种声明,他不是类的成员函数。
• 友元函数可以在类定义的任何地方声明,不受类访问限定符限制。
• 一个函数可以是多个类的友元函数。
友元类的特点:
• 友元类中的成员函数都可以是另⼀个类的友元函数,都可以访问另⼀个类中的私有和保护成员。
• 友元类的关系是单向的,不具有交换性,比如声明了A类是B类的友元,但是B类不是A类的友元。
• 友元类关系不能传递,如果A是B的友元,B是C的友元,但是A不是C的友元。
友元有时能为我们提供便利,但是友元会增加耦合度,破坏了封装,所以友元不宜多用。
(1)报错的示例(外部函数无法直接访问类对象的private部分):
#include<iostream>
using namespace std;class A
{
private:int _a1 = 5;
};
class B
{
private:int _b1 = 3;
};void func(const A& aa, const B& bb)
{cout << aa._a1 << endl;cout << bb._b1 << endl;
}int main()
{A aa;B bb;func(aa, bb);return 0;
}
那么外部函数要如何才能访问类对象的private部分,有一个办法就是在类中声明这个外部函数是它的友元函数,外部友元函数可以访问类对象的私有和保护成员,如下:
#include<iostream>
using namespace std;
class B;// 前置声明,防止A中友元函数声明时,编译器不认识Bclass A
{// 友元函数声明friend void func(const A& aa, const B& bb);
private:int _a1 = 5;
};class B
{// 友元函数声明friend void func(const A& aa, const B& bb);
private:int _b1 = 3;
};void func(const A& aa, const B& bb)
{cout << aa._a1 << endl;cout << bb._b1 << endl;
}int main()
{A aa;B bb;func(aa, bb);return 0;
}
(2)示例(友元类中的成员函数都可以是另⼀个类的友元函数,都可以访问另⼀个类中的私有和保护成员。):
#include<iostream>
using namespace std;class A
{friend class B;// 友元类声明
private:int _a1 = 1;int _a2 = 2;
};class B
{
public:void func1(const A& aa){cout << aa._a1 << endl;cout << _b1 << endl;}void func2(const A& aa){cout << aa._a2 << endl;cout << _b2 << endl;}
private:int _b1 = 3;int _b2 = 4;
};int main()
{A aa;B bb;bb.func1(aa);bb.func2(aa);return 0;
}
二、static成员
static成员指的是类中被static修饰的成员变量 和 成员函数。
static修饰的成员变量:
• 用static修饰的成员变量,称之为静态成员变量。静态成员变量⼀定要在类外进行初始化,且其初始化时不受访问限定符的限制。
• 静态成员变量为所有类对象所共享,不属于某个具体的对象,不存在对象中,存放在静态区。
• 静态成员变量不能在声明位置给缺省值初始化,因为缺省值是个构造函数初始化列表的,静态成员变量不属于某个对象,不走构造函数初始化列表。
static修饰的成员函数:
• 用static修饰的成员函数,称之为静态成员函数,静态成员函数没有this指针。
• 静态成员函数中可以访问其他的静态成员,但是不能访问非静态的成员,因为没有this指针。
• 非静态的成员函数,可以访问任意的静态成员变量和静态成员函数。
• 静态成员也是类的成员,受public、protected、private 访问限定符的限制。
• 突破类域就可以访问静态成员(前提是静态成员被public限定),可以通过类名::静态成员 或者 对象.静态成员 来访问静态成员变量和静态成员函数。
(1)示例(static修饰的成员变量):
#include<iostream>
using namespace std;
class A
{
public:private:static int _scount;// 类里⾯声明
};
// 静态成员变量⼀定要在类外进行初始化,且其初始化时不受访问限定符的限制
int A::_scount = 0;int main()
{A a;cout << sizeof(a) << endl;// A类对象大小为1,证明静态成员变量不存在对象中return 0;
}
(2)示例(static修饰的成员函数;突破类域就可以访问静态成员):
#include<iostream>
using namespace std;
class A
{
public:static int GetACount(){return _scount++;// 静态成员函数中可以访问其他的静态成员}
private:static int _scount;// 类⾥⾯声明
};
// 静态成员变量⼀定要在类外进行初始化,且其初始化时不受访问限定符的限制
int A::_scount = 0;int main()
{cout << A::GetACount() << endl;A a1;cout << a1.GetACount() << endl;// 突破类域就可以访问静态成员(前提是静态成员被public限定),// 可以通过类名::静态成员 或者 对象.静态成员 来访问静态成员变量和静态成员函数。return 0;
}
(3)示例(非静态的成员函数,可以访问任意的静态成员变量和静态成员函数):
// 实现⼀个类,能计算程序中创建出了多少个类对象?
#include<iostream>
using namespace std;
class A
{
public:A(){++_scount;// 非静态的成员函数,可以访问任意的静态成员变量和静态成员函数}static int GetACount(){return _scount;}
private:static int _scount;
};
int A::_scount = 0;int main()
{cout << A::GetACount() << endl;A a1;cout << a1.GetACount() << endl;A a2, a3;cout << a2.GetACount() << endl;return 0;
}
三、内部类
• 如果⼀个类定义在另⼀个类的内部,这个类就叫做内部类。内部类是⼀个独立的类,跟定义在全局相比,他只是受外部类类域限制和访问限定符限制,所以外部类定义的对象中不包含内部类。
• 内部类默认是外部类的友元类。
• 内部类本质也是⼀种封装,当A类跟B类紧密关联,A类实现出来就是给B类使用,那么可以考虑把A类设计为B的内部类,如果放到private/protected位置,那么A类就是B类的专属内部类,其他地方都用不了。
#include<iostream>
using namespace std;
class A
{
private:static int _k;int _h = 5;public:class B // 内部类默认是外部类的友元类,所以B默认就是A的友元{ public:void fun(const A& a){cout << _k << endl; cout << a._h << endl; cout << _b << endl;}private:int _b = 1;};
};
int A::_k = 10;int main()
{A a;// A类对象大小大小为4,所以外部类定义的对象中不包含内部类cout << "A类对象大小:" << sizeof(a) << endl;// 内部类受到外部类的类域和访问限定符限制,定义内部类对象要指定类域A::B b;b.fun(a);return 0;
}
四、隐式类型转换(加explicit可以阻止隐式类型转换)
• C++支持内置类型隐式类型转换为类类型对象,需要有相关内置类型为参数的构造函数。
• 类类型的对象之间也可以隐式转换,需要相应的构造函数支持
• 构造函数前面加explicit就不再支持隐式类型转换。
(1)示例(只要有相关内置类型为参数的构造函数,内置类型就可以隐式类型转换为类类型对象):
#include<iostream>
using namespace std;
class A
{
public:A(int a1)// A类的单参数构造函数:_a1(a1){}A(int a1, int a2)// A类的双参数构造函数:_a1(a1), _a2(a2){}void Print(){cout << _a1 << " " << _a2 << endl;}
private:int _a1 = 10;int _a2 = 5;
};int main()
{// 1 被传给A类的单参数构造函数,来构造⼀个A的临时对象,再⽤这个临时对象拷⻉构造aa1A aa1 = 1;aa1.Print();// { 2,2 } 被传给A类的双参数构造函数,来构造⼀个A的临时对象,再⽤这个临时对象拷⻉构造aa2A aa2 = { 2,2 };aa2.Print();// 由于 1 构造的是⼀个A的临时对象,而临时对象是具有常属性的,// 如果想要引用这个临时对象的话,必须使用const引用,使用普通引用会报错const A& aa3 = 1;return 0;
}
(2)示例(类类型的对象之间也可以隐式转换,但需要相应的构造函数支持):
#include<iostream>
using namespace std;
class A
{
public:A(int a1):_a1(a1){}int Get() const{return _a1 + _a2;}
private:int _a1 = 10;int _a2 = 5;
};class B
{
public:B(const A& a)// B类的构造函数:_b(a.Get()){}void Print(){cout << _b << endl;}
private:int _b = 0;
};int main()
{A aa1 = 2;// aa1 被传给B类的构造函数,来构造⼀个B的临时对象,再⽤这个临时对象拷⻉构造bb1B bb1 = aa1;bb1.Print();return 0;
}
(3)报错的示例(构造函数前面加explicit就不再支持隐式类型转换):
#include<iostream>
using namespace std;
class A
{
public:// 构造函数前加explicit就不再⽀持隐式类型转换explicit A(int a1):_a1(a1){}int Get() const{return _a1 + _a2;}
private:int _a1 = 10;int _a2 = 5;
};class B
{
public:// 构造函数前加explicit就不再⽀持隐式类型转换explicit B(const A& a):_b(a.Get()){}void Print(){cout << _b << endl;}
private:int _b = 0;
};int main()
{A aa1 = 2;// A类构造函数不再支持这种隐式类型转换,直接报错B bb1 = aa1;// B类构造函数不再支持这种隐式类型转换,直接报错bb1.Print();return 0;
}
explicit 关键字只阻止隐式类型转换,但不阻止显式类型转换。我们使用显式类型转换可以突破explicit 的限制,之前的那些转换过程照常进行:
#include<iostream>
using namespace std;
class A
{
public:// 构造函数前加explicit就不再⽀持隐式类型转换explicit A(int a1):_a1(a1){}int Get() const{return _a1 + _a2;}
private:int _a1 = 10;int _a2 = 5;
};class B
{
public:// 构造函数前加explicit就不再⽀持隐式类型转换explicit B(const A& a):_b(a.Get()){}void Print(){cout << _b << endl;}
private:int _b = 0;
};int main()
{// 在 C++ 中,当一个构造函数被声明为 explicit,它阻止了编译器调用它进行隐式类型转换。// 这里使用了显式类型转换 (A) 和 2 来创建A类的临时对象,再去拷贝构造aa1,这是合法的,// 因为 explicit 关键字只阻止隐式类型转换,但不阻止显式类型转换.A aa1 = (A)2;B bb1 = (B)aa1;bb1.Print();return 0;
}
五、匿名对象
• 用类型(实参) 定义出来的对象叫做匿名对象,相比之前我们定义的 类型 对象名(实参) 定义出来的叫有名对象
• 匿名对象生命周期只在当前一行,一般临时定义一个对象当前用一下即可,就可以定义匿名对象。
(1)示例(匿名对象的定义及其生命周期):
#include<iostream>
using namespace std;
class A
{
public:A(int a = 0):_a(a){cout << "A(int a)" << endl;}~A(){cout << "~A()" << endl;}
private:int _a;
};int main()
{// A aa1(); 不能这么定义对象,因为编译器⽆法识别这是⼀个函数声明,还是对象定义// 但是我们可以这么定义匿名对象,匿名对象的特点是不⽤取名字,// 但是他的⽣命周期只有这⼀⾏,我们可以看到下⼀⾏他就会⾃动调⽤析构函数A();A(1);A(2);return 0;
}
(2)示例(引用匿名对象可以延长它的生命周期):
#include<iostream>
using namespace std;
class A
{
public:A(int a = 0):_a(a){cout << "A(int a)" << endl;}~A(){cout << "~A()" << endl;}
private:int _a;
};int main()
{// 匿名对象的⽣命周期只有这⼀⾏,我们可以看到下⼀⾏他就会⾃动调⽤析构函数A();// 我们可以引用匿名对象,不过必须要使用const引用,// 因为匿名对象和临时变量类似,都具有常属性。// 匿名对象被引用后,⽣命周期不再只有⼀⾏,它的生命周期跟引用其的aa一致const A& aa = A(1);A(2);return 0;
}
(3)示例(匿名对象在创建的同时可以调用成员函数):
#include<iostream>
using namespace std;
class Solution
{
public:int Sum_Solution(int n) {cout << n << endl;return n;}
};int main()
{Solution s1;s1.Sum_Solution(10);// 匿名对象在创建的同时可以调用成员函数Solution().Sum_Solution(10);return 0;
}
相关文章:
【C++】类和对象(下):友元、static成员、内部类、explicit 和 匿名对象
文章目录 前言一、友元二、static成员三、内部类四、隐式类型转换(加explicit可以阻止隐式类型转换)五、匿名对象 前言 一、友元(友元函数 和 友元类) 二、static成员(类中被static修饰的成员变量 和 成员函数…...
Shapelet-aeon-1
本文中,我们将首创一个长度为m、维度为d的时间序列表示为一个向量。 在aeon中,我们将一个序列描述为x:(n_channels, n_timepoints). x是一个二维数组,其中n_channels对应的是维度d,或者说是特征数量;n_timepoints对应…...
2. 进程和线程
文章目录 前言1. 进程是什么2. 进程的相关属性3. 线程是什么4. 为什么引入线程5. 进程和线程的区别 前言 上一篇博客,我们讲到了CPU和操作系统,今天我们讲一个操作系统中一个非常重要的概念—线程和进程 1. 进程是什么 每个应用程序运行于现代操作系统…...
CE中注册的符号地址如何通过编程获取
我的方式是先执行lua申请共享内存,内存名称是进程id,这样多开也不受影响,然后通过共享内存的名字就可以读到地址了。之后的人造指针的地址也都可以放这里集中管理。 -- 申请内存 local size 1024 -- 申请 1024 字节(1 KB&#…...
QT上实现SVM进行数据分类
针对不了解SVM的原理的同学强推下面这个课程: 6.机器学习课程(六)支持向量机(线性模型)问题_哔哩哔哩_bilibili 一、QT实现SVM的方法 1.调用SVM的C语言库:麻烦,要专门去找库,cmak…...
【unity调用c++动态库,c++和c#相互调用】
文章目录 前言一、编写C++动态库(MyLibrary.cpp)二、 编译C++动态库三、编写C#代码(CallbackExample.cs)四、将C++动态库与Unity项目集成五、Unity运行结果六、注意事项总结前言 在Unity中调用C++动态库并进行回调到C#的功能实现,涉及到C++与C#之间的交互。这个过程的关键…...
SAP FICO财务模块的会计年度变式是什么?有特殊的年度期间(财年)吗?可以不按日历月份来设定会计期间吗?
文章目录 一、会计准则中关于会计期间的一般性原则二、SAP系统中关于会计期间的设定(1)一般性的期间设定方式(2)特殊期间是什么?(3)有些国家与众不同的财年 三、可以不按日历月份来设定会计期间…...
Linux(17)——使用 DNF 安装和更新软件包
目录 一、使用 DNF 管理软件包: 1、 DNF 查找软件: 2、DNF 安装软件: 3、DNF 删除软件: 二、使用 DNF 管理软件包组: 1、DNF 显示组信息: 2、DNF 安装组: 三、使用 DNF 查看事务历史记录…...
vue中的设计模式
vue中使用了哪些设计模式 1. 观察者模式(Observer Pattern) 应用场景:Vue 的响应式系统核心就是观察者模式。 实现方式:通过 Object.defineProperty 或 Proxy 监听数据变化,当数据发生变化时,通知依赖的视…...
大模型性能随笔
1. 如果开了accumulate gradient更新,则pipeline并行的bubble会变小很多。因为每foward好多个batch,才开始backward。 2. chat聊天任务上,可以把prefix KV cache reuse功能利用起来;然后把同一个session的对话,路由到…...
pdf预览 报:Failed to load module script
pdf 预览报: Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of “application/octet-stream”. Strict MIME type checking is enforced for module scripts per HTML spec. 报错原因:…...
基于 gitlab-runner 实现调度GPU的资源
本篇目录 1. 客户需求2. 需求调研3. 实践3.1 方案一:环境变量的方式3.2 方案二:k8s 自身的spec注入机制 4. 效果 该实践来自于客户的一个真实需求 1. 客户需求 客户的某些流水线需要使用GPU资源,但是对于GPU服务器而言,会有多张G…...
【源码+文档+调试讲解】项目申报小程序
摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代…...
【ShuQiHere】使用 SCP 进行安全文件传输
【ShuQiHere】🚀 在日常的开发和运维工作中,文件传输是一个常见的任务。scp(Secure Copy)是一个基于 SSH 协议的文件传输工具,能够在本地和远程主机之间安全地复制文件和目录。本文将详细介绍 scp 的使用方法…...
算法基础 - 二分查找
文章目录 二分查找算法通常应用于已排序的数组。以下是一个C实现的二分查找算法示例: #include <iostream> #include <vector>int binarySearch(const std::vector<int>& nums, int target) {int left 0;int right nums.size() - 1;while …...
权限掩码umask
1 、 设置新建文件或目录的默认权限 在 Linux 系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分配默认的权限,该默认权限与umask 值有关,其具体关系是: 新建文件的默认权限 0666-umask 值 新建…...
5. CSS引入方式
5.1 CSS的三种样式 按照 CSS 样式书写的位置(或者引入的方式),CSS样式表可以分为三大类: 1.行内样式表(行内式) 2.内部样式表(嵌入式) 3. 外部样式表(链接式) 5.2 内部样式表 …...
在Linux中,SElinux的作用是什么?如何临时和永久的更改SElinux上下文?
SELinux在Linux系统中扮演者至关重要的安全角色,它通过实施强制访问控制(Mandatory Access Control,MAC)策略来增强系统的安全性。不同于传统的用户和组权限管理机制(即自主访问控制DAC),selinux提供了一种…...
windows下,golang+vscode+delve 远程调试
1 现在远程服务器安装golang和delve golang的安装,通过官网直接下载安装包安装接口 go install github.com/go-delve/delve/cmd/dlvlatest 如果dlv和golang版本不匹配,这里把latest换成匹配的版本,比如1.20.0 2 编译带调试信息的程序 go bu…...
社交牛杂症?锂电系统有了DeviceNet转Profinet网关后,沟通无障碍
在锂电行业蓬勃发展的当下,自动化与智能化浪潮正席卷而来,这无疑对设备间的通信精准度与流畅性提出了严苛要求,而稳联技术Devicenet转Profinet网(WL-PN-DVNM)关恰是破局的关键利器。 此网关设备犹如一座桥梁࿰…...
C语言的正则表达式
C语言中的正则表达式 引言 正则表达式是一种用于描述字符串模式的工具,它可以用来进行字符串匹配、查找、替换等操作。在编程中,正则表达式被广泛应用于数据验证、信息提取等场景。C语言虽然没有内置的正则表达式支持,但通过一些库我们同样…...
Launcher3主页面加载显示流程分析
布局结构 抓取布局后,可以看到每个图标是一个DoubleShadowBubbleTextView,父布局是CellLayout、workspace。 我们可以在CellLayout添加子view打印出调用堆栈信息,可以整体上看页面加载显示流程。 主要类 Launcher.java:主界面&…...
机器学习算法---贝叶斯学习
1.了解相关概念 先验概率:有数据集d,以及假设h,此时h是不确定的。在还没有训练数据之前h的初始概率记为P(h),类似地我们把P(d)表示训练数据d在任何假设都未知或不确定时的概率。P(d|h)表示已知假设h成立时d的概率。 后验概率:就是在数据d上经过学习之后…...
PyCharm+RobotFramework框架实现UDS自动化测试——(二)RobotFramework环境配置
从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者,时光不负有心人。 文章目录 1.环境准配2.Pycharm中相关配置2.1. 安装Hyper RobotFramework Support 3.脚本执行环境3.1 执行单条的配置3.2 执行全部用例配置 4.工程运行4.1 单条用例运行4.…...
colnames看似简单,却能优化数据处理流程
引言 在数据处理和分析中,变量名称是至关重要的,它们决定了数据的可读性和操作的简便性。在R语言中,colnames 函数以其简单的语法设计,提供了高效管理数据框列名的能力,尤其是在复杂的爬虫任务中显得尤为重要。本篇文…...
Spring Boot整合Minio实现文件上传
Spring Boot整合Minio后,前端的文件上传有两种方式: 文件上传到后端,由后端保存到Minio 这种方式好处是完全由后端集中管理,可以很好的做到、身份验证、权限控制、文件与处理等,并且可以做一些额外的业务逻辑…...
GitHub - riscv-software-src/riscv-isa-sim: Spike, a RISC-V ISA Simulator
GitHub - riscv-software-src/riscv-isa-sim: Spike, a RISC-V ISA Simulator 操作手册 $ apt-get install device-tree-compiler libboost-regex-dev libboost-system-dev $ mkdir build $ cd build $ ../configure --prefix$RISCV $ make $ [sudo] make install 具体安装 …...
ceph文件系统
ceph文件系统: 使用设备:4台机器 高度可扩展,分布式的存储文件系统,旨在提供高性能,高可靠性和高可用的对象存储,块存储,文件系统的存储 使用分布式的算法保证数据的高可用和一致性 ceph的架…...
模型创新、论文复现、科研辅导、论文代码定制
建模先锋团队长期致力于为用户提供优质的代码定制服务。团队提供全网最低价格的服务,同时保证高性价比和高质量的代码交付,为您提供个性化定制的服务。 以下是定制服务范围: 通过深度学习和信号处理技术,我们能够针对不同行业和场…...
【flink-cdc】flink-cdc 3版本debug启动pipeline任务,mysql-doris
官方文档 github仓库地址 Flink cdc debug调试动态变更表结构 经过测试使用,在启动任务配置Modify classpath添加jar的方式,容易出错classNotFoundException等等。 一、build project flink-cdc版本:3.2.1 mvn clean package "-Dma…...
mybatisX插件的使用,以及打包成配置
装mybatisX插件; idea连接数据库; 点击mybatisx-generator,设置自己装mybatisX插件; idea连接数据库; 点击mybatisx-generator,设置自己要的包和类; 如果要把自己的配置设置成一个自定义模板&a…...
pip下载包出现SSLError
报错: ERROR: Could not install packages due to an OSError: HTTPSConnectionPool(host‘files.pythonhosted.org’, port443): Max retries exceeded with url: /packages/8a/c2/ae7227e4b089c6a8210920db9d5ac59186b0a84eb1e6d96b9218916cdaf1/taming_transform…...
Linux下查看文件和文件夹占用空间大小
使用Linux命令,查看文件磁盘所占的空间大小,下面可以通过以下命令进行操作 df 可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件束手无策du 查看文件和文件夹的磁盘使用空间 在使用中,一般是df命令和du命令一起联…...
【论文+源码】基于Spring和Spring MVC的汉服文化宣传网站
为了实现一个基于Spring和Spring MVC的汉服文化宣传网站,我们需要创建一个简单的Web应用程序来展示汉服文化和相关信息。这个系统将包括以下几个部分: 数据库表设计:定义文章、用户和评论的相关表。实体类:表示数据库中的数据。DAO层接口及MyBatis映射文件:用于与数据库交…...
C++语言的学习路线
C语言的学习路线 C是一门复杂而强大的编程语言,由于其高性能和灵活性,受到了许多开发者和企业的青睐。无论是系统软件、嵌入式系统还是游戏开发,C都有非常广泛的应用。要掌握C这门语言,需要合理制定学习路线,并结合实…...
【OpenCV】使用Python和OpenCV实现火焰检测
1、 项目源码和结构(转) https://github.com/mushfiq1998/fire-detection-python-opencv 2、 运行环境 # 安装playsound:用于播放报警声音 pip install playsound # 安装opencv-python:cv2用于图像和视频处理,特别是…...
【ArcGISPro/GeoScenePro】解决常见的空间参考和投影问题
修复空间参考缺失的图像 数据 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 查看属性坐标 查看属性范围 范围值并不是零或接近于零。 这意味着栅格具有范围,因此其已正确进行...
Ruby语言的语法
Ruby语言的语法之美 Ruby是一种动态、开放源代码的编程语言,由日本的松本行弘(Yukihiro Matsumoto)于1995年首次发布。Ruby语言以其简洁、优雅和易于阅读的语法而闻名。它不仅适合初学者,还被广泛应用于Web开发、数据分析和其他领…...
概述(讲讲python基本语法和第三方库)
我是北子,这是我自己写的python教程,主要是记录自己的学习成果方便自己日后复习, 我先学了C/C,所以这套教程中可能会将很多概念和C/C去对比,所以该教程大概不适合零基础的人。 it seems that python nowadays 只在人工…...
程序包org.springframework.boot不存在
springBoot项目启动报错 程序包org.springframework.boot不存在 1、检查依赖 首先检查pom文件判断依赖是否存在 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.4.5…...
.NET Core FluentAPI
目录 约定配置 主要规则 两种配置方式 Data Annotation Fluent API Fluent API配置 Fluent API众多方法 选择 约定配置 主要规则 表名采用DbContext中的对应的DbSet的属性名。数据表列的名字采用实体类属性的名字,列的数据类型采用和实体类属性类型最兼容…...
浙江省自然资源厅:基于“浙里办”的自然资源移动政务服务创新实践——“浙里自然资源”
摘 要:本文基于浙江省自然资源移动政务服务的创新实践,设计和实现“浙里自然资源”应用,依托浙江省省域空间治理数字化平台特有的架构基础,在提升功能性和可用性、加强运营力度、丰富服务内容等方面采取了管理举措和技术创新。通…...
【Astro】如何在Astro上借助Cloudflare D1和Drizzle ORM打造全栈应用?一文带你搞定!
如何在Astro上借助Cloudflare D1和Drizzle ORM打造全栈应用?一文带你搞定! 文章目录 如何在Astro上借助Cloudflare D1和Drizzle ORM打造全栈应用?一文带你搞定!前言一、Astro简介与优势二、Cloudflare D1简介三、Drizzle ORM简介四…...
【Axios使用手册】如何使用axios向后端发送请求并进行数据交互
axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。它支持请求和响应拦截、取消请求、自动转换 JSON 数据等功能,非常适合在现代 JavaScript 应用中进行网络请求。以下是对 axios 的详细讲解,包括安装、基本用法、高级功能等。…...
边缘计算应用十大领域
边缘计算解决了互联网的网速问题,作为实现边缘计算的基础,那边缘计算是5G与产业互联网、物联网时代的重要技术支撑,也正迎来广阔的增长空间。那么现在我们生活中有哪些领域正在使用边缘计算呢?今天我们来盘点一下我们身边正在使用…...
CSS 学习之 padding 与图形绘制
padding 属性和 background-clip 属性配合,可以在有限的标签下实现一些 CSS 图形绘制效果,我这里举两个小例子,重在展示可行性。 例 1:不使用伪元素,仅一层标签实现大队长的“三道杠”分类图标效果。此效果在移动端比较常见&…...
熔断器模式如何进入半开状态的
熔断器模式在进入打开状态并经过一段冷却时间后,会自动进入半开状态。这个过程是熔断器模式自我恢复机制的一部分,旨在测试下游服务是否已经恢复正常,从而决定是否重新允许请求通过。 1. 进入打开状态: • 当服务调用失败次数达到…...
数据结构:双向循环链表
双向循环链表(Doubly Circular Linked List) 双向循环链表是双向链表的一种变体,其特点是链表的头节点和尾节点相连,形成一个闭环。这种结构允许在链表中进行无缝的双向遍历,并且由于循环特性,可以从任何节…...
宝安湾区之光附近的钓鱼点
工作日的午休我经常在公司附近骑行,有时候也会骑行到宝安的湾区之光。但是我最感兴趣的除了湾区之光摩天轮,还有雷打不动的快乐钓鱼佬。 上图红框区域的河岸每天都会出现零零散散的快乐钓鱼佬,他们好像都有自己的钓鱼窝点。我发现来这里钓鱼也…...
【计算机网络】什么是AC和AP?
在现代的无线网络中,AC(Access Controller,接入控制器)和AP(Access Point,无线接入点)是两个至关重要的设备,它们在网络的管理、连接和优化中扮演着重要角色。理解它们的功能和区别&…...