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

类和对象(下)

1.取地址运算符重载

1.1 const成员函数

将const修饰的成员函数称之为const成员函数,const修饰成员函数放到成员函数参数列表的后
⾯。
const实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。
const 修饰Date类的Print成员函数,Print隐含的this指针由 Date* const this 变为 const
Date* const this

1.2 const成员函数有几个好处:

  1. 保证不变性const成员函数确保函数不会改变对象的状态,这有助于代码的安全性和可预测性。

  2. 允许在常量对象上调用:只有const成员函数可以在常量对象上被调用。如果你尝试在一个常量对象上调用非const成员函数,编译器会报错。

  3. 提高代码的可读性const关键字的使用可以让其他程序员更容易理解代码的意图,即这个函数不会改变对象的状态。

  4. 重载决议const可以作为函数重载的一部分。一个类可以同时拥有一个const和一个非const版本的成员函数,只要它们的参数列表相同。

  5. 多态性:在基类中将虚函数声明为const,可以确保在派生类中覆盖该函数时也必须声明为const

简而言之,只需要读,不需要写的函数都可以加上const
class MyClass {
public:void nonConstMember() {// 可以修改成员变量}void constMember() const {// 不能修改成员变量,除了mutable成员}
};

在这个例子中,nonConstMember函数可以修改类的成员变量,而constMember函数则不能修改任何成员变量,除非成员变量被声明为mutable

需要注意的是,即使函数被声明为const,它仍然可以调用该类的其他const成员函数,并且可以访问类的const成员变量。此外,const成员函数的返回值也可以是常量类型的引用或指针,以确保返回的对象不会被修改。

1.3 取地址运算符重载

取地址运算符重载分为普通取地址运算符重载和const取地址运算符重载,一般这两个函数编译器自动生成的就可以够我们⽤了,不需要去显示实现。除非一些很特殊的场景,比如我们不想让别人取到当前类对象的地址,就可以自己实现一份,胡乱返回一个地址。
class Date 
{
public:Date* operator&() {return this; // return nullptr; //return (Date*)0x12ff40;}const Date * operator&()const {return this; // return nullptr; //return (Date*)0x12ff40;} 
private: int _year ; // 年 int _month ; // ⽉ int _day ; // ⽇ 
};

具体的应用详见  时间类的实现  博客!

2. 再探构造函数

之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有⼀种方
式,就是初始化列表, 初始化列表的使用方式是以一个冒号开始 接着是一个以逗号分隔的数据成
员列表,每个"成员变量"后面跟⼀个放在括号中的初始值或表达式。
每个成员变量在初始化列表中只能出现一次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地方。
引用成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进行初始
化,否则会编译报错。
C++11⽀持在成员变量声明的位置给缺省值,这个缺省值主要是给没有显示在初始化列表初始化的成员使用的。
尽量使用初始化列表初始化,因为那些你 不在初始化列表初始化的成员也会走初始化列表 ,如果这个成员在声明位置 给了缺省值 初始化列表会用这个缺省值初始化 。如果你 没有给缺省值 ,对于没有显示在初始化列表初始化的 内置类型成员是否初始化取决于编译器 ,C++并没有规定。对于没有显示在初始化列表初始化的 自定义类型成员 会调用这个成员类型的默认构造函数,如果 没有默认构造会编译错误。
初始化列表中 按照成员变量 在类中声明顺序 进行初始化 ,跟成员在初始化列表出现的的先后顺序无关。建议声明顺序和初始化列表顺序保持一致。

#include<iostream>
using namespace std;typedef int STDataType;
class Stack
{
public:Stack(int n){cout << "Stack(int n = 4)" << endl;_a = (STDataType*)malloc(sizeof(STDataType) * n);if (nullptr == _a){perror("malloc申请空间失败");return;}_capacity = n;_top = 0;}// st2(st1)Stack(const Stack& st){// 需要对_a指向资源创建同样大的资源再拷贝值_a = (STDataType*)malloc(sizeof(STDataType) * st._capacity);if (nullptr == _a){perror("malloc申请空间失败!!!");return;}memcpy(_a, st._a, sizeof(STDataType) * st._top);_top = st._top;_capacity = st._capacity;}// st1 = st3// st1 = st1;Stack& operator=(const Stack& st){if (this != &st){free(_a);_a = (STDataType*)malloc(sizeof(STDataType) * st._capacity);if (nullptr == _a){perror("malloc申请空间失败!!!");return *this;}memcpy(_a, st._a, sizeof(STDataType) * st._top);_top = st._top;_capacity = st._capacity;}return *this;}void Push(STDataType x){if (_top == _capacity){int newcapacity = _capacity * 2;STDataType* tmp = (STDataType*)realloc(_a, newcapacity *sizeof(STDataType));if (tmp == NULL){perror("realloc fail");return;}_a = tmp;_capacity = newcapacity;}_a[_top++] = x;}void Pop(){_a[_top - 1] = -1;--_top;}int Top(){return _a[_top - 1];}~Stack(){cout << "~Stack()" << endl;free(_a);//_a = nullptr;//_top = _capacity = 0;}
private:STDataType* _a;size_t _capacity;size_t _top;
};
class MyQueue
{
public:MyQueue(int n, int& rx):_pushst(n),_popst(n),_ref(rx),_i(1){_size = 1;}private:// 成员变量声明Stack _pushst;Stack _popst;int& _ref;const int _i;int _size;
};int main()
{int x = 0;// 对象整体定义MyQueue q(1000, x);return 0;
}

我们来看一段代码:

#include<iostream> 
using namespace std; 
class A 
{
public: A(int a) :_a1(a) , _a2(_a1){}void Print() { cout << _a1 << " " << _a2 << endl; } 
private: int _a2 = 2; int _a1 = 2; 
};
int main() 
{ A aa(1); aa.Print(); 
}

