当前位置: 首页 > news >正文

C++学习笔记——类继承

目录

一、一个简单的基类

1.1封装性

1.2继承性

1.3虚函数

1.4多态性

二、基类

2.1一个简单的C++基类的示例

2.2 Animal是一个基类。

三、继承

3.1概念

3.2is-a关系

 3.3多态公有继承

 3.4静态联编和动态联编

3.5访问控制

3.6ABC理念


一、一个简单的基类

C++中的基类是一个抽象的类,它作为其他相关类的通用特性和行为的模板。基类定义了一组共享的成员函数、数据成员和虚函数,这些成员可以被派生类继承和扩展。

以下是对C++简单的基类概念的介绍:

1.1封装性

基类封装了一些数据成员和成员函数,以提供对派生类的内部实现的抽象。这样,派生类可以继承基类的属性和行为,并根据需要进行修改或扩展。

1.2继承性

派生类可以通过继承基类来获得其成员函数和数据成员。这意味着派生类可以重用基类的代码,从而减少了代码的冗余。派生类可以通过关键字publicprotectedprivate来指定继承方式。

1.3虚函数

基类中的虚函数允许派生类根据自己的特定需求来重新定义这些函数。通过在基类中将函数声明为virtual,可以在派生类中使用相同的函数名来覆盖基类中的实现。这样,通过基类指针或引用调用虚函数时,将根据对象的实际类型来执行适当的函数。

1.4多态性

多态性是面向对象编程的一个重要概念,允许以通用的方式处理不同类型的对象。通过使用基类指针或引用来引用派生类的对象,可以以相同的方式调用基类的成员函数,从而实现代码的灵活性和可扩展性。

二、基类

提供了一种层次结构,用于组织和管理相关的类,并促进代码的重用和结构化。通过继承和多态性的机制,基类和派生类之间建立了一种强大的关系,使得面向对象程序具有更好的可维护性和可扩展性。在C++中,一个简单的基类是一个抽象的类,它提供了其他相关类的通用特性和行为。基类通常包含成员函数、数据成员和虚函数。

下面是:

2.1一个简单的C++基类的示例

class Animal {
protected:std::string name;int age;public:Animal(const std::string& _name, int _age) : name(_name), age(_age) {}void eat() {std::cout << name << " is eating." << std::endl;}void sleep() {std::cout << name << " is sleeping." << std::endl;}virtual void sound() {std::cout << name << " makes a sound." << std::endl;}
};

在这个示例中,它具有以下特点:

2.2 Animal是一个基类。

表示动物

  • 数据成员:name表示动物的名字,age表示动物的年龄。这些成员被声明为protected,可以被派生类访问。
  • 构造函数:构造函数用于初始化动物的名字和年龄。
  • 成员函数:eat()sleep()是普通成员函数,表示动物的吃和睡觉行为。
  • 虚函数:sound()是一个虚函数,表示动物发出声音的行为。它被声明为虚函数,以便派生类可以覆盖该函数来实现自己特定的声音行为。

使用这个基类,你可以创建派生类来表示不同种类的动物,例如狗、猫、鸟等。派生类可以继承基类的成员函数和数据成员,并可以添加自己特定的成员函数和数据成员。

基类允许你通过多态性的概念,以相同的方式对待不同类型的对象。例如,你可以使用基类指针或引用来操作派生类的对象,从而实现代码的灵活性和可扩展性。

这个简单的基类示例展示了面向对象编程中的封装、继承和多态的概念。通过基类和派生类的组合,可以实现代码的重用和结构化。

三、继承

3.1概念

是面向对象编程中的一种重要概念,它允许一个类(称为派生类或子类)从另一个类(称为基类或父类)继承属性和行为。

通过继承,派生类可以获得基类的成员函数和数据成员,并可以在其基础上添加自己特定的功能。这样可以实现代码的重用,减少了冗余的代码编写。

在C++中,继承有三种方式:

  1. 公有继承(public inheritance):使用public关键字,派生类将继承基类的公有成员和保护成员。公有继承表示派生类与基类之间存在"是一个"的关系,派生类的对象可以被视为基类的对象。

  2. 保护继承(protected inheritance):使用protected关键字,派生类将继承基类的保护成员,并将其作为自己的保护成员。保护继承表示派生类与基类之间存在一种特殊的关系,派生类的对象不能被视为基类的对象。

  3. 私有继承(private inheritance):使用private关键字,派生类将继承基类的私有成员,并将其作为自己的私有成员。私有继承表示派生类与基类之间存在一种实现细节的关系,派生类的对象不能被视为基类的对象。

