关于一些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的值。修改了指针指向的值也就修改了指针所指向的变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/7656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络】socket编程基础

文章目录 1. 源IP地址和目的IP地址2. 理解MAC地址和目的MAC地址3. 理解源端口号和目的端口号4. PORT与PID5. 认识TCP协议和UDP协议6. 网络字节序7. socket编程接口7.1 socket常见API7.2 sockaddr结构 1. 源IP地址和目的IP地址 因特网上的每台计算机都有一个唯一的IP地址&#…

性能优化问题

提升首屏的加载速度&#xff0c;是前端性能优化中「最重要」的环节&#xff0c;这里笔者梳理出一些 常规且有效 的首屏优化建议 1、路由懒加载 SPA 项目&#xff0c;一个路由对应一个页面&#xff0c;如果不做处理&#xff0c;项目打包后&#xff0c;会把所有页面打包成一个文…

2023“钉耙编程”中国大学生算法设计超级联赛(2)

“钉耙编程"(2)1001 | hdu7287&#xff1a;Alice Game Alice 和 Bob玩游戏&#xff0c;给定 n n n和 k k k&#xff0c;初始有 n n n个石头排成一排&#xff0c;两人轮流执行以下操作&#xff1a; 选择一段个数 ≤ k \le k ≤k的石头&#xff0c;直接拿掉选择一段个数 >…

Android平台如何实现第三方模块编码后(H.264/H.265/AAC/PCMA/PCMU)数据实时预览播放

技术诉求 我们在做GB28181设备对接模块和RTMP直播推送模块的时候&#xff0c;遇到这样的技术需求&#xff0c;设备&#xff08;如执法记录仪&#xff09;侧除了采集传统的摄像头外&#xff0c;还需要对接比如大疆等第三方数据源&#xff0c;确保按照GB28181规范和RTMP协议规范…

【后端面经-Spring】Spring简介

【后端面经-Spring】Spring简介 1. Spring简介2. Spring模块3. Spring核心特性4. Spring的后续拓展面试模拟参考资料 1. Spring简介 Spring是为了简化java项目开发设计的一款设计层面开源框架&#xff0c;其设计目的就是为了“简化开发”。 它使用分层架构&#xff0c;解决业务…

[NLP]Huggingface模型/数据文件下载方法

问题描述 作为一名自然语言处理算法人员&#xff0c;hugging face开源的transformers包在日常的使用十分频繁。在使用过程中&#xff0c;每次使用新模型的时候都需要进行下载。如果训练用的服务器有网&#xff0c;那么可以通过调用from_pretrained方法直接下载模型。但是就本人…

后端服务迁移方案及过程记录

阶段时序动作双写数据对比1新rdb集群上线双写数据对比2新服务上线&#xff0c;无流量双写数据对比2后端自己发起的流程比如job&#xff0c;新服务上线一份新的&#xff0c;独立运行双写数据对比2消费二方mq&#xff0c;新服务使用新的消费组消费原有消息双写数据对比3新旧服务比…

React Dva项目中.roadhogrc.mock.js直接自动导入mock目录下所有文件方式

上文 React Dva项目中模仿网络请求数据方法 中&#xff0c;我们书写了Dva项目模拟后端数据的方式 但是 我们.roadhogrc.mock.js中的这个处理其实并不好用 我们还需要一个一个的引入 我们可以直接靠一段代码 import fs from fs; import path from path; const mock {} fs.re…

19. 删除链表的倒数第 N 个结点

题目介绍 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示例 3&…

【C++STL标准库】容器适配器

功能&#xff1a;将功能类似&#xff0c;但是接口不符合的接口转换成另一个接口 stack 栈stack&#xff08;栈&#xff09; 特点&#xff1a;先入后出&#xff0c;只能从栈顶弹出值&#xff0c;只能从栈顶压入值 也就是说栈需要的功能&#xff1a;push_back、pop_back 所以可…