 运行结果:1和随机值

3. 类型转换

C++支持内置类型隐式类型转换为类类型对象,需要有相关内置类型为参数的构造函数、
构造函数前⾯加explicit就不再⽀持隐式类型转换

#include<iostream>
using namespace std;
class A
{
public:// 构造函数explicit就不再支持隐式类型转换// explicit A(int a1)A(int a1)          //这是构造函数,它接受一个整数参数 a1 并初始化对象:_a1(a1)       //这是成员初始化列表,用于初始化成员变量 _a1{}                 //这个花括号必须加上!A(const A& aa)      //拷贝构造函数:_a1(aa._a1)    //成员初始化列表,用于初始化成员变量 _a1 和 _a2, _a2(aa._a2){}//explicit A(int a1, int a2)A(int a1,int a2):_a1(a1), _a2(a2){}void print()const{cout << _a1 << " " << _a2 << endl;}int get()const{return _a1 + _a2;}
private:int _a1 = 1;int _a2 = 2;
};
int main()
{// 自定义类型对象 = 内置类型的对象A aa1(1);A aa2(1,1);A aa3 = 1;const A& aa4 = 1;aa1.print();aa2.print();aa3.print();aa4.print();return 0;
}

运行结果: 

4. 友元     

友元提供了一种突破类访问限定符封装的方式,友元分为:友元函数和友元类,在函数声明或者类声明的前面加friend,并且把友元声明放到以个类的里面。
外部友元函数可访问类的私有和保护成员,友元函数仅仅是⼀种声明,他不是类的成员函数。
友元函数可以在类定义的任何地方声明,不受类访问限定符限制。
一个函数可以是多个类的友元函数。
友元类中的成员函数都可以是另一个类的友元函数,都可以访问另一个类中的私有和保护成员。
友元类的关系是单向的,不具有交换性,比如A类是B类的友元,但是B类不是A类的友元。
友元类关系不能传递,如果A是B的友元, B是C的友元,但是A不是B的友元。
有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。
#include<iostream>
using namespace std;
class A
{// 友元声明friend class B;
private:int _a1 = 1;int _a2 = 4;
};
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 = 6;int _b2 = 3;
};
int main()
{A aa;B bb;bb.func1(aa);bb.func2(aa);return 0;
}

注:若B是A的友元,即B可以访问A的私有成员,但是A不可以访问B的私有成员,若想让A可以访问B的私有成员,则类B也需要加友元声明!