继承提供了一种机制,通过定义一个通用的基类,使得派生类可以继承这些通用特性,并根据需要进行修改和扩展。在继承关系中,基类通常包含了派生类共有的特征和行为,而派生类则添加了自己特定的特征和行为。

需要注意的是,派生类可以通过重写(覆盖)基类的成员函数来改变其行为,这是通过使用virtual关键字和虚函数实现的。此外,C++支持多重继承,允许一个派生类从多个基类继承属性和行为。

在面向对象编程中,is-a关系是一种重要的概念,用于描述一个类是否属于另一个类的一种特殊情况,通常也称为继承关系。

3.2is-a关系

表示一个类是另一个类的一种类型或子类,即派生类是基类的一种特例。例如,狗是一种动物,所以Dog类是Animal类的子类,可以使用公有继承实现。

is-a关系通常表示为"派生类 is a 基类"的形式。在C++中,使用公有继承可以实现is-a关系,因为派生类将继承基类的公有成员和保护成员,可以像基类一样使用这些成员。

例如:

// 定义一个基类Animal
class Animal {
public:void eat();void sleep();
};// 定义一个派生类Dog,它是Animal的子类
class Dog : public Animal {
public:void bark();
};

在上面的例子中,Dog类是Animal类的子类,因此可以使用Dog对象调用eat()sleep()函数,这就体现了is-a关系。

is-a关系是面向对象编程中最基本的关系之一,它反映了现实世界中的分类关系。通过定义一个通用的基类,我们可以将代码组织成层次结构,实现代码的重用和结构化。

 3.3多态公有继承

多态是面向对象编程中的一种重要概念,它允许一个对象在不同的情况下表现出不同的行为,是面向对象程序设计中最重要的特性之一。

公有继承可以提供多态的实现方式之一,这种多态称为动态多态(或运行时多态)。简单来说,动态多态指的是在运行时根据对象的实际类型来调用相应的函数。

在C++中,使用虚函数实现动态多态。虚函数是一种特殊的成员函数,它通过关键字virtual进行声明,并且在派生类中可以被重写。当基类的指针或引用指向派生类的对象时,可以通过虚函数实现动态多态。

例如:

// 定义一个基类Animal
class Animal {
public:virtual void makeSound();
};// 定义一个派生类Dog,它重写了基类的makeSound()函数
class Dog : public Animal {
public:void makeSound() override;
};// 定义一个派生类Cat,它重写了基类的makeSound()函数
class Cat : public Animal {
public:void makeSound() override;
};

在上面的例子中,Animal类定义了虚函数makeSound()DogCat类分别重写了这个函数。当基类指针或引用指向DogCat对象时,可以通过调用makeSound()函数来实现动态多态。

例如:s

Animal* animal = new Dog;
animal->makeSound(); // 调用Dog类的makeSound()函数animal = new Cat;
animal->makeSound(); // 调用Cat类的makeSound()函数

在上面的例子中,animal指针先指向Dog对象,然后调用makeSound()函数时会调用Dog类的makeSound()函数;之后animal指针又指向Cat对象,调用makeSound()函数时会调用Cat类的makeSound()函数。这就体现了动态多态的特性。

总之,通过公有继承和虚函数,C++提供了一种强大的多态机制,可以使代码更加灵活和易于扩展。

 3.4静态联编和动态联编

静态联编(静态绑定)和动态联编(动态绑定)是面向对象编程中两种不同的函数调用机制。

  1. 静态联编(静态绑定): 静态联编是指在编译时确定调用哪个函数的机制,也称为早期绑定。在静态联编中,函数调用的解析是基于变量的静态类型(编译时类型)进行的。编译器会根据变量的声明类型来决定调用哪个函数,并且这个决定是在编译阶段确定的。

静态联编适用于非虚函数和静态函数。由于在编译时确定了函数的调用,因此静态联编具有较高的执行效率,但缺少灵活性和多态性。

  1. 动态联编(动态绑定): 动态联编是指在运行时确定调用哪个函数的机制,也称为晚期绑定。在动态联编中,函数调用的解析是基于变量的实际类型(运行时类型)进行的。编译器会根据对象的实际类型来决定调用哪个函数,这个决定是在运行时确定的。