NLP(六十二)HuggingFace中的Datasets使用

Datasets库是HuggingFace生态系统中一个重要的数据集库&#xff0c;可用于轻松地访问和共享数据集&#xff0c;这些数据集是关于音频、计算机视觉、以及自然语言处理等领域。Datasets 库可以通过一行来加载一个数据集&#xff0c;并且可以使用 Hugging Face 强大的数据处理方法…

[Tools: tiny-cuda-nn] Linux安装

official repo: https://github.com/NVlabs/tiny-cuda-nn 该包可以显著提高NeRF训练速度&#xff0c;是Instant-NGP、Threestudio和NeRFstudio等框架中&#xff0c;必须使用的。 1. 命令行安装 最便捷的安装方式&#xff0c;如果安装失败考虑本地编译。 pip install ninja g…

使用机器学习实现自动化测试:提高效率和准确性

自动化测试&#xff1a;使用机器学习提高效率和准确性 在软件开发的过程中&#xff0c;测试是一个至关重要的环节。传统的手动测试往往耗时耗力&#xff0c;而且存在人为疏漏的可能。为了解决这些问题&#xff0c;许多团队开始将机器学习应用于自动化测试&#xff0c;以提高测试…

实现任意进制(2—32)转换

2020/01/01 实现原理参考代码测试样例其他补充后记交流 实现原理 本程序借助10进制数为中介数据&#xff0c;实现任意进制数之间的相互转换&#xff08;2-36进制范围&#xff09; 需要注意的是&#xff0c;数值范围不可超出 long long int 所表示的范围&#xff0c;即所输入需…

区块链与加密货币在Web3中的融入及意义

Web3是指下一代互联网&#xff0c;也被称为去中心化互联网。它的核心理念是建立一个去中心化的经济和社会系统&#xff0c;使得个人和社区能够更加自治和自主&#xff0c;而不依赖于中心化的机构和权力。 在Web3中&#xff0c;区块链和加密货币是非常重要的技术和概念。区块链是…

1.前端入门

文章目录 一、基础认知1.1 认识网页&#xff1a;1.2 五大浏览器1.3 Web标准 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、基础认知 1.1 认识网页&#xff1a; 1.网页由哪些部分组成&#xff1f; 文字、图片、音频、视频、超链接。 2.我们…

Hadoop基本信息

概念 Hadoop是Apache旗下的一个用Java语言实现开源软件框架&#xff0c;是一个存储和计算大规模数据的软件平台。 框架内容 狭义解释 核心组件 HDFS 分布式文件系统 - 解决海量数据存储MAPREDUCE 分布式运算编程框架 - 解决海量数据计算YARN 作业调度和集群资源管理的框架…

【机器学习】异常检测

异常检测 假设你是一名飞机涡扇引擎工程师&#xff0c;你在每个引擎出厂之前都需要检测两个指标——启动震动幅度和温度&#xff0c;查看其是否正常。在此之前你已经积累了相当多合格的发动机的出厂检测数据&#xff0c;如下图所示 我们把上述的正常启动的数据集总结为 D a t…

Jmeter常见问题之URI异常

这篇文章介绍一下"http://"重复导致的URI异常问题&#xff0c;通常从浏览器地址栏复制url&#xff0c;直接粘贴到Jmeter的http请求的服务器地址中会默认带上“http://”&#xff0c;要将http://删除&#xff0c;只写IP地址&#xff0c;如下图&#xff1a; 否则&…

项目开启启动命令整合

启动RabbitMQ管理插件 1.启动 RabbitMQ 管理插件。 rabbitmq-plugins enable rabbitmq_management rabbitmq-server # 直接启动&#xff0c;如果关闭窗⼝或需要在该窗⼝使⽤其他命令时应⽤就会停⽌ rabbitmq-server -detached # 后台启动 rabbitmq-server start # 启⽤服务 rab…