 如图,将friend class A 取消注释就可以了!

另外,友元的声明在什么位置都行,不是必须在Public的前面!放其里面也是可以的!

下面提供让A和B互为友元的方法:

#include<iostream>
using namespace std;class A
{// 友元声明friend class B;
public:void func(const B& bb);
private:int _a1 = 1;int _a2 = 4;
};
class B
{friend class A;
public:void func1(const A& aa);void func2(const A& aa);
private:int _b1 = 6;int _b2 = 3;
};void A::func(const B& bb)
{cout << bb._b1 << endl;cout << _a1 << endl;
}void B::func1(const A& aa)
{cout << aa._a1 << endl;cout << _b1 << endl;
}
void B::func2(const A& aa)
{cout << aa._a2 << endl;cout << _b2 << endl;
}int main()
{A aa;B bb;bb.func1(aa);bb.func2(aa);aa.func(bb);return 0;
}

5.static成员

用static修饰的成员变量,称之为静态成员变量, 静态成员变量要在类外初始化
静态成员变量为所有类对象所共享,不属于某个具体的对象,不存在对象中,存放在静态区。
用static修饰的成员函数,称之为静态成员函数, 静态成员函数没有this指针。
静态成员函数中可以访问其他的静态成员,但是不能访问非静态的,因为没有this指针。
非静态的成员函数,可以访问任意的静态成员变量和静态成员函数。
突破类域就可以访问静态成员,可以通过类名::静态成员 或者 对象.静态成员来访问静态成员变量
  和静态成员函数。
静态成员也是类的成员,受public、protected、private 访问限定符的限制。
静态成员变量不能在声明位置给缺省值初始化,因为缺省值是个构造函数初始化列表的,静态成    员变量不属于某个对象,不走构造函数初始化列表。
#include<iostream>
using namespace std;
// 实现⼀个类,计算程序中创建出了多少个类对象?
class A
{
public:A(){++_scout;}A(const A& t){++_scout;}~A(){--_scout;}static int getacount(){return _scout;}
private://类里面声明static int _scout;
};
//类外面初始化
int A::_scout = 0;
int main()
{cout << A::getacount() << endl;A a1, a2;A a3(a1);cout << A::getacount() << endl;cout << a1.getacount() << endl;//cout << a1._scout << endl;         //error C2248: “A::_scout”: 无法访问 private 成 员(在“A”类中声明)//cout << A::_scout << endl;         //编译报错:error C2248: “A::_scount”: ⽆法访问 private 成员(在“A”类中声明)return 0;
}

 

6. 匿名对象

类型(实参) 定义出来的对象叫做匿名对象,相比之前我们定义的 类型 对象名(实参) 定义出来的
叫有名对象
匿名对象生命周期只在当前一行,一般临时定义一个对象当前用一下即可,就可以定义匿名象。
#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;};class Solution {public:int Sum_Solution(int n) {//...return n;}};void func1(int i = 0){}// 匿名对象做缺省参数//void func2(const A& aa = A())void func2(const A& aa = A(10)){}int main()
{A aa1;A aa2(2);cout <<"打印匿名对象"<< endl;// 不能这么定义对象,因为编译器无法识别下面是一个函数声明,还是对象定义//A aa1();// 但是我们可以这么定义匿名对象,匿名对象的特点不用取名字,// 但是他的生命周期只有这一行,我们可以看到下一行他就会自动调用析构函数A();cout <<"证明了自动调用析构函数" << endl;cout << "打印匿名对象" << endl;A(1);cout << "证明了自动调用析构函数" << endl;A& ref1 = aa1;// const引用会延长匿名对象的声明周期,匿名对象跟着引用走const A& ref2 = A();Solution s1;s1.Sum_Solution(10);Solution().Sum_Solution(10);func2();func2(aa1);return 0;
}

相关文章:

类和对象(下)

1.取地址运算符重载 1.1 const成员函数 • 将const修饰的成员函数称之为const成员函数&#xff0c;const修饰成员函数放到成员函数参数列表的后 ⾯。 • const实际修饰该成员函数隐含的this指针&#xff0c;表明在该成员函数中不能对类的任何成员进行修改。 const 修饰D…...

后端接受大写参数(亲测能用)

重要点引入包别引用错了 import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data;JsonSerialize Data public class Item {JsonProperty(value "Token")private String token…...

Android仿前端分页组件pagination

仿前端pagination Android仿前端分页组件pagination 最近Android原生有个需求就是做个分页组件&#xff0c;不用上拉加载&#xff0c;因为数据量太大用户喜欢前端的方式&#xff0c;UI主要是拼凑比较简单&#xff0c;主要补充了一些判断越界和数据不全的细节&#xff0c;记录方…...

网络安全中常用浏览器插件、拓展

引言 现在的火狐、Edge&#xff08; Chromium内核&#xff09;、Chrome等浏览器带有插件、拓展&#xff08;Plugin&#xff09;的功能。这些插件中有的可以过滤广告&#xff0c;有的提供便捷的翻译&#xff0c;有的提供JavaScript脚本支持&#xff0c;方便用户的使用也大大的增…...

Vue 使用 Cropper.js 实现图片裁剪功能

前言 图片裁剪功能无论是用户头像的裁剪&#xff0c;还是图片内容的精确调整&#xff0c;都成为了提升用户体验的关键一环。Vue.js 结合 Cropper.js 这一功能丰富的图片裁剪库&#xff0c;可以轻松实现高效、直观的图片裁剪功能。本文将详细介绍如何在 Vue.js 项目中集成并使用…...

Python 3 和 JSON 数据格式

Python 3 和 JSON 数据格式 Python 3 是一种广泛使用的编程语言,以其简洁明了的语法和强大的功能而闻名。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Python 3 提供了内置的 json 模块,使得在 Python 程序…...

Halo 正式开源: 使用可穿戴设备进行开源健康追踪

在飞速发展的可穿戴技术领域&#xff0c;我们正处于一个十字路口——市场上充斥着各式时尚、功能丰富的设备&#xff0c;声称能够彻底改变我们对健康和健身的方式。 然而&#xff0c;在这些光鲜的外观和营销宣传背后&#xff0c;隐藏着一个令人担忧的现实&#xff1a;大多数这些…...

第一个autogen与docker项目

前提条件&#xff1a;在windows上安装docker 代码如下&#xff1a; import os import autogen from autogen import AssistantAgent, UserProxyAgentllm_config {"config_list": [{"model": "GLM-4-Plus","api_key": "your api…...

React第四节 组件的三大属性之state

前言 状态 state适用于类式组件中&#xff0c;而再函数式组件中需要使用 useState HOOK 模拟状态; React的组件就是一个状态机&#xff0c;通过与用户的交互&#xff0c;实现不同的状态&#xff0c;根据不同的状态展现出不一样的UI视图 并不是组件中所有的属性 都是组件的状态…...

在 CentOS 系统上直接安装 MongoDB 4.0.25

文章目录 步骤 1&#xff1a;配置 MongoDB 官方源步骤 2&#xff1a;安装 MongoDB步骤 3&#xff1a;启动 MongoDB 服务步骤 4&#xff1a;验证安装步骤 5&#xff1a;可选配置注意事项 以下是在 CentOS 系统上直接安装 MongoDB 4.0.25 的详细步骤&#xff1a; 步骤 1&#x…...

C++知识点总结(58):序列型动态规划

动态规划Ⅰ 一、基础1. 意义2. 序列 dp 解法 二、例题1. 最大子段和2. 删数最大子段和&#xff08;数据强度&#xff1a;pro max&#xff09;3. 最长上升子序列&#xff08;数据强度&#xff1a;pro max&#xff09;4. 3 或 5 的倍数序列5. 数码约数序列 一、基础 1. 意义 动…...

【系统架构设计师】真题论文: 论网络安全体系设计(包括解题思路和素材)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2014年 试题4)解题思路论文素材参考网络安全体系设计目标与原则网络安全体系的主要组成部分网络安全体系设计流程真题题目(2014年 试题4) 随着社会信息化的普及,计算机网络已经在各行各业得到了广泛…...

TypeScript学习笔记(三)

类型详细介绍 七、常用类型与语法 1.any any 的含义是&#xff1a;任意类型&#xff0c;一旦将变量类型限制为 any , 那就意味着放弃了对该变量的类型检查。 // 明确的表示a的类型是 any —— 【显式的any】 let a: any // 以下对a的赋值&#xff0c;均⽆警告 a 100 a 你…...

logstash 解析数组格式json数据:split, json

1&#xff0c;需求说明 原始数据格式&#xff1a; 1条 &#xff08;2*2&#xff09;》4个指标数据 [{"app":"aa","url":"www.1.com","metrics":[{"name":"cpu","value":11},{"name&quo…...

修改一下达梦disql 提示符

经常用disql的有时某些信息希望提示一下&#xff0c;默认的只显示SQL> 为了方便使用&#xff0c;可以在 glogin.sql 中增加些内容。 vi $DM_HOME/bin/disql_conf/glogin.sql增加以下几行 set time on set lineshow offcol global_name new_value global_name SELECT ins…...

Vue通用组件设计原则

在 Vue.js 开发中&#xff0c;设计通用组件是一项重要的任务&#xff0c;可以提升代码的复用性和可维护性。以下是通用组件设计的主要原则和最佳实践&#xff1a; 1. 清晰的职责划分 通用组件应该具有单一的职责&#xff0c;专注于完成某一类特定功能&#xff0c;而不依赖具体…...

uniapp页面样式和布局和nvue教程详解

uniapp页面样式和布局和nvue教程 尺寸单位 uni-app 支持的通用 css 单位包括 px、rpx px 即屏幕像素。rpx 即响应式px&#xff0c;一种根据屏幕宽度自适应的动态单位。以750宽的屏幕为基准&#xff0c;750rpx恰好为屏幕宽度。屏幕变宽&#xff0c;rpx 实际显示效果会等比放大…...

Ubuntu问题 -- 设置ubuntu的IP为静态IP (图形化界面设置) 小白友好

目的 为了将ubuntu服务器IP固定, 方便ssh连接人在服务器前使用图形化界面设置 设置 找到自己的网卡名称, 我的是 eno1, 并进入设置界面 查看当前的IP, 网关, 掩码和DNS (注意对应eno1) nmcli dev show掩码可以通过以下命令查看完整的 (注意对应eno1) , 我这里是255.255.255.…...

【Java】期末复习章节 未完待续(版)

文章目录 【01算法类】1.1 使用冒泡排序算法对数组a{9, 7, 4, 6, 3, 1,10}&#xff0c;按由小到大的规律排序数组中的元素。1.2 从键盘输入一个4位整数n&#xff0c;判断n是否是回文数。&#xff08;回文数是指&#xff0c;将其数字反转排列的数与其本身相同。例如&#xff1a;…...

C语言数据结构——详细讲解 双链表

从单链表到双链表&#xff1a;数据结构的演进与优化 前言一、单链表回顾二、单链表的局限性三、什么是双链表四、双链表的优势1.双向遍历2.不带头双链表的用途3.带头双链表的用途 五、双链表的操作双链表的插入操作&#xff08;一&#xff09;双链表的尾插操作&#xff08;二&a…...

经验笔记:Git 中的远程仓库链接及上下游关系管理

Git 中的远程仓库链接及上下游关系管理 1. 远程仓库的链接信息 当你克隆一个远程仓库时&#xff0c;Git 会在本地仓库中记录远程仓库的信息。这些信息包括远程仓库的 URL、默认的远程名称&#xff08;通常是 origin&#xff09;&#xff0c;以及远程仓库中的所有分支和标签。…...

Swift闭包的本质

1 闭包的本质其实是一个引用类型&#xff1a;存储在堆空间上&#xff0c;由堆分配空间&#xff0c;且生命周期由ARC&#xff08;自动引用计数机制&#xff09;管理 2 捕获值&#xff1a;闭包会捕获上下文使用到的变量&#xff08;引用类型会保持引用关系&#xff09;&#xff…...

【SKFramework框架核心模块】3-2、音频管理模块

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群&#xff1a;398291828小红书小破站 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 【Unity3D框架】SKFramework框架完全教程《全…...

常用Rust日志处理工具教程

在本文中&#xff0c;我想讨论Rust中的日志。通过一些背景信息&#xff0c;我将带您了解两个日志库&#xff1a;env_logger和log4rs。最后&#xff0c;我将分享我的建议和github的片段。 Rust log介绍 log包是Rust中日志API的事实标准&#xff0c;共有五个日志级别&#xff1…...

深入理解索引(二)

1.引言 在数据库和数据结构中&#xff0c;索引&#xff08;Index&#xff09;是一种用于提高数据检索速度的重要机制。本文将详细深入介绍索引。 2. 为什么要使用索引 大家在使用索引之前一定要搞清楚使用索引的目的&#xff0c;因为索引的不当使用可能不但起不到正向作用&a…...

Python 开发工具 -- PyCharm 简介

一、PyCharm 简介 PyCharm 是由 JetBrains 打造的一款 Python IDE。 PyCharm 具备一般 Python IDE 的功能&#xff0c;比如&#xff1a;调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制等。 另外&#xff0c;PyCharm 还提供了一些很好的功能用…...

C# 属性 学习理解记录

字段和属性 左边字段&#xff0c;右边属性 拓展&#xff0c;属性安全&#xff1a; 1、设置public private 和protected 等&#xff0c;只读&#xff0c;只写&#xff0c; 2、在get set 方法时&#xff0c;验证&#xff0c;异常时抛出错误...

使用chrome 访问虚拟机Apache2 的默认页面,出现了ERR_ADDRESS_UNREACHABLE这个鸟问题

本地环境 主机MacOs Sequoia 15.1虚拟机Parallels Desktop 20 for Mac Pro Edition 版本 20.0.1 (55659)虚拟机-操作系统Ubuntu 22.04 服务器版本 最小安装 开发环境 编辑器编译器调试工具数据库http服务web开发防火墙Vim9Gcc13Gdb14Mysql8Apache2Php8.3Iptables 第一坑 数…...

【大数据学习 | Spark-Core】Spark的分区器(HashPartitioner和RangePartitioner)

之前学过的kv类型上面的算子 groupby groupByKey reduceBykey sortBy sortByKey join[cogroup left inner right] shuffle的 mapValues keys values flatMapValues 普通算子&#xff0c;管道形式的算子 shuffle的过程是因为数据产生了打乱重分&#xff0c;分组、排序、join等…...

第六届国际科技创新学术交流大会(IAECST 2024)暨第四届物流系统与交通运输国际学术会议(LSTT 2024)

重要信息 会议官网&#xff1a;www.lstt.org 大会时间&#xff1a;2024年12月6-8日 大会地点&#xff1a;中国-广州 大会简介 第六届国际科技创新学术交流大会暨第四届物流系统与交通运输国际学术会议&#xff08;LSTT 2024&#xff09;将于2024年12月6-8日在广州举办&…...

看Threejs好玩示例,学习创新与技术(ogl)

本文标题可能看的你莫名奇妙&#xff0c;什么是ogl&#xff1f;ogl是一个新的三维引擎库&#xff0c;可以简单任务是非常简化的ThreeJS。下面图是它的一个示例&#xff0c;可见虽然它是一个麻雀&#xff0c;但五脏还是比较全的。 1、先说OGL OGL的代码非常简单&#xff0c;主要…...

读书笔记_《创华为.任正非传》_精华书摘

人生经历 43岁&#xff0c;开始创建华为 爷爷:金华火腿乡间厨师 父亲: 1910年生&#xff0c;北平民大经济系读书->职业学校任教->国民党兵工厂会计&#xff0c;组织读书会(读书会后来有很多人在新中国成立后成为高级干部。) 母亲: 高中毕业&#xff0c;乡村教师&#xf…...

4.4 MySQL 触发器(Trigger)

触发器是一种特殊的数据库对象&#xff0c;在特定事件&#xff08;如INSERT、UPDATE或DELETE&#xff09;触发时自动执行定义好的操作。它可以帮助我们实现更高效的数据管理和业务规则的约束。 1. 简介 1.1 什么是触发器 触发器&#xff08;Trigger&#xff09;是由用户定义的…...

遗传算法(Genetic Algorithm, GA)

简介 遗传算法&#xff08;Genetic Algorithm, GA&#xff09;是一种基于自然选择和遗传机制的优化算法&#xff0c;由 John Holland 于20世纪70年代提出。它是一种模拟生物进化过程的启发式搜索算法&#xff0c;被广泛应用于函数优化、机器学习、调度问题等领域。 代码说明 …...

CentOS8.5.2111(7)完整的Apache综合实验

一、实验目标 1.掌握Linux系统中Apache服务器的安装与配置&#xff1b; 2.掌握个人主页、虚拟目录、基于用户和主机的访问控制及虚拟主机的实现方法。 二、实验要求 练习使用linux系统下WEB服务器的配置方法。 三、实验背景 重庆工程学院为筹备“重庆工程大学”特申请了c…...

flink学习(3)——方法的使用—对流的处理(map,flatMap,filter)

map 数据 86.149.9.216 10001 17/05/2015:10:05:30 GET /presentations/logstash-monitorama-2013/images/github-contributions.png 83.149.9.216 10002 17/05/2015:10:06:53 GET /presentations/logstash-monitorama-2013/css/print/paper.css 83.149.9.216 10002 17/05/20…...

Feed流系统重构:架构篇

重构对我而言&#xff0c;最大的乐趣在于解决问题。我曾参与一个C#彩票算奖系统的重构&#xff0c;那时系统常因超时引发用户投诉。接手任务时&#xff0c;我既激动又紧张&#xff0c;连续两天几乎废寝忘食地编码。结果令人振奋&#xff0c;算奖时间从一小时大幅缩短至十分钟。…...

YOLOv11融合[NeurlS2022]递归门控卷积gnconv模块及相关改进思路

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《HorNet: Efficient High-Order Spatial Interactions with Recursive Gated Convolutions》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org…...

java: itext 5.5 create pdf

/*** encoding: utf-8* 版权所有 2024 ©涂聚文有限公司* 许可信息查看&#xff1a; https://github.com/itext/itext-publications-examples-java/blob/develop/src/main/java/com/itextpdf/samples/sandbox/fonts/FreeSansBold.java* 描述&#xff1a;https://mvnreposit…...

EF Core学习笔记二

一、新建.net core的控制台项目 二、安装Entity Framework Core 我们使用的数据库是Sqlite,所以我们需要的程序包是Microsoft.EntityFrameworkCore.Sqlite。 如果想了解更多EF Core NuGet包,请参考:EF Core NuGet 包 | Microsoft Learn Install-Package Microsoft.Entit…...

快速排序【hoare版】

目录 介绍 算法思路 函数实现 函数声明 确定基准值 创建新函数 创建循环找数据&#xff08;right&#xff0c;left&#xff09; 交换左右数据 交换条件设置 外部循坏条件设置 初步总结代码 循环条件完善 内层循环的完善 外层循环的完善 相遇值大于keyi 相遇值等于k…...

day03(单片机高级)RTOS

目录 RTOS(实时操作系统) 裸机开发模式 轮询方式 前后台&#xff08;中断方式&#xff09; 改进&#xff08;前后台&#xff08;中断&#xff09;&#xff09;定时器 裸机进一步优化 裸机的其他问题 RTOS的概念 什么是RTOS 为什么要使用 RTOS RTOS的应用场景 RTOS的…...

vue中v-if和v-show的区别

文章为本菜鸡学习过程中遇到的问题记录&#xff0c;不是专业的&#xff0c;如有问题和不足还请大佬指正 >参考文章 文章目录 前言1、v-if2、v-show3、v-if和v-show的区别 前言 问题描述&#xff1a; 在完成表单验证任务的学习过程中&#xff0c;发现在使用v-show隐藏元素后…...

MacOS通过VMware Fusion安装windows 11问题汇总

环境 虚拟机&#xff0c;VMware Fusion 13.6.1本地机器&#xff0c;ARM芯片的Mac&#xff0c;系统版本14.5Windows系统镜像&#xff0c;Window11 ARM 64 bit 安装卡在WiFi连接界面 适合我本地环境的解决步骤为&#xff1a; 1、系统设置网络共享 我开启的是en5&#xff0c;这…...

Stable Diffusion的解读(二)

Stable Diffusion的解读&#xff08;二&#xff09; 文章目录 Stable Diffusion的解读&#xff08;二&#xff09;摘要Abstract一、机器学习部分1. 算法梳理1.1 LDM采样算法1.2 U-Net结构组成 2. Stable Diffusion 官方 GitHub 仓库2.1 安装2.2 主函数2.3 DDIM采样器2.4 Unet 3…...

十五届蓝桥杯赛题-c/c++ 大学b组

握手问题 很简单&#xff0c;相互牵手即可&#xff0c;但是要注意&#xff0c;第一个人只能与其他49个人牵手&#xff0c;所以开头是加上49 #include <iostream> using namespace std; int main() {int cnt0;for(int i49;i>7;i--){cnti;//cout<<i<<&quo…...

NFS搭建

NFS搭建 单节点安装配置服务器安装配置启动并使NFS服务开机自启客户端挂载查看是否能发现服务器的共享文件夹创建挂载目录临时挂载自动挂载 双节点安装配置服务器安装配置服务端配置NFS服务端配置Keepalived编辑nfs_check.sh监控脚本安装部署RsyncInofity 客户端 单节点安装配置…...

【贪心算法第二弹——2208.将数组和减半的最小操作数】

1.题目解析 题目来源 2208.将数组和减半的最小操作数——力扣 测试用例 2.算法原理(贪心策略) 3.实战代码 class Solution { public:int halveArray(vector<int>& nums) {priority_queue<double> hash;double sum 0.0;for(auto e : nums){hash.push(e);sum …...

ByteBuffer 与 ByteBuf 的对比与优缺点分析

在 Java 网络编程和高性能 I/O 场景中&#xff0c;ByteBuffer 和 ByteBuf 是两种重要的缓冲区处理工具。ByteBuffer 是 Java NIO 标准库的一部分&#xff0c;而 ByteBuf 是由 Netty 框架提供的增强缓冲区工具。在实际开发中&#xff0c;选择哪一种取决于场景需求和性能目标。 …...

SpringBoot 集成 html2Pdf

一、概述&#xff1a; 1. springboot如何生成pdf&#xff0c;接口可以预览可以下载 2. vue下载通过bold如何下载 3. 一些细节&#xff1a;页脚、页眉、水印、每一页得样式添加 二、直接上代码【主要是一个记录下次开发更快】 模板位置 1. 导入pom包 <dependency><g…...