动态联编适用于虚函数。通过使用虚函数和基类指针或引用,可以实现在运行时根据对象的实际类型来调用相应的函数,实现多态性。动态联编提供了更高的灵活性和可扩展性,但在运行时需要额外的开销。

总结:

  • 静态联编是在编译时确定函数调用的机制,适用于非虚函数和静态函数,执行效率较高。
  • 动态联编是在运行时确定函数调用的机制,适用于虚函数,可以实现多态性,具有更高的灵活性和可扩展性,但在运行时需要额外开销。
#include <iostream>// 基类 Animal
class Animal {
public:void makeSound() {std::cout << "Animal makes a sound." << std::endl;}
};// 派生类 Dog
class Dog : public Animal {
public:void makeSound() {std::cout << "Dog barks." << std::endl;}
};// 派生类 Cat
class Cat : public Animal {
public:void makeSound() {std::cout << "Cat meows." << std::endl;}
};int main() {Animal animal;Dog dog;Cat cat;// 静态联编 - 根据变量的静态类型调用函数animal.makeSound();  // 输出: Animal makes a sound.dog.makeSound();     // 输出: Dog barks.cat.makeSound();     // 输出: Cat meows.// 动态联编 - 使用指针或引用调用虚函数Animal* animalPtr1 = &animal;Animal* animalPtr2 = &dog;Animal* animalPtr3 = &cat;animalPtr1->makeSound(); // 输出: Animal makes a sound.animalPtr2->makeSound(); // 输出: Dog barks.animalPtr3->makeSound(); // 输出: Cat meows.return 0;
}

在上述示例中,我们定义了一个基类 Animal 和两个派生类 DogCatAnimal 类中的 makeSound 函数并非虚函数,因此在静态联编中,无论使用基类对象还是派生类对象调用该函数,都会调用基类的实现。

然而,当我们使用基类指针或引用指向派生类的对象时,通过动态联编(虚函数)来调用 makeSound 函数时,将根据对象的实际类型来确定应该调用哪个类的实现。这样,我们可以实现多态性,即相同的函数调用可以根据对象的实际类型产生不同的行为。

3.5访问控制

是面向对象编程中的一个重要概念,用于限制类成员的访问权限。通过访问控制,我们可以控制哪些部分的代码可以访问类的成员变量和成员函数,以确保数据的封装性和安全性。

在大多数面向对象编程语言中,通常有以下几种访问控制修饰符:

  1. 公有(Public):公有成员可以在任何地方被访问,包括类的内部和外部。其他类和对象都可以直接访问公有成员。

  2. 私有(Private):私有成员只能在类的内部被访问,其他类和对象无法直接访问私有成员。私有成员通常用于实现类的内部逻辑和数据隐藏。

  3. 保护(Protected):保护成员可以在类的内部和派生类中被访问。派生类中的成员函数可以访问基类的保护成员,但其他类和对象无法直接访问保护成员。

不同的编程语言可能使用不同的关键字来表示这些访问控制修饰符,例如:

  • C++ 中使用 publicprivateprotected 关键字。
  • Java 中使用 publicprivateprotected 关键字。
  • Python 中使用命名约定(例如 _ 前缀)来表示私有成员,而没有严格的访问控制修饰符。

下面是一个 C++ 的示例代码,演示了访问控制的用法:

#include <iostream>class MyClass {
public:    // 公有成员int publicVar;void publicMethod() {std::cout << "This is a public method." << std::endl;}private:   // 私有成员int privateVar;void privateMethod() {std::cout << "This is a private method." << std::endl;}protected: // 保护成员int protectedVar;void protectedMethod() {std::cout << "This is a protected method." << std::endl;}
};int main() {MyClass obj;obj.publicVar = 10;     // 可以直接访问公有成员变量obj.publicMethod();     // 可以直接调用公有成员函数// 下面的语句将导致编译错误,因为私有成员和保护成员无法在外部访问// obj.privateVar = 20; // obj.privateMethod();// obj.protectedVar = 30; // obj.protectedMethod();return 0;
}

在上述示例中,我们定义了一个类 MyClass,其中包含公有、私有和保护成员。在 main 函数中,我们可以直接访问和调用公有成员,但无法访问私有和保护成员。

