关于一些C++、Qt、Python方面的术语
杂鱼之前纯粹用python没细致理解过的术语整理一下,常看常新(
定义 (Definition):
定义是指给一个实体分配内存空间,以便在程序中使用。在C++和Python中,这个实体可以是变量、函数或类。在C++中,定义通常是在声明之后实现实体的内容。
例如f(int a, int b)
// 定义整数变量x
int x;// 定义函数add,计算两个整数的和
int add(int a, int b) {return a + b;
}
# 定义整数变量x
x = 10# 定义函数add,计算两个整数的和
def add(a, b):return a + b
声明 (Declaration):
声明是指在程序中声明实体的存在,但不为其分配内存空间。在C++和Python中,这允许在使用实体之前提前告诉编译器或解释器实体的名称和类型。
例如f(int, int)
// 声明整数变量y
extern int y;// 声明函数add,用于计算两个整数的和
int add(int a, int b);
Python不需要显式声明
实例 (Instance):
实例是类的一个具体对象。在C++和Python中,实例化是创建一个类的实例,并在内存中分配空间以存储其属性和方法。
// 定义一个简单的类Person
class Person {
public:int age;
};// 创建Person类的实例p1
Person p1;
p1.age = 30; // 设置实例p1的age属性为30
# 定义一个简单的类Person
class Person:pass# 创建Person类的实例p1
p1 = Person()
p1.age = 30 # 设置实例p1的age属性为30
调用 (Call):
调用是指执行函数或方法的过程。在C++和Python中,通过使用函数或方法的名称和适当的参数来调用它。
例如f(a, b)
// 定义函数multiply,计算两个整数的乘积
int multiply(int a, int b) {return a * b;
}// 调用函数multiply,并将结果存储在变量result中
int result = multiply(5, 3);
# 定义函数multiply,计算两个整数的乘积
def multiply(a, b):return a * b# 调用函数multiply,并将结果存储在变量result中
result = multiply(5, 3)
继承 (Inheritance):
继承是面向对象编程中的重要概念,允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。
// 定义一个基类Animal
class Animal {
public:void makeSound() {cout << "Some generic sound" << endl;}
};// 定义一个派生类Dog,继承自Animal
class Dog : public Animal {
public:void makeSound() {cout << "Woof! Woof!" << endl;}
};// 创建Dog类的实例d1,并调用其makeSound方法
Dog d1;
d1.makeSound(); // 输出:Woof! Woof!
# 定义一个基类Animal
class Animal:def makeSound(self):print("Some generic sound")# 定义一个派生类Dog,继承自Animal
class Dog(Animal):def makeSound(self):print("Woof! Woof!")# 创建Dog类的实例d1,并调用其makeSound方法
d1 = Dog()
d1.makeSound() # 输出:Woof! Woof!
Animal是Dog的父类项
封装 (Encapsulation):
封装是一种面向对象编程的概念,指将数据和代码封装在一个单元内,并对外部隐藏实现细节。这样可以确保数据的安全性并简化代码的使用。
class Person {
private:int age;public:void setAge(int newAge) {age = newAge;}int getAge() {return age;}
};// 创建Person类的实例p1
Person p1;
p1.setAge(25);
int currentAge = p1.getAge(); // 通过公共方法访问私有属性age
在Python中,没有严格的访问控制,但通过约定将属性定义为私有的并提供公共方法来实现封装。
打包 (Packaging):
打包是指将相关的模块和资源组织在一起,以便于发布、安装和使用。在C++中,打包通常指将相关的类、头文件和源文件组织在一起形成库文件。在Python中,打包通常指将模块组织在包中,以便于发布和安装。
在C++中的打包示例:使用C++的SDK (Software Development Kit) 创建一个库文件。
在Python中的打包示例:将相关模块组织在一个文件夹中,并在文件夹中包含一个__init__.py文件,使其成为一个包。
构造函数 (Constructor):
构造函数是在创建类的实例时自动调用的特殊方法,用于初始化对象的属性和状态。在C++中,构造函数的名称与类名相同,在Python中使用__init__方法作为构造函数。
class Person {
public:int age;// 构造函数Person() {age = 0;}Person(int initialAge) {age = initialAge;}
};// 创建Person类的实例p1,并调用带参数的构造函数
Person p1(30);
class Person:def __init__(self):self.age = 0def __init__(self, initialAge):self.age = initialAge# 创建Person类的实例p1,并调用带参数的构造函数
p1 = Person(30)
:: (Scope Resolution Operator):
在C++中,::是范围解析运算符,用于指定在特定范围内查找标识符(如类的成员变量或方法)。它也用于访问命名空间中的元素。
在Python中没有::运算符,因为Python使用点(.)作为范围解析运算符。
发射 (Signal) 与 emit:
在Qt中,发射(Signal)是一种用于在对象之间发送消息的机制。信号是特殊的成员函数,当特定事件发生时,可以通过emit关键字发射该信号。其他对象可以连接到这些信号并在信号发射时执行相关的槽函数。
class MyButton : public QPushButton {Q_OBJECTsignals:void clickedWithCount(int count);public slots:void onButtonClick() {static int clickCount = 0;clickCount++;emit clickedWithCount(clickCount);}
};// 创建MyButton的实例,并连接到槽函数
MyButton button;
QObject::connect(&button, &MyButton::clickedWithCount, [](int count) {cout << "Button clicked " << count << " times" << endl;
});button.click(); // 触发信号,槽函数输出 "Button clicked 1 times"
button.click(); // 触发信号,槽函数输出 "Button clicked 2 times"
在Python中,没有显式的信号和槽机制,但可以使用Qt for Python中的信号和槽模块来实现类似的功能。
信息与槽函数是Qt中的一种机制,用于在对象之间进行通信。一个对象发出一个信号(信息),而其他对象连接到该信号的槽函数上,当信号被发出时,槽函数将被执行。
在上面的Qt示例中,clickedWithCount是一个信号,而onButtonClick是一个槽函数。
SDK (Software Development Kit):
SDK是软件开发工具包的缩写,是一个用于开发应用程序的集合,通常包括库、API文档、示例代码和工具。SDK可以帮助开发者更容易地使用特定平台或框架的功能。
在C++和Qt中,Qt SDK是一套用于开发跨平台应用程序的工具包,包括Qt库、Qt Creator IDE、Qt文档等。
在Python中,Python SDK(也称为Python标准库)是Python语言的核心库,提供了许多内置模块和函数,用于执行各种任务。
动态 (Dynamic) 与 静态 (Static):
动态和静态通常用于描述语言或类型系统的性质。
动态语言(如Python):变量类型在运行时确定,不需要显式声明类型,具有更大的灵活性,但在某些情况下可能导致运行时错误。
静态语言(如C++):变量类型在编译时确定,需要显式声明类型,更加严格和类型安全,但可能会导致编写代码更繁琐。
在C++中,变量可以具有静态或动态存储持续时间,这与变量的生命周期和作用域有关。在Python中,变量是动态类型的,类型在运行时由解释器推断。
修饰词
修饰词用于控制类中成员的访问权限和特性。它们帮助实现封装、继承和多态等面向对象编程的概念。
public:
在C++和Qt中,public修饰符用于指定类成员的公共访问权限。公共成员可以在类的内部和外部访问,包括类的对象和其他类。
在C++中的示例:
class MyClass {
public:int publicVar;void publicMethod() {// code here}
};
在Qt中的示例:
class MyClass : public QObject {Q_OBJECTpublic:int publicVar;void publicMethod() {// code here}
signals:void mySignal();
};
在Python中,类的成员默认是公共的,没有显式的public关键字。
protected:
在C++和Qt中,protected修饰符用于指定类成员的保护访问权限。保护成员可以在类的内部和派生类中访问,但不能在类的外部访问。
在C++中的示例:
class MyClass {
protected:int protectedVar;void protectedMethod() {// code here}
};
在Qt中,由于信号和槽机制的特殊需求,Qt中的信号必须定义在protected或public部分。
在Python中,没有显式的protected关键字,但可以通过在属性或方法名称前添加一个下划线来暗示保护属性或方法。
private:
在C++和Qt中,private修饰符用于指定类成员的私有访问权限。私有成员只能在类的内部访问,无法在类的外部和派生类中直接访问。
在C++中的示例:
class MyClass {
private:int privateVar;void privateMethod() {// code here}
};
在Qt中的示例:
class MyClass : public QObject {Q_OBJECTprivate:int privateVar;void privateMethod() {// code here}
};
在Python中,通过在属性或方法名称前添加两个下划线来实现类似的效果,即将属性或方法变为私有。
signal 与 slot:
在Qt中,signal是用于发射消息的特殊成员函数,用于实现信息与槽机制。它只声明,不定义,因为它是由Qt的元对象系统处理的。signal用于发出通知,而slot是用于接收通知的槽函数。
在C++和Qt中的示例:
class MyClass : public QObject {Q_OBJECTsignals:void mySignal();public slots:void mySlot() {// code here}
};
在Python中,没有直接的信号和槽机制。但是,通过使用PyQt或PySide这样的Qt for Python库,可以使用相似的信号和槽机制。
——————————————————
有定义声明调用的例子:
#include <iostream>// 函数声明,只需写参数类型
int add(int, int);// 函数定义,实现两个整数相加的功能
int add(int a, int b) {return a + b;
}int main() {a = 5;b = 3;// 函数调用,传递参数值并获得返回结果int result = add(a, b);// 输出结果std::cout << "Result: " << result << std::endl;return 0;
}
指针、地址
指针是一个重要的概念,涉及到内存地址和数据类型。让我们逐步解释以下术语:
指针 (Pointer):
指针是一个变量,其值为内存地址,即某个数据在计算机内存中的位置。指针可以指向任何数据类型的变量,包括基本数据类型、数组、结构体、类等。
取地址 (&):
在C++中,使用&运算符可以获取变量的内存地址,即变量的指针。例如,对于变量a,&a表示a的内存地址。
int a = 10;
int* ptr = &a; // 获取变量a的地址,并将其赋值给指针ptr*a:
在C++中,*号用于两个不同的情况:
a. 定义指针变量:例如,int* ptr; 定义了一个指向整数的指针变量ptr。
b. 解引用操作:例如,*ptr 表示获取指针ptr指向地址的值。这个过程称为解引用,它允许我们访问指针指向地址的数据。int a = 10;
int* ptr = &a; // 定义指向整数的指针ptr,并将其指向a的地址
int value = *ptr; // 解引用ptr,获取a的值,value现在为10
&a:
&a表示变量a的地址,它是一个指向a的指针。指针的使用:
指针通常用于动态内存分配、函数参数传递、数组操作等。它们使得我们能够在程序运行时管理内存和操作数据。int main() {int a = 10;int* ptr = &a; // ptr指向变量a的地址*ptr = 20; // 解引用ptr并将新的值20赋给astd::cout << "a: " << a << std::endl; // 输出20,因为通过ptr修改了a的值return 0;
}
上述示例定义了一个指向整数的指针ptr,它指向变量a的地址。通过解引用指针ptr,我们可以修改a的值。修改了指针指向的值也就修改了指针所指向的变量。
相关文章:

关于一些C++、Qt、Python方面的术语
杂鱼之前纯粹用python没细致理解过的术语整理一下,常看常新( 定义 (Definition): 定义是指给一个实体分配内存空间,以便在程序中使用。在C和Python中,这个实体可以是变量、函数或类。在C中,定义通常是在声…...

k8s中强制删除pv
K8s 集群内有一个已经不再使用的 PV,虽然已经删除了与其关联的 Pod 及 PVC,并对其执行了删除命令,但仍无法正常删除,一直处于 Terminating 状态: 解决办法: 1. 获取pv信息 kubectl get pv 2. 解除pv锁定 …...

60寸透明屏的透明度怎么样?
60寸透明屏是一种新型的显示屏技术,它具有透明度高、色彩鲜艳、清晰度高等特点,可以广泛应用于商业展示、户外广告、智能家居等领域。 首先,60寸透明屏的透明度高。 透明屏采用了特殊的材料和技术,使得屏幕在显示内容的同时&…...

Python:使用openpyxl读取Excel文件转为json数据
文档 https://openpyxl.readthedocs.io/en/stable/https://pypi.org/project/openpyxl/ 安装 pip install openpyxl环境 $ python --version Python 3.7.0读取文件示例:将Excel文件读取为json数据 有如下一个文件 data.xlsx 实现代码 # -*- coding: utf-8 -…...

在Microsoft Excel中如何快速合并表格
在 Excel 中分析数据时,在一个工作表中收集所有必要信息的频率是多少?几乎从来没有!当不同的数据分散在许多工作表和工作簿中时,这是一种非常常见的情况。幸运的是,有几种不同的方法可以将多个表中的数据组合成一个表&…...

【RS】基于规则的面向对象分类
ENVI使用最多的工具就是分类,这也是很多卫星影像的用途。在ENVI中有很多分类工具,如最基础的监督分类(最大似然法、最小距离、支持向量机、随机森林)、非监督分类(K-means、IsoData),还有面向对…...

SWF格式视频怎么转换成AVI格式?简单的转换方法分享
当你想要在不同的设备上播放视频时,将SWF格式视频转换成AVI格式是非常有用的。因为SWF格式通常只能在特定的软件或网页上播放,而AVI格式则可以在更广泛的设备上播放,包括智能手机,平板电脑和电视机等。那么我们怎么将SWF转换成AVI…...

Hive数据仓库
数据仓库概念与起源发展由来 数仓概念 数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面相分析的集成化数据环境,分析结果为企业提供决策支持…...

公网访问的Linux CentOS本地Web站点搭建指南
文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道,指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 前言 在web项目中,部署的web站点需要被外部访问,则…...

ChatGPT:人机交互新境界,AI智能引领未来
一、ChatGPT:智能交流的新标杆 ChatGPT是基于GPT技术的最新版本,拥有深度学习模型的基因。它通过在大量数据上进行预训练,可以理解和生成自然语言,从而实现了与人类更加自然流畅的对话和交流。 二、ChatGPT的技术背景和工作原理 …...

微信小程序值相同的数据,一个数据setDate修改后,另一个值相同的数据也会修改
在js中一个基础类型可以直接赋值,引用类型直接赋值会指向同一个值(原理是浅拷贝和深拷贝) 解决问题代码:JSON.parse(JSON.stringify(json)) ↓ let json {0: [false, false],1: [true, false] } this.setData({timeList: JSON.…...

Spring5学习笔记 — IOC
✅作者简介:大家好,我是Cisyam,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Cisyam-Shark的博客 💞当前专栏: Spring专栏 ✨特色专栏&a…...

DevOps自动化平台开发之 Shell脚本执行的封装
基础知识 基于如下技术栈开发DevOps平台 Spring Boot Shell Ansible Git Gitlab Docker K8S Vue 1、spring boot starter的封装使用 2、Shell脚本的编写 3、Ansible 脚本的编写 4、Docker 的使用与封装设计 本篇介绍如何使用Java封装Linux命令和Shell脚本的使用 将其设计成…...

STM32CubeIDE(I2C)
目录 一、IIC轮询模式 1.1 配置 1.2 编写AHT20驱动 1.2.1 aht20.h 1.2.2 aht20.c 二、I2C中断 2.1 打开中断 2.2 分离读取流程 2.3 在主函数中重新编写读取流程 2.4 在i2c.c中重新定义stm32f1xx_hal_i2c.h中的两个函数 三、I2CDMA 3.1 配置DMA通道 3.2 代码的修改 一…...

http 请求报文响应报文的格式以及Token cookie session 区别
面试必备 http 请求报文响应报文的格式Token cookie session 区别 http 请求报文响应报文的格式 HTTP 请求报文和响应报文的格式如下: HTTP 请求报文格式: <方法> <路径> <协议版本> <请求头部字段1>: <值1> <请求头…...

智能汽车的主动悬架工作原理详述
摘要: 本文将详细介绍主动悬架功能原理设计。 主动悬架是车辆上的一种汽车悬架。它使用车载系统来控制车轮相对于底盘或车身的垂直运动,而不是由大弹簧提供的被动悬架,后者的运动完全由路面决定。主动悬架分为两类:真正的主动悬架…...

vue2和vue3的一些技术点复习
二、vue2 1、vue2对已有组件二次封装,例如fes2 input 组件(文档链接) 子组件 <template><div class"keyboard-page"><wb-input:id"keyBoardId":placeholder"placeholder" :type"type&q…...

安装nvm 切换node版本
1. 安装 nvm curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash 验证nvm安装完成 command -v nvm 如果安装完成,就会显示如下 nvm 2. 查看 nvm 可以安装的 node 版本 查看可以安装的版本 nvm ls-remote 查看所有可以安装的…...

【html中的BFC是什么】
BFC(块级格式化上下文)是 CSS 中的一种盒模型布局,是指一个独立的块级容器,容器内部的元素会按照一定规则进行布局。 BFC 具体的规则有以下几个: BFC 内部的元素在垂直方向上相互排列,不会出现浮动的情况。…...

苹果账号被禁用怎么办
转载:苹果账号被禁用怎么办 目录 禁用的原因 解除Apple ID禁用 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UKQ1ILhC-1689932607373)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw)]编辑 …...

跨境出海企业,如何防范恶意退货欺诈
很多出海企业遭遇到过恶意退货事件。 2021年,某跨境商家在海外电商平台运营超过13年。有一次,有个海外买家买了一台二手的数码摄像机。在买家收到货后,却声称商品备在使用了45分钟之后便自动关机,且不能继续充电。该商家很肯定产…...

数据出境要依法“过安检”!什么是数据出境?
为了规范数据出境活动,保护个人信息权益,维护国家安全和社会公共利益,促进数据跨境安全、自由流动。从2022年9月1日起,《数据出境安全评估办法》施行。什么是数据出境,什么情况下需要进行数据出境安全评估呢࿱…...

ARM——点灯实验
循环点灯 RCC寄存器使能GPIOE、GPIOF组寄存器 修改GPIOx组寄存器下的值 通过GPIOx_MODER寄存器设置为输出模式通过GPIOx_OTYOER寄存器设置为推挽输出类型通过GPIOx_OSPEEDR寄存器设置为低速输出通过GPIOx_PUPDR寄存器设置为禁止上下拉电阻点灯 通过GPIOx_ODR寄存器设置为高电…...

Kubernetes 使用 helm 部署 NFS Provisioner
文章目录 1. 介绍2. 预备条件3. 部署 nfs4. 部署 NFS subdir external provisioner4.1 集群配置 containerd 代理4.2 配置代理堡垒机通过 kubeconfig 部署 部署 MinIO添加仓库修改可配置项 访问nodepotingress 1. 介绍 NFS subdir external provisioner 使用现有且已配置的NFS…...

Istio Pilot源码学习(二):ServiceController服务发现
本文基于Istio 1.18.0版本进行源码学习 4、服务发现:ServiceController ServiceController是服务发现的核心模块,主要功能是监听底层平台的服务注册中心,将平台服务模型转换成Istio服务模型并缓存;同时根据服务的变化,…...

Spring框架中的ResourcePatternResolver只能指定jar包内文件,指定容器中文件路径报错:FileNotFoundException
原始代码: public static <T> T getFromFile(String specifiedFile, String defaultClasspathFile, Class<T> expectedClass) {try {ResourcePatternResolver resolver new PathMatchingResourcePatternResolver();Resource[] resources resolver.ge…...

pytorch工具——认识pytorch
目录 pytorch的基本元素操作创建一个没有初始化的矩阵创建一个有初始化的矩阵创建一个全0矩阵并可指定数据元素类型为long直接通过数据创建张量通过已有的一个张量创建相同尺寸的新张量利用randn_like方法得到相同尺寸张量,并且采用随机初始化的方法为其赋值采用.si…...

解决Jmeter响应内容显示乱码
一、问题描述 jmeter在执行接口请求后,返回的响应体里面出现乱码现象,尽管在调了对应请求的响应编码也无用,现找到解决办法。 二、解决办法 进入到jmeter的bin目录下,找到jmeter.properties,通过按ctrlF快速定位查找到…...

ChatGPT和搜索引擎哪个更好用
目录 ChatGPT和搜索引擎的概念 ChatGPT和搜索引擎的作用 ChatGPT的作用 搜索引擎的作用 ChatGPT和搜索引擎哪个更好用 总结 ChatGPT和搜索引擎的概念 ChatGPT是一种基于对话的人工智能技术,而搜索引擎则是一种用于在互联网上查找和检索信息的工具。它们各自具…...

Nginx 301 https跳转后出现跨域和混合内容问题 —— 筑梦之路
问题 在浏览器地址栏敲入url访问静态资源目录时,发现默认跳转到了http协议的地址 如上图所示,客户端https请求先到达API网关,然后网关将请求通过http协议转发到静态资源服务器。 调出浏览器发现客户端发送的https请求收到了一个301状态码的响…...