扬州公司网站建设,河东网站建设,东莞人才网58同城招聘,网站软件下载app杂鱼之前纯粹用python没细致理解过的术语整理一下#xff0c;常看常新#xff08;
定义 (Definition)#xff1a;
定义是指给一个实体分配内存空间#xff0c;以便在程序中使用。在C和Python中#xff0c;这个实体可以是变量、函数或类。在C中#xff0c;定义通常是在声…杂鱼之前纯粹用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中使用运算符可以获取变量的内存地址即变量的指针。例如对于变量aa表示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的值。修改了指针指向的值也就修改了指针所指向的变量。