这种访问控制机制可以帮助我们保护类的内部实现细节,封装数据并提供统一的接口。通过对成员的合理访问控制,我们可以提高代码的安全性、可维护性和可扩展性。

3.6ABC理念

ABC理念是一种管理思想,是Activity-Based Costing(基于活动成本核算)的缩写,有时也被称为Activity-Based Management(基于活动管理)。它在20世纪80年代末由哈佛商学院教授Robert S. Kaplan和Robin Cooper提出,旨在帮助企业更精确地计算成本和经营绩效,以优化产品和服务的设计、生产和销售过程。

ABC理念认为,企业的成本不仅取决于直接材料、直接人工和制造费用等传统成本指标,还受到活动成本的影响。活动成本是指生产或提供产品和服务所需的所有活动和资源的成本,包括设备、人力、能源、时间等。ABC理念通过对活动进行分析和定价,将成本更准确地分配到各个产品、服务或客户上,以便更好地评估其贡献度和盈利能力。

ABC理念的主要思想可以概括为以下几点:

  1. 强调活动的重要性:企业的成本和绩效不仅取决于产品和服务本身,还受到生产和销售过程中的各种活动的影响。因此,要准确计算成本和评估绩效,就需要先详细了解和分析这些活动。

  2. 区分成本驱动因素:ABC理念认为,不同的活动对成本的贡献程度不同。通过区分成本驱动因素(也就是导致各项活动发生的原因),可以更好地了解成本结构和优化资源配置。

  3. 精细计算成本:ABC理念强调将成本精细化到各个活动和产品/服务上,以便更准确地定价和分配成本。这可以帮助企业更好地了解各种产品和服务的盈利能力,并且优化产品和服务的设计、制造和销售过程。

  4. 以客户为中心:ABC理念认为,客户是企业最重要的资产。因此,在分析成本和评估绩效时,要以客户为中心,关注他们的需求和反馈,并根据客户的需求来制定产品和服务的设计、生产和销售策略。

ABC理念在管理实践中得到了广泛应用,特别是在制造业和服务业中。它的主要优点包括:

  1. 更准确地计算成本和评估绩效,有助于优化资源配置和提高盈利能力。

  2. 帮助企业更好地理解产品和服务的盈利能力,以便优化产品和服务的设计、制造和销售过程。

  3. 强调客户需求和反馈,有助于提高客户满意度和忠诚度。

  4. 促进内部控制和管理流程的优化,有助于提高企业效率和效益。

ABC理念也存在一些挑战和限制。例如,实施ABC理念需要大量的数据收集和分析工作,对企业的信息系统和人力资源提出了较高的要求。此外,ABC理念也可能导致某些活动过度成本化,从而影响企业的有效性和效率。因此,在实施ABC理念时需要慎重考虑,并结合实际情况进行适当的调整和优化。

 

相关文章:

C++学习笔记——类继承

目录 一、一个简单的基类 1.1封装性 1.2继承性 1.3虚函数 1.4多态性 二、基类 2.1一个简单的C基类的示例 2.2 Animal是一个基类。 三、继承 3.1概念 3.2is-a关系 3.3多态公有继承 3.4静态联编和动态联编 3.5访问控制 3.6ABC理念 一、一个简单的基类 C中的基类是一…...

ARCGIS PRO SDK 使用条件管理 Pro UI

ARCGIS PRO UI简单介绍以下&#xff1a; 第一步&#xff1a;在Config.daml中在</AddInfo>标签下加上条件<conditions>标签&#xff08;必须添加的&#xff09; <conditions><!-- 定义条件 &#xff0c;此处定义了两个--Tab 另一个为 group><insert…...

Halcon经典的边缘检测算子Sobel/Laplace/Canny

Halcon经典的边缘检测算子 文章目录 Halcon经典的边缘检测算子1. Sobel算子2. Laplace 算子3. Canny 算子4. 总结 关于边缘检测&#xff0c;有许多经典的算子&#xff0c;各大图形处理库都有各自的边缘检测算子&#xff0c;这里简要介绍几种。 1. Sobel算子 Sobel算子结合了高…...

用单片机设计PLC电路图

