C++学习 --类和对象之封装
目录
1, 什么是封装
2, 创建类
3, 权限控制
3-1, public权限
3-2, private权限
3-3, protected权限
3-4, 类外访问私有属性
4, 构造函数
4-2,创建构造函数
4-2-1, 无参构造函数
4-2-2, 有参构造函数
4-3, 调用构造函数
4-3-1, 括号法调用
4-3-2, 显示法调用
4-3-3, 无参构造函数调用
5, 初始化列表
6, 拷贝构造函数
6-1, 创建拷贝构造函数
6-2, 调用拷贝构造函数
6-2-1, 括号法调用
6-2-2, 显示法调用
7, 析构函数
8, 结构体与类的区别
9, 拆分类到不同文件中
9-1, 创建类的头文件
9-2, 创建类的源文件
9-3, 在主函数中调用
9-4, 构造函数调用规则
10, 深拷贝与浅拷贝
10-1, 浅拷贝
10-2, 深拷贝
11, 类可作为类的成员
12, 静态成员
12-1, 静态成员变量
12-1-1, 静态成员变量访问
12-1-1-1, 类内访问
12-1-1-2, 类外访问
12-1-2, 静态成员变量修改
12-1-2-1, 类内修改
12-1-2-2, 类外修改
12-2, 静态成员函数
12-2-1, 静态成员函数访问
13, 成员函数和成员变量分开存储
14, this指针
14-1, this指针处理同名
14-2, this实现链式编程
14-3, this指向
15, const修饰成员属性
15-1, 常函数
15-2, 常对象
1, 什么是封装
将对象的数据属性和行为属性封装到一个类中,并加以权限控制, 就叫封装
2, 创建类
通过class 类名{权限:属性}, 可创建一个类
class Person
{
public://定义数据属性int m_a;//定义行为属性void func(){}
};
3, 权限控制
权限分为public, private, private三种, 若没有指定权限关键字,则默认为private权限
3-1, public权限
public表示公共权限, 类内外均可访问public权限的属性, 子类可访问父类的public的属性
public:int m_age;
3-2, private权限
private表示私有权限, 仅类内可访问,类外不能访问, 子类不可访问父类的private的属性
private:int m_age;
3-3, protected权限
protected表示保护权限, 仅类内可访问,类外不能访问, 子类可访问父类的protected属性
protected:int m_age;
3-4, 类外访问私有属性
若要访问类的私有权限, 可通过在类中设置public的方法, 在类外调用public方法进行访问
4, 构造函数
通过构造函数给类的实例初始化, 构造函数是与类同名, 无数据类型
4-2,创建构造函数
4-2-1, 无参构造函数
通过类名 () {语句块}, 可创建无参构造函数
class Person
{
public:Person(){ cout << "这是一个无参构造函数" << endl;}
};
4-2-2, 有参构造函数
通过类名 (行参1, ..., 形参n) {语句块}, 可创建有参构造函数
public:Person(string name, string sex, int age){m_name = name;m_sex = sex;m_age = age;cout << "这是一个有参构造函数" << endl;}string m_name;string m_sex;int m_age;
4-3, 调用构造函数
4-3-1, 括号法调用
通过类名 对象名(实参1, ..., 实参n)的方式调用
#include <iostream>
#include <string>using namespace std;class Person
{
public:Person(string name, string sex, int age){ m_name = name;m_sex = sex;m_age = age;cout << "m_name:" << m_name << endl;cout << "m_sex:" << m_sex << endl;cout << "m_age:" << m_age << endl;}string m_name;string m_sex;int m_age;
};void test()
{Person p("张三", "男", 25);
}int main()
{test();system("pause");return 0;
}
-------------------------------------------------------------------
输出结果:
m_name:张三
m_sex:男
m_age:25
4-3-2, 显示法调用
通过类名 对象名 = 类名(实参1, ..., 实参n)的方式调用
#include <iostream>
#include <string>using namespace std;class Person
{
public:Person(string name, string sex, int age){ m_name = name;m_sex = sex;m_age = age;cout << "m_name:" << m_name << endl;cout << "m_sex:" << m_sex << endl;cout << "m_age:" << m_age << endl;}string m_name;string m_sex;int m_age;
};void test()
{Person p = Person("张三", "男", 25);
}int main()
{test();system("pause");return 0;
}
-------------------------------------------------------------------
输出结果:
m_name:张三
m_sex:男
m_age:25
4-3-3, 无参构造函数调用
通过类名 对象名, 可进行无参构造函数调用
#include <iostream>
#include <string>using namespace std;class Person
{
public:Person(){ cout << "这是一个无参构造函数" << endl;}
};void test()
{//无参构造函数调用, 注意没有括号, 因为Person p()会当着一个函数声明Person p;
}int main()
{test();system("pause");return 0;
}
-----------------------------------------------------------------------
输出结果:
这是一个无参构造函数
5, 初始化列表
通过构造函数(数据类型 变量1, ..., 数据类型 变量n):属性1(变量1)...属性n(变量n){}的方式, 可初始化对象的属性
#include <iostream>
#include <string>using namespace std;class Person
{
public:Person(string name, string sex, int age):m_name(name),m_sex(sex),m_age(age){ cout << "m_name:" << m_name << endl;cout << "m_sex:" << m_sex << endl;cout << "m_age:" << m_age << endl;}string m_name;string m_sex;int m_age;
};void test()
{Person p("张三", "男", 25);
}int main()
{test();system("pause");return 0;
}
------------------------------------------------------------------
输出结果:
m_name:张三
m_age:25
m_sex:男
6, 拷贝构造函数
若用户没有自定义拷贝构造函数, 编译器会自动创建一个拷贝构造函数(具有属性拷贝功能), 拷贝构造与类同名, 无数据类型
6-1, 创建拷贝构造函数
通过类名(const 类名 &对象)方式, 可创建一个拷贝构造函数, 传递的参数为类对象
class Person
{
public://因为拷贝构造的数据来源与构造函数, 所以必须先定义构造函数Person(){}//拷贝构造函数:形参需要是一个常量引用Person(const Person& p){cout << "Person类拷贝参构造函数调用" << endl;}
};
6-2, 调用拷贝构造函数
6-2-1, 括号法调用
通过类名 实例(实例1)方式, 可调用拷贝构造函数
#include <iostream>
#include <string>using namespace std;class Person
{
public:Person(string name, string sex, int age):m_name(name), m_sex(sex), m_age(age){}Person(const Person& p){m_name = p.m_name;m_sex = p.m_sex;m_age = p.m_age;}string m_name;string m_sex;int m_age;
};void test()
{//拷贝构造参数为对象, 所以先要创建对象Person p2("张三", "男", 25);//拷贝构造函数调用, 在拷贝构造函数里面通过p2进行赋值Person p3(p2);cout << "m_name:" << p3.m_name << endl;cout << "m_age:" << p3.m_age << endl;cout << "m_sex:" << p3.m_sex << endl;//编译器会当着Person p3进行处理, 与Person p3(p2)冲突, 重复定义p3//Person(p3);
}int main()
{test();system("pause");return 0;
}
------------------------------------------------------------------
输出结果:
m_name:张三
m_age:25
m_sex:男
6-2-2, 显示法调用
#include <iostream>
#include <string>using namespace std;class Person
{
public:Person(string name, string sex, int age):m_name(name), m_sex(sex), m_age(age){}Person(const Person& p){m_name = p.m_name;m_sex = p.m_sex;m_age = p.m_age;}string m_name;string m_sex;int m_age;
};void test()
{//拷贝构造参数为对象, 所以先要创建对象Person p2("张三", "男", 25);//拷贝构造函数调用, 在拷贝构造函数里面通过p2进行赋值Person p3 = Person(p2);cout << "m_name:" << p3.m_name << endl;cout << "m_age:" << p3.m_age << endl;cout << "m_sex:" << p3.m_sex << endl;//编译器会当着Person p3进行处理, 与Person p3(p2)冲突, 重复定义p3//Person(p3);
}int main()
{test();system("pause");return 0;
}
------------------------------------------------------------------
输出结果:
m_name:张三
m_age:25
m_sex:男
类对象当着函数参数传递时,会调用拷贝构造函数
#include <iostream>
#include <string>using namespace std;class Person
{
public:Person(int a){cout << "调用Person类有参构造函数" << endl;}Person(const Person& p){cout << "调用Person类拷贝构造函数" << endl;}
};void func(Person p)
{cout << "func调用" << endl;
}int main()
{Person p1(10);//函数参数为类对象, 调用下面的函数会自动调用拷贝构造函数func(p1);system("pause");return 0;
}
---------------------------------------------------------------
输出结果:
调用Person类有参构造函数
调用Person类拷贝构造函数
func调用
7, 析构函数
通过~类名 () {代码块}, 可创建一个析构函数, 其作用是清理对象的数据,
#include <iostream>
#include <string>using namespace std;class Person
{
public://析构函数名与是~类名, 在对象释放时,由编译器调用//析构函数没有参数~Person(){cout << "Person类构造函数调用" << endl;}
};int main()
{//创建对象p, 编译器会自动调用构造函数//main函数运行完后释放p, 则调用析构函数Person p;system("pause");return 0;
}
----------------------------------------------------
输出结果:
请按任意键继续. . .
Person类构造函数调用
8, 结构体与类的区别
结构体属性权限默认为公共权限, 类的属性权限默认为私有权限
struct Student
{//默认为公共权限string m_name;
};
class Student
{//默认为私有权限privatestring m_name;
};
9, 拆分类到不同文件中
类的声明和定义可拆分到不同的文件中, 声明放在一个头文件中, 类定义放在一个源文件中
9-1, 创建类的头文件
在头文件中,实现类以及其属性声明
在项目的头文件夹中, 创建person.h
#pragma once
#include <iostream>
#include <string>using namespace std;class Person
{
public:void func1();void func2();string func3();string func4();protected:void func5();private:string m_name = "张三";string m_sex = "男";void func6();
};
9-2, 创建类的源文件
在源文件中,实现方法的定义
在项目的源文件夹中, 创建person.cpp源文件
#include <iostream>
#include <string>
#include "person.h"using namespace std;//Person::func1(), 表示申明func1在Person类中
void Person::func1()
{return func5();
}void Person::func2()
{return func6();
}string Person::func3()
{return m_name;
}string Person::func4()
{return m_sex;
}void Person::func5()
{cout << "类保护属性访问" << endl;
}void Person::func6()
{cout << "类私有属性访问" << endl;
}
9-3, 在主函数中调用
#include <iostream>
#include <string>
#include "person.h"using namespace std;void test()
{Person p;p.func1();p.func2();cout << "获取类的私有属性:" << p.func3() << endl;cout << "获取类的保护属性:" << p.func4() << endl;
}int main()
{ test();system("pause");return 0;
}
9-4, 构造函数调用规则
默认情况下, 创建一个类, 编译器会自动创建默认构造函数(空实现), 默认析构函数(空实现), 拷贝构造函数(具有属性拷贝功能)
#include <iostream>
#include <string>using namespace std;class Person
{
public:Person(int age){m_age = age;cout << "Person类有参构造调用" << endl;}int m_age;
};int main()
{Person p1(10);//虽然Person类没有定义拷贝构造函数, 但是会默认提供一个//所以下面能正常打印Person p2(p1);cout << "p2的年龄:" << p2.m_age << endl;system("pause");return 0;
}
----------------------------------------------------------------
输出结果:
Person类有参构造调用
p2的年龄:10
说明:
1, 若在类中只定义有参构造函数, 则编译器不会自动提供默认构造函数
2, 若在类中只定义拷贝构造函数, 则编译器不会自动提供默认和有参构造函数
10, 深拷贝与浅拷贝
10-1, 浅拷贝
没有在堆区重新申请空间的赋值拷贝, 为浅拷贝
10-2, 深拷贝
在堆区重新申请空间的赋值拷贝, 为深拷贝
#include <iostream>
#include <string>using namespace std;class Person
{
public:Person(int age, int height){m_age = age;//在堆区创建一块内存m_height = new int(height);cout << "Person类有参构造调用" << endl;}//拷贝构造函数的作用是用户可自定义在堆区创建一块内存给p3使用//防止p2释放内存后,p3再次释放就放报错的问题//若使用编译器提供的拷贝构造函数, 就会出现上面说的问题Person(const Person& p){m_age = p.m_age;m_height = new int(*p.m_height);}~Person(){cout << "析构函数调用" << endl;//在堆区释放内存时,要注意是否会存在多次释放的情况if (m_height != NULL){delete m_height;m_height = NULL;}}int m_age;int* m_height;
};int main()
{Person p1(10, 160);Person p2(p1);cout << "p2的年龄:" << p2.m_age << endl;system("pause");return 0;
}
-----------------------------------------------------------
输出结果:
Person类有参构造调用
p2的年龄:10
请按任意键继续. . .
析构函数调用
析构函数调用
说明:在堆区释放内存时,要注意是否会存在多次释放的情况
11, 类可作为类的成员
#include <iostream>
#include <string>using namespace std;class Phone
{
public:Phone(string pname, int tel) :m_pname(pname), m_ptel(tel) {};string m_pname;int m_ptel;
};class Person
{
public:Person(string name, Phone phone):m_name(name), m_phone(phone.m_pname, phone.m_ptel){}string m_name;//类成员作为成员属性Phone m_phone;
};int main()
{ Phone phone("苹果", 123456789);Person p1("张三", phone);cout << "姓名:" << p1.m_name << endl;cout << "机型:" << p1.m_phone.m_pname << endl;cout << "号码:" << p1.m_phone.m_ptel << endl;system("pause");return 0;
}
12, 静态成员
静态成员分为静态成员变量和静态成员函数
12-1, 静态成员变量
在类中, 通过static 数据类型 变量, 可定义一个静态成员变量, 所有的对象共享, 静态成员只能在类外定义
class Person
{
public://类内声明static int m_a;
};//类外定义, Person::m_a:表示m_a是属于Person中
int Person::m_a = 100;
12-1-1, 静态成员变量访问
分为类内访问和类外访问两种
12-1-1-1, 类内访问
通过变量名进行访问
cout << "m_a:" << m_a << endl;
12-1-1-2, 类外访问
通过实例.静态成员变量或者类名::静态成员变量
cout << p1.m_a << endl;
cout << Person::m_a << endl;
12-1-2, 静态成员变量修改
12-1-2-1, 类内修改
通过类内的方法进行修改
class Person
{
public:static int m_a;void func(){//修改静态变量的值m_a = 1000;cout << "m_a:" << m_a << endl;}
};
12-1-2-2, 类外修改
通过实例.静态成员变量 = 值或者类名::静态成员变量 = 值进行修改
#include <iostream>
#include <string>using namespace std;class Person
{
public:static int m_a;
};//m_a是静态成员变量, 需要在类外定义
int Person::m_a = 100;void test()
{Person p1;Person p2;cout << "p1.m_a:" << p1.m_a << endl;cout << "p2.m_a:" << p2.m_a << endl;//因为所有对象共享一份数据,任意对象将属性修改,都会映射到其他对象p1.m_a = 200;cout << "p1.m_a:" << p1.m_a << endl;cout << "p2.m_a:" << p2.m_a << endl;
}int main()
{ test();system("pause");return 0;
}
-----------------------------------------------------
输出结果:
p1.m_a:100
p2.m_a:100
p1.m_a:200
p2.m_a:200
12-2, 静态成员函数
所有对象共享同一个函数, 静态成员函数只能访问静态成员变量, 不能在静态成员变量中访问非静态成员变量
12-2-1, 静态成员函数访问
通过实例.成员函数()或者类::成员函数(), 可访问静态成员函数
#include <iostream>
#include <string>using namespace std;class Person
{
public:static void func(){//m_a是静态成员变量, 静态成员函数可以访问m_a = 100;//由于m_b不是静态成员变量, 所以m_b = 200是非法的//m_b = 200;cout << "static void func调用" << endl;}static int m_a;int m_b;
};int Person::m_a = 100;void test()
{Person p1;cout << "通过对象访问静态成员函数:" << endl;p1.func();cout << "通过类名访问静态成员函数:" << endl;Person::func();
}int main()
{ test();system("pause");return 0;
}
13, 成员函数和成员变量分开存储
类中的成员函数和成员变量是分开存储的,只有非静态成员变量与类存储在一起,成员函数、静态成员函数、静态成员变量都不存储在类上, 所以类占用内存空间的大小由非静态成员变量决定
#include <iostream>
#include <string>using namespace std;class Person
{//只有非静态成员变量与类在一块内存空间int m_a; //下面的三种都不在类的内存空间void func() {};static int m_b;static void func1() {};
};void test()
{Person p;cout << "sizeof of p:" << sizeof(p) << endl;
}int main()
{test();system("pause");return 0;
}
------------------------------------------------------------
sizeof of p:4
说明:若类是一个空对象,则分配1个字节空间
14, this指针
this指针是类中所有成员属性自带的指针, 不用显示给出
m_age = age;
等价于
this->m_age = age;
14-1, this指针处理同名
当形成与成员属性同名时, 可通过this进行区分
#include <iostream>
#include <string>using namespace std;class Person
{
public:Person(int age){//若出现下面这种形参和成员属性同名的情况, 左右值都表示形参//age = age;//通过this->age, 才能表示成员属性agethis->age = age;};int age;
};void test()
{Person p(10);cout << "age:" << p.age << endl;
}int main()
{test();system("pause");return 0;
}
--------------------------------------------------------------
输出结果:
age:10
14-2, this实现链式编程
通过*this, 返回对象的本身, 若要实现链式编程, 则需要以引用的方式返回, 因为引用的修改会映射到原对象
#include <iostream>
#include <string>using namespace std;class Person
{
public:Person(int age){m_age = age;};//注意返回的是引用Person& func(int age){m_age += age;//通过*this返回对象本身return *this;}int m_age;
};void test()
{Person p(10);//链式编程p.func(10).func(10).func(10);cout << "age:" << p.m_age << endl;
}
int main()
{test();system("pause");return 0;
}
------------------------------------------------------------
输出结果:
age:40
14-3, this指向
this指向的是调用成员函数的对象
#include <iostream>
#include <string>using namespace std;class Person
{
public:void func_1(){cout << "函数调用func!" << endl;};void func_2(int age){//防止报错if (this == NULL){return;}//编译器会当着this->m_a = age, 但是p又指向空指针,所以报错, 通过上面的if防止报错m_age = age;};int m_age;
};void test()
{Person* p = NULL;//下面这部没有使用到this, 所以正常执行p->func_1();//this指向的调用属性的对象, 这里就指向p, p是空指针p->func_2(10);
}int main()
{test();system("pause");return 0;
}
15, const修饰成员属性
15-1, 常函数
在类中, 通过const修饰的成员函数, 叫着常函数, 常函数中不能修改成员属性, 但是可修改mutable修饰的成员变量
class Person
{
public://通过const修饰的函数为常函数void func_1() const{//因为func_1是常函数,不能修改成员属性,所以下面的操作非法//m_age = 100;//因为m_name使用了关键字mutable, 所以能够修改m_name = "张三";};int m_age;//mutable的作用,在常函数中能够修改的变量 mutable string m_name;
};
15-2, 常对象
通过在对象前加const, 则该对象就是常对象, 常对象只能调用常函数
#include <iostream>
#include <string>using namespace std;class Person
{
public://通过const修饰的函数为常函数void func_1() const{cout << "func_1调用" << endl;};void func_2(){};
};void test()
{//通过const修饰的对象为常对象, 常对象只能调用常函数const Person p;//p是常对象, func_2不是常函数,所以下面的操作非法//p.func_2()//func_1是常函数,可以调用p.func_1();
}int main()
{test();system("pause");return 0;
}
-----------------------------------------------------------------
输出结果:
func_1调用
相关文章:
C++学习 --类和对象之封装
目录 1, 什么是封装 2, 创建类 3, 权限控制 3-1, public权限 3-2, private权限 3-3, protected权限 3-4, 类外访问私有属性 4, 构造函数 4-2,创建构造函数 4-2…...
在Spring Boot中使用JTA实现对多数据源的事务管理
了解事务的都知道,在我们日常开发中单单靠事务管理就可以解决绝大多数问题了,但是为啥还要提出JTA这个玩意呢,到底JTA是什么呢?他又是具体来解决啥问题的呢? JTA JTA(Java Transaction API)是…...
介绍YOLO-NAS Pose:姿势估计的技术
YOLO-NAS 姿势 YOLO-NAS Pose models是对 Pose Estimation 领域的最新贡献。今年早些时候,Deci 因其突破性的目标检测基础模型 YOLO-NAS 获得了广泛认可。在 YOLO-NAS 成功的基础上,该公司现在推出了 YOLO-NAS Pose 作为其姿势估计的对应产品。该姿势模型在延迟和准确性之间…...
计算机毕业设计 基于SpringBoot的实训管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
Python开发运维:Python3.7使用QQ邮箱发送不同类型邮件
目录 一、理论 1.邮件发送 二、实验 1.Python3.7使用QQ邮箱发送普通邮件 2.Python3.7使用QQ邮箱发送包含图片与附件的邮件 三、问题 1.Pycharm中如何放大和缩小代码界面 一、理论 1.邮件发送 (1)概念 SMTP(Simple Mail Transfer Pro…...
二十三种设计模式全面解析-解密迭代器模式:探索遍历之道
在软件开发中,遍历数据集合是一个非常常见的需求。但是,如何以一种优雅、灵活的方式遍历集合,并且能够适应各种不同的数据结构和迭代方式,一直是开发者们面临的挑战。今天,我将带你深入探索迭代器模式(Iter…...
kubernetes istio
目录 一、部署 二、部署示例应用 三、部署遥测组件 四、流量管理 五、熔断 官网:https://istio.io/latest/zh/about/service-mesh/ 一、部署 提前准备好文件 tar zxf 15t10-1.19.3-linux-amd64.tar.gz cd 15t10-1.19.3/ export PATH$PWD/bin:$PATHistioctl install …...
25期代码随想录算法训练营第十四天 | 二叉树 | 递归遍历、迭代遍历
目录 递归遍历前序遍历中序遍历后序遍历 迭代遍历前序遍历中序遍历后序遍历 递归遍历 前序遍历 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # …...
常用布局以及其优缺点
当涉及到设计和排版时,有许多不同的布局方式可供选择。以下是几种常见的布局方式以及它们的优缺点: 流式布局(Fluid Layout): 优点:能够根据屏幕大小自动调整内容,适应不同设备。灵活性高&#…...
海康工业相机如何提高相机帧率
影响帧率的因素 相机参数 帧率限制使能 像素格式 曝光时间 数据包大小(网口) 相机默认参数 ADC位深 系统环境设置...
Linux之IPC通信共享内存(一次拷贝)与消息队列、管道、信号量、socket(两次拷贝)总结(六十二)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
【多线程 - 01、概述】
进程 几乎所有的操作系统都支持进程概念,进程是处于运行过程中的程序,进程是操作系统中进行资源分配的基本单位。 三个基本特征 独立性:指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。而对于未建立任何进程的程序&…...
SQL SELECT INTO 语句
SQL SELECT INTO 语句 使用 SQL,您可以将信息从一个表中复制到另一个表中。 SELECT INTO 语句从一个表中复制数据,然后将数据插入到另一个新表中。 SQL SELECT INTO 语法 我们可以把所有的列都复制到新表中: SELECT * INTO newtable [IN ex…...
【刷题】(AtCoder Beginner Contest 328) C、D 补题
前言 第一次打 a了两道 C、D都是TLE 看了其他人的题解之后 有一些想法 所以发一篇博客 C 题干 题目链接 我的思路及做题过程 我的思路是 输入left、right 再在这个区间内计算字母相同的对数 代码是: #include<iostream> #include<cmath> #includ…...
NI USRP软件无线设备的特点
NI USRP软件无线设备 NI的USRP(Universal Software Radio Peripheral)设备是RF应用中使用的软件无线(SDR)。NI的USRP收发器可以在多个频段发送和接收RF信号,因此可用于通信工程教育和研究。通过与LabVIEW开发环境相结合,USRP可以实现使用无线信号验证无…...
大数据毕业设计选题推荐-污水处理大数据平台-Hadoop-Spark-Hive
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...
最新获取支付宝cardIndex参数图文教程
本章教程主要介绍如何获取支付宝的cardIndex参数。 目录 一、登录到支付宝官网 二、在历史记录中,找到对应用户 一、登录到支付宝官网...
Linux学习第二枪(yum,vim,g++/gcc,makefile的使用)
前言:在我的上一篇Linux博客我已经讲了基础指令和权限,现在我们来学习如何在Linux上运行和执行代码 目录 一,yum 二,vim 1)命令行模式 2)插入模式 3)底行模式 三,gcc/g 四&a…...
自然语言处理(一):RNN
「循环神经网络」(Recurrent Neural Network,RNN)是一个非常经典的面向序列的模型,可以对自然语言句子或是其他时序信号进行建模。进一步讲,它只有一个物理RNN单元,但是这个RNN单元可以按照时间步骤进行展开…...
超全总结!大模型算法面试指南(含答案)
大家好,从 2019 年的谷歌 T5 到 OpenAI GPT 系列,参数量爆炸的大模型不断涌现。可以说,LLMs 的研究在学界和业界都得到了很大的推进,尤其去年 11 月底对话大模型 ChatGPT 的出现更是引起了社会各界的广泛关注。 近些年࿰…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
ArcPy扩展模块的使用(3)
管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...
