关于一些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)]编辑 …...
PyTorch模型的TensorRT优化:原理与实践
PyTorch模型的TensorRT优化:原理与实践 1. 背景与意义 在深度学习模型部署过程中,推理速度是一个关键指标。TensorRT是NVIDIA开发的高性能深度学习推理优化库,它可以显著提高模型的推理速度,降低延迟。本文将深入探讨TensorRT的工…...
AI专著撰写新方法:借助工具实现从构思到成书的完美跨越
创新与AI工具助力学术专著写作 创新是学术专著的核心,也是写作过程中最具挑战性的部分。一本合格的专著不应只是对现有研究成果的简单罗列,而需要提出贯穿全书的独到见解、理论框架或研究方法。在浩如烟海的学术文献中,挖掘尚未被探索的研究…...
手机号定位终极指南:3分钟掌握号码背后的位置秘密
手机号定位终极指南:3分钟掌握号码背后的位置秘密 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_mirrors/…...
高效流畅的WindowsB站体验:BiliBili-UWP第三方客户端全方位指南
高效流畅的WindowsB站体验:BiliBili-UWP第三方客户端全方位指南 【免费下载链接】BiliBili-UWP BiliBili的UWP客户端,当然,是第三方的了 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBili-UWP 作为一名Windows平台的B站用户&…...
终极指南:3步解锁iOS设备隐藏功能 - palera1n完整教程
终极指南:3步解锁iOS设备隐藏功能 - palera1n完整教程 【免费下载链接】palera1n Jailbreak for arm64 devices on iOS 15.0 项目地址: https://gitcode.com/GitHub_Trending/pa/palera1n 想要探索iOS系统更深层的功能吗?palera1n为你提供了一个简…...
从振荡器到稳定电源:用三阶RC滤波电路讲透控制环路的‘稳定’与‘发散’
从振荡器到稳定电源:三阶RC滤波电路揭示控制环路的稳定性本质 想象一下,你正在调试一个看似简单的三阶RC低通滤波电路。当你逐渐增大放大器的增益时,电路突然从安静的滤波状态转变为持续振荡——原本应该衰减高频信号的电路,现在…...
# 发散创新:基于事件驱动架构的实时日志监控系统设计与实现在现代分布式系统中,**事件驱动编程模型
发散创新:基于事件驱动架构的实时日志监控系统设计与实现 在现代分布式系统中,事件驱动编程模型正逐渐成为构建高可扩展、高性能应用的核心范式。相比传统的轮询或阻塞式处理方式,事件驱动能够显著降低资源消耗并提升响应效率。本文将深入探讨…...
Linux文件系统驱动实战:exfat-nofuse跨平台存储解决方案全解析
Linux文件系统驱动实战:exfat-nofuse跨平台存储解决方案全解析 【免费下载链接】exfat-nofuse Android ARM Linux non-fuse read/write kernel driver for exFat and VFat Android file systems 项目地址: https://gitcode.com/gh_mirrors/ex/exfat-nofuse 开…...
幼儿园招生报名小程序源码 微信报名系统
介绍这是一款幼儿园招生报名小程序,以新学期招生报名为核心,兼顾幼儿园环境图文展示(室内、室外、文娱、起居)、招生政策答疑、最新动态新闻、食谱介绍、报名项目海报分享等功能。家长可填写幼儿基本信息、住址信息、监护人信息等…...
Millennium Steam Patcher架构解析:模块化主题引擎与Hook系统的深度实现
Millennium Steam Patcher架构解析:模块化主题引擎与Hook系统的深度实现 【免费下载链接】millennium-steam-patcher Apply themes/customize Steam after the 2023-04-27 Chromium UI update https://discord.gg/MXMWEQKgJF 项目地址: https://gitcode.com/gh_mi…...