自记&#xff1a; 见另一篇文章&#xff0c;MOS驱动差了一个充电电容&#xff0c;栅极电容充电会有问题&#xff1b; 光耦用的直插&#xff0c;但板子用的贴片&#xff0c;此文档仅供参考 基本列出了PCB板情况&#xff0c;基础元器件&#xff0c;部分连接&#xff0c;原理等…...

【设计模式-6】建造者模式的实现与框架中的应用

建造者模式又被成为生成器模式&#xff0c;是一种使用频率比较低&#xff0c;相对复杂的创建型模式&#xff0c;在很多源码框架中可以看到建造者的使用场景&#xff0c;稍后我们会在本文末尾展示几个框架的使用案例。  建造者模式所构造的对象通常是比较复杂而且庞大的&#x…...

PositiveSSL和Sectigo的多域名证书

首先&#xff0c;我们要知道PositiveSSL是Sectigo旗下的子品牌&#xff0c;提供多种类型的SSL数字证书&#xff0c;包括DV基础型的多域名SSL证书。Sectigo的SSL证书产品同样比较丰富&#xff0c;不仅有DV基础型多域名SSL证书&#xff0c;还有OV企业型以及EV增强型的多域名SSL证…...

Docker:docker exec命令简介

介绍 docker exec [OPTIONS] 容器名称 COMMAND [ARG...] OPTIONS说明&#xff1a; -d&#xff0c;以后台方式执行命令&#xff1b; -e&#xff0c;设置环境变量 -i&#xff0c;交互模式 -t&#xff0c;设置TTY -u&#xff0c;用户名或UID&#xff0c;例如myuser:myu…...

【大数据进阶第三阶段之Hive学习笔记】Hive的数据类型与数据操作

目录 1、Hive数据类型 1.1、基本数据类型 1.2、集合数据类型 1.3、类型转化 2、DDL数据定义 2.1、创建数据库 2.2、查询数据库 2.3删除数据库 2.4、创建表 2.4.1、内部表 2.4.2、外部表 2.4.3管理表与外部表的互相转换 2.5、分区表&#xff08;partition&#xff…...

GPT2:Language Models are Unsupervised Multitask Learners

目录 一、背景与动机 二、卖点与创新 三、几个问题 四、具体是如何做的 1、更多、优质的数据&#xff0c;更大的模型 2、大数据量&#xff0c;大模型使得zero-shot成为可能 3、使用prompt做下游任务 五、一些资料 一、背景与动机 基于 Transformer 解码器的 GPT-1 证明…...

微创新与稳定性的权衡

之前做过一个项目&#xff0c;业务最高峰CPU使用率也才50%&#xff0c;是一个IO密集型的应用。里面涉及一些业务编排&#xff0c;所以为了提高CPU使用率&#xff0c;我有两个方案&#xff1a;一个是简单的梳理将任务可并行的采用并行流、额外线程池等方式做并行&#xff1b;另外…...

对回调函数的各种讲解说明

有没有跟我师弟一样的童靴~&#xff0c;学习和使用ROS节点时&#xff0c;对其中的callback函数一直摸不着头脑的&#xff0c;以下这么多回调函数的讲解&#xff0c;挨个看&#xff0c;你总会懂的O.o 回调函数怎么调用,如何定义回调函数&#xff1a; 回调函数怎么调用,如何定义…...

Java多线程:创建多线程的三种方式

在Java中&#xff0c;有三种方式创建多线程&#xff0c;继承类Thread&#xff0c;继承接口Runnable&#xff0c;继承接口Callable。其中Thread和Runnable需要重写方法run&#xff0c;方法run没有返回值&#xff1b;Callable需要重写方法call&#xff0c;方法call可以返回值。 …...

Unity中打印信息的两种方式

不继承MonoBehaviour的普通C#类中打印信息&#xff1a; 使用Debug类的方法&#xff1a; Unity提供了Debug类&#xff0c;其中包含了一些用于打印信息的静态方法。以下是常用的几种方法&#xff1a; Debug.Log(message)&#xff1a;打印普通信息。Debug.LogWarning(message)&a…...

给定n个字符串s[1...n], 求有多少个数对(i, j), 满足i < j 且 s[i] + s[j] == s[j] + s[i]?

题目 思路&#xff1a; 对于字符串a&#xff0c;b, (a.size() < b.size()), 考虑对字符串b满足什么条件&#xff1a; 由1、3可知a是b的前后缀&#xff0c;由2知b有一个周期是3&#xff0c;即a.size()&#xff0c;所以b是用多个a拼接而成的&#xff0c;有因为a是b的前后缀&…...

