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

C++类和对象入门(三)

目录

前言

一、初始化列表

1.1定义

1.2 格式和语法

1.3与在函数内初始化的区别

1.4使用初始化列表的必要性

1.5成员变量默认值的使用(C++11)

 1.6初始化的先后顺序

1.7初始化列表的总结

二、类型转换

2.1内置类型转化成类类型

2.2类类型之间的相互转换

2.3explicit关键字

2.3.1explicit关键字在内置类型与类类型转换

2.3.2explicit关键字在类类型与类类型转换

三、static成员变量

3.1static变量的特点

3.2static成员函数

3.3static成员函数的访问

3.4static成员变量的初始化

3.5 访问控制与静态成员

3.7static成员函数和成员变量的总结      

结语


前言

        朋友们好,今天在这里继续贯穿C++类和对象的基础知识讲解,大致包括三点:

        初始化列表,类型转换,static成员详解

        那么接下来就让我们一起进入学习吧!


一、初始化列表

1.1定义

        初始化列表是在类的构造函数中,对成员进行初始化的一种特殊机制,初始化列表可以提高效率,尤其是对于一些特殊类型的变量,他是唯一的初始化方式(这个我们后面会讲到)

1.2 格式和语法

        语法:初始化列表是在对应构造函数后面添加一个冒号,接着各个需要初始化的成员以逗号隔开,每个成员的后面都紧跟括号中的初始值或者表达式,例如:

class Myclass
{
public:Myclass(int a, int b);_a(a),_b(b)
private:int _a;int _b;
}

        上面就是直接给类中的两个成员使用初始化列表进行初始化。

        那么问题来了,在构造函数体内部同样可以对成员进行初始化,那么两者的区别和用法又有什么区别呢?

1.3与在函数内初始化的区别

  • 内置类型:对于内置类型(int , char)等类型的变量,使用初始化列表初始化和在函数体内初始化的效率和结果是一模一样的。
  • 类类型:对于类类型的成员,如果没有使用初始化链表进行初始化,那么成员变量会先调用默认构造函数进行初始化,再在函数体内进行赋值,相当于两次初始化操作,例如如下代码:
class Member {
public:Member(int value = 5) : _value(value) {}
private:int _value;
};class A {
public:A(int x) {_member = Member(x);  // 先默认构造后再赋值}
private:Member _member;
};

        上面这个例子,_member会先调用Member的默认构造函数,再在函数体通过X进行赋值,使用初始化列表完全可以写成这样,如下:

class A {
public:A(int x) : _member(x) {  // 直接通过初始化列表初始化}
private:Member _member;
};

        这样_member只初始化了一次,大大减小了性能的开销。 

1.4使用初始化列表的必要性

  • 效率问题:再函数如果出现内部开销比较大,或者内部逻辑不清晰的情况下,使用初始化列表一是可以提高函数的执行效率避免二次初始化,二是可以使得函数的逻辑更加清晰。
  • 必须的情况:对于某些成员变量,如const类型引用类型没有构造函数的类类型成员必须通过初始化列表进行初始化,在函数体内对这些成员进行初始化是不被允许的。
class Time 
{
public:Time(int hour):_hour(hour)
private:int _hour;
}class Myclass 
{
public:Myclass(int a,int& b):_a(a)//_a是一个const类型变量,初始化的时候必须使用初始化列表,_b(b)//_b是一个引用类型变量,初始化的时候必须使用初始化列表,_t(12)//_t是一个类类型变量,初始化的时候必须使用初始化列表
private:const int _a;int& _b;Time _t;   
}

1.5成员变量默认值的使用(C++11)

        在C++11中引入了变量默认值的概念,如果成员变量没有在初始化列表中被显式初始化,那么在这个成员变量在声明的时候,可以通过为它提供一成员变量的默认值来弥补。

class Myclass
{
public:Myclass(int a, int b):_a(a)
private:int _a;int _b = 1;//默认值
}

 1.6初始化的先后顺序

        尽管在初始化列表中,成员的位置可以随意先后出现,但是他的初始化顺序仍然是按照声明中的顺序进行初始化的。 

class Myclass
{
public:Myclass(int a , int b):_a(a),_b(b)//这里初始化的顺序是依照下面的先b后a
private:int _b;int _a;
}

        但是,为了保证代码逻辑的一致性,建议初始化列表的顺序与声明的顺序相同。

1.7初始化列表的总结

  • 每个函数都有初始化列表,即使你没有显式地写出他。
  • 每个成员变量都必须被初始化,即使他没有在初始化列表中显式地初始化。
  • 对于引用类型,const类型,没有默认构造函数的类类型成员,必须在初始化列表中进行初始化。
  • C++11 允许在成员变量声明时提供默认值,这些默认值会在初始化列表中未显式初始化时使用。
  • 初始化顺序取决于成员变量在类中的声明顺序,而不是它们在初始化列表中的顺序。

二、类型转换

        在C++里,类型转换是将一个类型的数据转化成另一个类型的过程。对于类而言,C++允许将内置类型类类型转化成其他类型。

        对于类型转换,可以是显式的,也可以是隐式的,这里面涉及3个知识点:构造函数转换运算符explicit关键字。

2.1内置类型转化成类类型

        C++中,可以通过定义带有内置类型参数的构造函数来将内置类型转化成类类型。

class Myclass
{
public:Myclass(int a)
:_a(a)
private:int _a;
}int main()
{Myclass 10;//将10隐式地转化成了Myclass的类类型
}

        这里的Myclass = 10就是隐式类型转化的常见形式。

2.2类类型之间的相互转换

        如果遇到了一个场景需要类B接受类A的一个类对象,当我们将类A的值直接赋值给B的时候,就会发生下面的类与类之间的隐式类型转换。

class A
{
public:A(int a1):_a1(a)
int Get()const{ return _a;}//const修饰,前文讲过,为了防止权限放大private:int _a;
}
class B
{
public:B (const&A a):_b(a.Get())
private:int _b;
}
int main()
{A obj(10);B obj = A obj;//A类型对象隐式转换成B类型
}

        这是类类型之间的隐式类型转换的常见形式。

2.3explicit关键字

        explicit关键字的作用是防止在隐式类型转换的时候,发生不必要的逻辑错误,用explicit关键字来修饰构造函数,这样可以禁止该构造函数参与隐式类型转换。

2.3.1explicit关键字在内置类型与类类型转换

class Myclass
{
public:explicit Myclass(int a)
:_a(a)
private:int _a;
}int main()
{Myclass = 10;//不能这样写,explicit修饰的构造函数不能参与隐式类型转化Myclaa (10);//正确,需要显式调用构造函数
}

2.3.2explicit关键字在类类型与类类型转换

class A
{
public:explicit A(int a1):_a1(a)
int Get()const{ return _a;}//const修饰,前文讲过,为了防止权限放大private:int _a;
}
class B
{
public:explicit B (const&A a):_b(a.Get())
private:int _b;
}
int main()
{A objA(10);B objB = A obj;//不能这样写,explicit阻止了隐式类型转换B objB(objA);
}

三、static成员变量

        static成员变量,静态变量,他是类的所有对象共享的变量,而不是每个对象独立拥有的。

        静态变量只能存储在静态存储区,也就是全局范围内,并且只能在外部初始化。

3.1static变量的特点

  1. 共享:他不是一个对象专属的,二十所有类的对象都可以共享的。
  2. 独立性:static变量会储存在静态存储区,不会随着对象爱那个的创建和销毁来重新分配内存。
  3. 类外初始化:静态城院变量的初始化只能在类外初始化,不能在类内声明的位置给它赋值。
#include<iostream>
using namespace std;class A {
public:A() {++_scount;  // 每创建一个对象,计数加1}A(const A& t) {++_scount;  // 每调用拷贝构造函数,计数加1}~A() {--_scount;  // 每销毁一个对象,计数减1}static int GetACount() {return _scount;  // 返回当前对象的数量}private:// 声明静态成员变量static int _scount;
};// 类外初始化静态成员变量
int A::_scount = 0;int main() {cout << "初始对象数量: " << A::GetACount() << endl;  // 初始对象数量为 0A a1, a2;  // 创建两个对象,计数加2A a3(a1);  // 拷贝构造,计数加1cout << "当前对象数量: " << A::GetACount() << endl;  // 输出 3return 0;
}

        如前文所述,静态成员变量不单独属于某个对象,每个类A的对象在创建的时候都会给_scount加一,每销毁一个对象就会减一。


3.2static成员函数

        静态成员函数是类里面的一个特殊的成员函数,它并不依赖具体的对象实例,可以通过类明直接调用,静态成员函数没有this指针,因此它只能访问类的静态成员变量或者静态成员函数不能访问非静态成员

示例:

#include<iostream>
using namespace std;class A {
public:A() {++_scount;  }A(const A& t) {++_scount;  }~A() {--_scount; }static int GetACount() {return _scount;  // 静态成员函数}private:// 声明静态成员变量static int _scount;
};// 类外初始化静态成员变量
int A::_scount = 0;int main() {A a1, a2;  // 创建两个对象,计数加2A a3(a1);  // 拷贝构造,计数加1cout << "当前对象数量: " << A::GetACount() << endl;  // 通过类名直接访问静态成员函数return 0;
}

3.3static成员函数的访问

        上文我们已经讲过一种访问方式:通过类名访问。但是其实还有一种访问方式:通过对象访问

int main() {cout <<  A::GetACount() << endl;  // 通过类名直接访问静态成员函数cout <<  a1.GetACount() << endl;return 0;
}

        其实二者的本质是相同的,都是通过类来访问静态成员函数。

3.4static成员变量的初始化

        静态成员变量不能再类内进行初始化,只能在类外进行初始化。

        因为静态成员变量储存在静态区中,而不是在对象中,由于静态成员变量的共享性,它们只在整个程序中存在一份,因此必须在类外进行初始化,以确保所有对象访问的都是同一份数据。

3.5 访问控制与静态成员

        静态成员与普通成员一样,也受访问控制修饰符publicprotectedprivate)的限制。即使静态成员属于类,而不是对象,但它们仍然需要遵守访问控制规则。

class A {
private:static int _private_count;public:static int GetPrivateCount() {return _private_count;  // 只能通过成员函数访问}
};int A::_private_count = 0;int main() {// cout << A::_private_count;  // 错误,无法访问 private 静态成员cout << A::GetPrivateCount() << endl;  // 通过静态成员函数访问return 0;
}

3.7static成员函数和成员变量的总结      

        在C++中,static成员为类提供了管理全局数据和类级别操作的强大机制。静态成员变量被所有对象共享,存储在静态存储区中,而静态成员函数则可以在没有对象的情况下通过类名直接调用。静态成员与普通成员一样,受访问控制修饰符的限制,可以是public、private或protected。同时,静态成员变量不能在类内初始化,必须在类外进行初始化。通过静态成员,我们可以方便地实现对象计数、全局状态管理等功能,这让类在不依赖对象实例的情况下,依然能够提供有用的功能。


结语

        至此,本文介绍的关于C++入门的部分知识正式结束,日后我会更新更多关于C++的基础入门知识,如果本文能帮助到阅读文章的你,就请点赞转发收藏吧,您的支持也是我继续学习和更新的动力,感谢支持!!

        

相关文章:

C++类和对象入门(三)

目录 前言 一、初始化列表 1.1定义 1.2 格式和语法 1.3与在函数内初始化的区别 1.4使用初始化列表的必要性 1.5成员变量默认值的使用&#xff08;C11&#xff09; 1.6初始化的先后顺序 1.7初始化列表的总结 二、类型转换 2.1内置类型转化成类类型 2.2类类型之间的相…...

Ubuntu 下 Docker 企业级运维指南:核心命令与最佳实践深度解析20250309

Ubuntu 下 Docker 企业级运维指南&#xff1a;核心命令与最佳实践深度解析 在当今的数字化时代&#xff0c;Docker 已成为企业应用部署和运维的基石。其轻量级、高效且灵活的容器化技术&#xff0c;为企业带来了前所未有的敏捷性和可扩展性。然而&#xff0c;随着容器化应用的…...

Tensorflow 2.0 GPU的使用与限制使用率及虚拟多GPU

Tensorflow 2.0 GPU的使用与限制使用率及虚拟多GPU 1. 获得当前主机上特定运算设备的列表2. 设置当前程序可见的设备范围3. 显存的使用4. 单GPU模拟多GPU环境 先插入一行简单代码&#xff0c;以下复制即可用来设置GPU使用率&#xff1a; import tensorflow as tf import numpy…...

【PyCharm】Python和PyCharm的相互关系和使用联动介绍

李升伟 整理 Python 是一种广泛使用的编程语言&#xff0c;而 PyCharm 是 JetBrains 开发的专门用于 Python 开发的集成开发环境&#xff08;IDE&#xff09;。以下是它们的相互关系和使用联动的介绍&#xff1a; 1. Python 和 PyCharm 的关系 Python&#xff1a;一种解释型、…...

动态规划:多重背包

本题力扣上没有原题&#xff0c;大家可以去卡码网第56题 (opens new window)去练习&#xff0c;题意是一样的。 56. 携带矿石资源&#xff08;第八期模拟笔试&#xff09; 题目描述 你是一名宇航员&#xff0c;即将前往一个遥远的行星。在这个行星上&#xff0c;有许多不同类…...

AI编程: 一个案例对比CPU和GPU在深度学习方面的性能差异

背景 字节跳动正式发布中国首个AI原生集成开发环境工具&#xff08;AI IDE&#xff09;——AI编程工具Trae国内版。 该工具模型搭载doubao-1.5-pro&#xff0c;支持切换满血版DeepSeek R1&V3&#xff0c; 可以帮助各阶段开发者与AI流畅协作&#xff0c;更快、更高质量地完…...

TensorFlow 的基本概念和使用场景

TensorFlow 是一个由 Google 开发的开源深度学习框架&#xff0c;用于构建和训练机器学习模型。它的基本概念包括以下几点&#xff1a; 张量&#xff08;Tensor&#xff09;&#xff1a;在 TensorFlow 中&#xff0c;数据以张量的形式表示&#xff0c;张量可以是多维数组&#…...

gRPC学习笔记

微服务 一旦某个服务器宕机&#xff0c;会引起整个应用不可用&#xff0c;隔离性差 只能整体应用进行伸缩&#xff0c;浪费资源&#xff0c;可伸缩性差 代码耦合在一起&#xff0c;可维护性差 微服务架构&#xff1a;解决了单体架构的弊端 可以按照服务进行单独扩容 各个…...

Linux常见指令

Linux常见指令 1、ls指令2、pwd命令3、cd指令4、touch指令5、mkdir指令6、rmdir指令和rm指令7、man指令8、cp指令9、mv指令10、cat指令11、重定向12、more指令13、less指令14、head指令15、tail指令16、管道17、时间相关指令18、cal指令19、find指令20、grep指令21、zip/unzip指…...

Vue3、vue学习笔记

<!-- Vue3 --> 1、Vue项目搭建 npm init vuelatest cd 文件目录 npm i npm run dev // npm run _ 这个在package.json中查看scripts /* vue_study\.vscode可删 // vue_study\src\components也可删除(基本语法&#xff0c;不使用组件) */ // vue_study\.vscode\lau…...

用OpenCV写个视频播放器可还行?(C++版)

引言 提到OpenCV&#xff0c;大家首先想到的可能是图像处理、目标检测&#xff0c;但你是否想过——用OpenCV实现一个带进度条、倍速播放、暂停功能的视频播放器&#xff1f;本文将通过一个实战项目&#xff0c;带你深入掌握OpenCV的视频处理能力&#xff0c;并解锁以下功能&a…...

clion+arm-cm3+MSYS-mingw +jlink配置用于嵌入式开发

0.前言 正文可以跳过这段 初识clion&#xff0c;应该是2015年首次发布的时候&#xff0c; 那会还是大三&#xff0c;被一则推介广告吸引到&#xff0c;当时还在用vs studio&#xff0c;但是就喜欢鼓捣新工具&#xff0c;然后下载安装试用了clion&#xff0c;但是当时对cmake规…...

物联网-IoTivity:开源的物联网框架

IoTivity 是一个开源的物联网(IoT)框架,旨在为物联网设备提供互操作性、安全性和可扩展性。它由 Open Connectivity Foundation (OCF) 主导开发,遵循 OCF 的标准,致力于实现设备之间的无缝连接和通信。IoTivity 提供了一个统一的框架,支持设备发现、数据交换、设备管理和…...

Acrobat DC v25.001 最新专业版已破,像word一样编辑PDF!

在数字化时代&#xff0c;PDF文件以其稳定性和通用性成为了文档交流和存储的热门选择。无论是阅读、编辑、转换还是转曲&#xff0c;大家对PDF文件的操作需求日益增加。因此&#xff0c;一款出色的PDF处理软件不仅要满足多样化的需求&#xff0c;还要通过简洁的界面和强大的功能…...

【c++】模板进阶

在前面我们学习了模板的基础用法【c】 模板初阶-CSDN博客初步认识了函数模板和类模板&#xff0c;接下来让我们看看模板还有哪些进阶的应用。 非类型模板参数 之前我们用到的模板全都使用了类型参数 类型参数&#xff1a;表示某种数据类型&#xff08;如 int、double、自定义…...

IntelliJ IDEA 2021版创建springboot项目的五种方式

第一种方式&#xff0c;通过https://start.spring.io作为spring Initializr的url来创建项目。 第二种方式&#xff0c;通过https://start.spring.io官网来直接创建springboot项目压缩包&#xff0c;然后导入至我们的idea中。 点击generate后&#xff0c;即可生成压缩包&#xf…...

数字信号处理之信号功率谱计算welch方法(分段加窗平均周期图)、Bartlett方法(周期图)(Python)

welch方法原理说明 welch方法[1]通过将数据划分为重叠的段&#xff0c;计算每个段的进行修改(加窗)后的周期图&#xff0c;然后对所有段的周期图求和进行平均&#xff0c;得到最终的功率谱密度。 Python和Matlab中均存在welch函数。welch函数通过配置noverlap为0&#xff0c;可…...

【面试】Java 基础

基础 1、Java 中几种基本数据类型什么&#xff0c;各自占用多少字节2、基本数据同包装类的区别3、Java 基本类型的参数传递和引用类型的参数传递有啥区别4、隐式类型转换和显式类型转换5、switch 语句表达式结果的类型6、数组的扩容方式7、面向对象三大特征8、静态变量和成员变…...

【工具使用】IDEA 社区版如何创建 Spring Boot 项目(详细教程)

IDEA 社区版如何创建 Spring Boot 项目&#xff08;详细教程&#xff09; Spring Boot 以其简洁、高效的特性&#xff0c;成为 Java 开发的主流框架之一。虽然 IntelliJ IDEA 专业版提供了Spring Boot 项目向导&#xff0c;但 社区版&#xff08;Community Edition&#xff09…...

CTFHub-FastCGI协议/Redis协议

将木马进行base64编码 <?php eval($_GET[cmd]);?> 打开kali虚拟机&#xff0c;使用虚拟机中Gopherus-master工具 Gopherus-master工具安装 git clone https://github.com/tarunkant/Gopherus.git 进入工具目录 cd Gopherus 使用工具 python2 "位置" --expl…...

【Python字符串】\n是什么?它与raw字符串、多行字符串的运用有什么关系?

李升伟 整理 在Python中&#xff0c;\n 是换行符&#xff0c;用于在字符串中表示新的一行。当你在字符串中使用 \n 时&#xff0c;Python 会在该位置插入一个换行符&#xff0c;使得输出在 \n 处换行。 1. 普通字符串中的 \n 在普通字符串中&#xff0c;\n 会被解释为换行符…...

Linux 配置静态 IP

一、简介 在 Linux CentOS 系统中默认动态分配 IP 地址&#xff0c;每次启动虚拟机服务都是不一样的 IP&#xff0c;因此要配置静态 IP 地址避免每次都发生变化&#xff0c;下面将介绍配置静态 IP 的详细步骤。 首先先理解一下动态 IP 和静态 IP 的概念&#xff1a; 动态 IP…...

git lfs使用方法指南【在github保存100M以上大文件】

为了在 GitHub 仓库中存储超过 100MB 的大文件并避免推送失败&#xff0c;使用 Git LFS&#xff08;Large File Storage&#xff09; 是最佳解决方案。以下是详细步骤&#xff1a; 一、安装 Git LFS 下载并安装 Git LFS&#xff1a; 访问 Git LFS 官网 下载对应系统的安装包。或…...

【Linux】初识线程

目录 一、什么是线程&#xff1a; 重定义线程和进程&#xff1a; 执行流&#xff1a; Linux中线程的实现方案&#xff1a; 二、再谈进程地址空间 三、小结&#xff1a; 1、概念&#xff1a; 2、进程与线程的关系&#xff1a; 3、线程优点&#xff1a; 4、线程…...

【Linux学习笔记】Linux基本指令分析和权限的概念

【Linux学习笔记】Linux基本指令分析和权限的概念 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Linux学习笔记 文章目录 【Linux学习笔记】Linux基本指令分析和权限的概念前言一. 指令的分析1.1 alias 指令1.2 grep 指令1.3 zip/unzip 指…...

uniapp登录用户名在其他页面都能响应

使用全局变量 1、在APP.vue中定义一个全局变量&#xff0c;然后在需要的地方引用它&#xff1b; <script>export default {onLaunch: function() {console.log(App Launch)this.globalData { userInfo: {} };},onShow: function() {console.log(App Show)},onHide: fu…...

ESP8266 入门(第 2 部分):使用 AT 命令

使用 AT 命令对 WiFi 收发器ESP8266编程 本教程是上一个教程 ESP8266 入门(第 1 部分)的延续。因此,简单回顾一下,在之前的教程中,我们介绍了 ESP 模块,并学习了一些基础知识。我们还使用 FTDI 串行适配器模块制作了一个开发板,该模块可以很容易地用于使用 AT 命令和 A…...

介绍一下Qt 中的QSizePolicy 布局策略

在 Qt 中&#xff0c;QSizePolicy 类用于描述一个控件在布局中如何分配空间&#xff0c;它定义了控件在水平和垂直方向上对空间的需求和响应策略。以下是对 QSizePolicy 策略的详细介绍&#xff1a; 基本概念 QSizePolicy 包含两个主要的属性&#xff1a;Policy&#xff08;策…...

从ETL到数仓分层:大数据处理的“金字塔”构建之道

在当今数据驱动的时代&#xff0c;大数据处理已成为企业决策和业务优化的核心。而ETL&#xff08;Extract, Transform, Load&#xff09;作为数据处理的基石&#xff0c;其背后的数仓分层理念更是决定了数据处理的效率与质量。本文将深入探讨ETL工作中的数仓分层理念&#xff0…...

springBoot集成声明式和编程式事务的方式

一、声明式事务 前提集成了mybatisplus插件 1、pom依赖 <dependencies><!-- MyBatis-Plus 启动器 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.4&l…...

前端实现版本更新自动检测✅

&#x1f916; 作者简介&#xff1a;水煮白菜王&#xff0c;一位资深前端劝退师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 前端专栏 &#xff0c;记录一下平时在博客写作中&#xff0c;总结出的一些开发技巧和知识归纳总结✍。 感谢支持&#x1f495;&#x1f495;&a…...

Python零基础学习第三天:函数与数据结构

一、函数基础 函数是什么&#xff1f; 想象你每天都要重复做同一件事&#xff0c;比如泡咖啡。函数就像你写好的泡咖啡步骤说明书&#xff0c;每次需要时直接按步骤执行&#xff0c;不用重新想流程。 # 定义泡咖啡的函数 def make_coffee(sugar1): # 默认加1勺糖 print("…...

深入了解Linux —— 调试程序

前言 我们已经学习了linux下许多的工具&#xff0c;vim、gcc、make/makefile等&#xff1b; 已经能够在linux写代码&#xff0c;并且进行编译运行&#xff0c;让程序在linux下跑起来。 但是&#xff0c;如果我们在写代码的时候遇见了错误&#xff1b;但是我们并不知道错误在哪&…...

解决VScode 连接不上问题

问题 &#xff1a;VScode 连接不上 解决方案&#xff1a; 1、手动杀死VS Code服务器进程&#xff0c;然后重新尝试登录 打开xshell &#xff0c;远程连接服务器 &#xff0c;查看vscode的进程 &#xff0c;然后全部杀掉 [cxqiZwz9fjj2ssnshikw14avaZ ~]$ ps ajx | grep vsc…...

行式数据库与列式数据库区别

列式数据库&#xff08;Columnar Database&#xff09;和行式数据库&#xff08;Row-based Database&#xff09;是两种不同的数据存储和检索方式&#xff0c;它们在数据组织、存储结构和适用场景上有显著区别。以下是对两者的详细对比&#xff1a; 1. 数据存储方式 行式数据库…...

如何将本地已有的仓库上传到gitee (使用UGit)

1、登录Gitee。 2、点击个人头像旁边的加号&#xff0c;选择新建仓库&#xff1a; 3、填写仓库相关信息 4、复制Gitee仓库的地址 5、绑定我们的本地仓库与远程仓库 6、将本地仓库发布&#xff08;推送&#xff09;到远程仓库&#xff1a; 注意到此处报错&#xff…...

FIWARE:开源的物联网平台,支持设备虚拟化和数据管理

FIWARE 是一个开源的物联网(IoT)平台,旨在为物联网应用提供强大的数据管理和设备虚拟化功能。FIWARE 提供了一系列通用的 API 和组件,支持设备管理、数据采集、数据处理、数据共享和安全通信等功能,使得开发者能够快速构建和扩展物联网解决方案。以下是 FIWARE 的核心功能…...

RISC-V汇编学习(三)—— RV指令集

有了前两节对于RISC-V汇编、寄存器、汇编语法等的认识&#xff0c;本节开始介绍RISC-V指令集和伪指令。 前面说了RISC-V的模块化特点&#xff0c;是以RV32I为作为ISA的核心模块&#xff0c;其他都是要基于此为基础&#xff0c;可以这样认为&#xff1a;RISC-V ISA 基本整数指…...

【Linux】冯诺依曼体系与操作系统理解

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;Linux 目录 前言 一、冯诺依曼体系结构 二、操作系统 1. 操作系统的概念 2. 操作系统存在的意义 3. 操作系统的管理方式 4. 补充&#xff1a;理解系统调用…...

Android15使用FFmpeg解码并播放MP4视频完整示例

效果: 1.编译FFmpeg库: 下载FFmpeg-kit的源码并编译生成安装平台库 2.复制生成的FFmpeg库so文件与包含目录到自己的Android下 如果没有prebuiltLibs目录,创建一个,然后复制 包含目录只复制arm64-v8a下...

音视频入门基础:RTP专题(16)——RTP封装音频时,音频的有效载荷结构

一、引言 《RFC 3640》和《RFC 6416》分别定义了两种对MPEG-4流的RTP封包方式&#xff0c;这两个文档都可以从RFC官网下载&#xff1a; RFC Editor 本文主要对《RFC 3640》中的音频打包方式进行简介。《RFC 3640》总共有43页&#xff0c;本文下面所说的“页数”是指在pdf阅读…...

3.3.2 Proteus第一个仿真图

文章目录 文章介绍0 效果图1 新建“点灯”项目2 添加元器件3 元器件布局接线4 补充 文章介绍 本文介绍&#xff1a;使用Proteus仿真软件画第一个仿真图 0 效果图 1 新建“点灯”项目 修改项目名称和路径&#xff0c;之后一直点“下一步”直到完成 2 添加元器件 点击元…...

MySQL创建数据库和表,插入四大名著中的人物

一、登录数据库并创建数据库db_ck 二、创建表t_hero 表属性包括&#xff08;id&#xff0c;name&#xff0c;nickname&#xff0c;age&#xff0c;gender&#xff0c;address&#xff0c;weapon&#xff0c;types&#xff09; mysql> create table t_hero(-> id int,-…...

matlab和FPGA联合仿真时读写.txt文件数据的方法

在FPGA开发过程中&#xff0c;往往需要将MATLAB生成的数据作为原始激励灌入FPGA进行仿真。为了验证FPGA计算是否正确&#xff0c;又需要将FPGA计算结果导入MATLAB绘图与MATLAB计算结果对比。 下面是MATLAB“写.txt”、“读.txt”&#xff0c;Verilog“读.txt”、“写.txt”的代…...

C++修炼之路:初识C++

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 引言 …...

ACE协议学习1

在多核系统或复杂SoC&#xff08;System on Chip&#xff09;中&#xff0c;不同处理器核心或IP&#xff08;Intellectual Property&#xff09;模块之间需要保持数据的一致性。常用的是ACE协议or CHI。 先对ACE协议进行学习 ACE协议&#xff08;Advanced Microcontroller Bu…...

通俗易懂的介绍LLM大模型技术常用专业名词(通用版)

1. 神经网络 (Neural Network) 解释: 一种模拟人脑神经元结构的计算模型&#xff0c;用于处理复杂的数据模式。 示例: 图像识别中的卷积神经网络&#xff08;CNN&#xff09;。 2. 深度学习 (Deep Learning) 解释: 基于多层神经网络的机器学习方法&#xff0c;能够自动提取数…...

深度学习环境安装

Anaconda 3.0 下载地址 Download Success | Anaconda CUDA 下载地址 cuda_12.4.0 https://developer.nvidia.com/cuda-12-4-0-download-archive?target_osWindows&target_archx86_64&target_version11&target_typeexe_local pytorch 下载地址 &#xff08;2…...

【哇! C++】类和对象(五) - 赋值运算符重载

目录 ​编辑 一、运算符重载 1.1 运算符重载概念 1.2 全局运算符重载 1.3 运算符重载为成员函数 二、赋值运算符重载的特性 2.1 赋值运算符重载需要注意的点 2.2 赋值运算符重载格式 2.2.1 传值返回 2.2.2 传引用返回 2.2.3 检查自己给自己赋值 三、赋值运算符重载的…...

【时序图】1.StarUML绿化

1)下载地址 官网: StarUML 如下: 2)绿化 step1:用管理员打开cmd&#xff0c;执行如下 npm install -g asar cd C:\Program Files\StarUML\resources //进入到StarUML的默认安装目录下面 asar extract app.asar app //反编译软件step2:把resources下的app文件夹拷贝出来到…...