Linux磁盘空间与文件大小查看命令详解

1. 查看磁盘空间大小 在Linux系统中&#xff0c;有多个命令可以用来查看磁盘空间的使用情况。最常用的命令是df&#xff08;disk free&#xff09;。 df -hdf命令的 -h 选项以人类可读的方式显示磁盘空间&#xff0c;该命令将显示文件系统的使用情况、剩余空间等信息。 2. 查看…...

网络通信过程的一些基础问题

客户端A在和服务器进行TCP/IP通信时&#xff0c;发送和接收数据使用的是同一个端口吗&#xff1f; 这个问题可以这样来思考&#xff1a;在客户端A与服务器B建立连接时&#xff0c;A需要指定一个端口a向服务器发送数据。当服务器接收到A的报文时&#xff0c;从报文头部解析出A的…...

STL——stack容器和queue容器详解

目录 &#x1f4a1;stack &#x1f4a1;基本概念 常用接口 &#x1f4a1;queue &#x1f4a1;基本概念 &#x1f4a1;常用接口 &#x1f4a1;stack &#x1f4a1;基本概念 栈&#xff08;stack&#xff09;&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端…...

django websocket实现聊天室功能

注意事项channel版本 django2.x 需要匹配安装 channels 2 django3.x 需要匹配安装 channels 3 Django3.2.4 channels3.0.3 Django3.2.* channels3.0.2 Django4.2 channles3.0.5 是因为最新版channels默认不带daphne服务器 直接用命令 python manage.py runsever 默认运行的是w…...

软件测评中心▏性能测试之压力测试、负载测试的区别和联系简析

在如今的信息时代&#xff0c;软件已经成为人们日常工作和生活不可或缺的一部分。然而&#xff0c;随着软件的发展和应用范围的不断扩大&#xff0c;软件性能的优劣也成为了影响用户使用体验的重要因素。 软件性能测试即对软件在不同条件下的性能进行评估和验证的过程。通过模…...

Go 语言 panic 和 recover 详解

panic() 和 recover() 是 Go 语言中用于处理错误的两个重要函数。panic() 函数用于中止程序并引发panic&#xff0c;而 recover() 函数用于捕获panic并恢复程序的执行。 什么是panic和recover&#xff1f; panic panic() 函数用于中止程序并引发panic。panic() 函数可以接收…...

NAND Separate Command Address (SCA) 接口数据传输解读

在采用Separate Command Address (SCA) 接口的存储产品中&#xff0c;DQ input burst和DQ output burst又是什么样的策略呢&#xff1f; DQ Input Burst: 在读取操作期间&#xff0c;数据以一种快速并行的方式通过DQ总线传送到控制器。在SCA接口下&#xff0c;虽然命令和地址信…...

彻底认识Unity ui设计中Space - Overlay、Screen Space - Camera和World Space三种模式

文章目录 简述Screen Space - Overlay优点缺点 Screen Space - Camera优点缺点 World Space优点缺点 简述 用Unity中开发了很久&#xff0c;但是对unity UI管理中Canvas组件的Render Mode有三种主要类型&#xff1a;Screen Space - Overlay、Screen Space - Camera和World Spa…...

档案数字化怎样快速整理资料

对于机构和组织来说&#xff0c;档案数字化是一个重要的信息管理和保护措施。要快速整理资料进行档案数字化&#xff0c;可以遵循以下步骤&#xff1a; 1. 准备工具和设备&#xff1a;确保有一台计算机、扫描仪和相关软件。 2. 分类和组织资料&#xff1a;先将资料分类&#xf…...

面试算法100:三角形中最小路径之和

题目 在一个由数字组成的三角形中&#xff0c;第1行有1个数字&#xff0c;第2行有2个数字&#xff0c;以此类推&#xff0c;第n行有n个数字。例如&#xff0c;下图是一个包含4行数字的三角形。如果每步只能前往下一行中相邻的数字&#xff0c;请计算从三角形顶部到底部的路径经…...

androj studio安装及运行源码

抖音教学视频 目录 1、 jdk安装 2、下载安装androj studio 3 、打开源码安装运行相关组件 4、 安装模拟器 1、 jdk安装 安卓项目也是java开发的&#xff0c;运行在虚拟机上&#xff0c;安装jdk及运行的时候&#xff0c;就会自动生成虚拟机&#xff0c; jdk前面已经讲过&…...

【Web】token机制

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Web ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 机制基本&#xff1a; 优势&#xff1a; 结语 我的其他博客 前言 在当今互联网时代&#xff0c;安全、高效的用户身份验证和资源授…...

JVM 11 调优指南:如何进行JVM调优,JVM调优参数

JVM 11的优化指南&#xff1a;如何进行JVM调优&#xff0c;以及JVM调优参数有哪些”这篇文章将包含JVM 11调优的核心概念、重要性、调优参数&#xff0c;并提供12个实用的代码示例&#xff0c;每个示例都会结合JVM调优参数和Java代码 本文已收录于&#xff0c;我的技术网站 dd…...

横版动作闯关游戏:幽灵之歌 GHOST SONG 中文版

在洛里安荒凉的卫星上&#xff0c;一件长期休眠的死亡服从沉睡中醒来。踏上发现自我、古老谜团和宇宙骇物的氛围2D冒险之旅。探索蜿蜒的洞穴&#xff0c;获得新的能力来揭开这个外星世界埋藏已久的秘密。 游戏特点 发现地下之物 探索这个广阔而美丽如画&#xff0c;充满密室和诡…...

【C++】:C++中的STL序列式容器vector源码剖析

⛅️一 vector概述 vector的使用语法可以参考文章&#xff1a;​ 总的来说&#xff1a;vector是可变大小数组 特点&#xff1a; 支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢 元素保存在连续的内存空间中&#xff0c;因此通过下标取值非常快 在容器中间位置添加…...

final

//用final修饰的成员变量,必须在声明时或代码块中或构造函数中进行赋值 //但是在声明同时赋值或者代码块中赋值,赋值后不能改变,如果想改变 需要在构造方法中赋值...

东莞网站关键排名/女教师遭网课入侵视频大全集

1&#xff1a;Esri在开源领域做过哪些工作&#xff1f; Esri一直以来就是开源技术的用户和支持者。我们相信&#xff0c;通过提供从上到下的开放平台可使我们的用户成为开发能力强大的解决方案的积极参与者。在现有技术形势下&#xff0c;我们正在将我们的想法集成到开源项目中…...

保定网站制作套餐/交换链接适合哪些网站

参考链接: Matplotlib官网 参考链接: Python数据分析与展示 参考链接: Matplotlib官网 API Overview 实验1:简单画图 # 实验1:简单画图 import matplotlib.pyplot as plt plt.plot([3,1,4,5,2]) # 只传入一个列表时,默认作为Y轴,x轴是列表索引 plt.ylabel("grade4cxq&q…...

如何做网站粘贴广告/在线友情链接

2023/4/6 疑问&#xff1a;1、使用mybatisplus进行字段匹配时发生字段不存在错误&#xff0c;不知道是不是因为xml中进行了字段映射&#xff0c;导致冲突。 2、使用分页查询时&#xff0c;某个条件包含多个字段时&#xff0c;不要只想着用eq()&#xff0c;可用in()。 3、在…...

asp网站 复制/哪里有永久免费建站

在QTableWidget表格部件中&#xff0c;如果需要实现表格中各列要占满部件中的可用空间&#xff0c;同时实现各列平分所有空间&#xff0c;有两种方法来实现。 方法一、设置水平表头的sectionResizeMode为Stretch 当水平表头的sectionResizeMode设置为QHeaderView.Stretch后&am…...

南宁网络企业网站/网站收录查询代码

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 今天遇到一个问题,一个Bitmap封装到BitmapDrawable中 ,BitmapDrawable drawable new BitmapDrawable(bmp)&#xff0c; Bitmap.getWidth() ! BitmapDrawable.getIntrinsicWidth().导致一些问题&…...

wordpress的cms主题/怎么制作网站详细流程

图[一]下面我们就开始讲与文字内容有关的排版操作。首先是文章中字体和字号的设定。一般的文档正文部分都是用宋体小四或五号字&#xff0c;文章中的小标题可以用黑体三号字&#xff0c;文章的总标题用黑体一号或小一号字。当然&#xff0c;这只是常用的标准。我们还可以根据对…...