掌握构造函数:打破面向对象编程难题

news2024/12/23 5:31:36

在这里插入图片描述

文章目录

  • I. 介绍
    • 解释构造函数的概念及其作用
    • 为什么构造函数是面向对象编程中至关重要的一部分
  • II. 创建构造函数
    • 介绍如何定义并创建一个构造函数
    • 着重介绍构造函数的语法和使用方法
      • 定义一个构造函数
      • 创建一个对象实例
      • 使用对象实例
      • 继承和原型
  • III. 构造函数的参数
    • 介绍构造函数的参数以及它们的作用
    • 如何定义构造函数的参数
    • 着重介绍构造函数的默认参数和可选参数
      • 使用短路运算符
      • 使用默认函数参数语法
  • IV. this 关键字
    • 解释 this 关键字的作用
    • 为什么在构造函数中使用 this 关键字是必要的
    • 演示如何在构造函数中正确使用 this 关键字
  • V. 使用构造函数创建对象
    • 介绍如何使用构造函数来创建对象
    • 演示一个简单的例子,展示如何通过构造函数创建一个对象并访问其中的属性和方法
  • VI. 总结
    • 简述构造函数的重要性和实用性
    • 在编写面向对象的代码时考虑使用构造函数

I. 介绍

解释构造函数的概念及其作用

构造函数是一种特殊的函数,它在创建实例对象时被调用

其作用是为对象初始化它的属性和方法,即为对象的内部状态进行初始化

换句话说,构造函数为你创建的每个对象提供了一个初始化模板,以确保对象始终以预期方式创建。

构造函数的另一个重要作用是,它能够避免对对象的重复实例化。如果对象需要在程序的不同部分进行多次实例化,那么使用构造函数可以更好地进行对象的重复使用,并避免代码的重复编写。

总结来说,构造函数是 OOP 中的一个重要概念,可以直接影响一个对象的属性和行为。正确使用构造函数可以使您的代码更加模块化、可读性更高,并有助于管理、使用和维护编写的代码。

为什么构造函数是面向对象编程中至关重要的一部分

构造函数是面向对象编程中的重要部分,因为它们支持了对象的创建和初始化。在面向对象编程中,构造函数是用于创建新对象的过程中实现对象状态初始化的一种方式

使用构造函数的好处是,当创建一个新的对象时,它能够自动初始化所有的属性和方法,从而确保对象的内部状态始终保持一致。同时,它还能够避免对对象进行重复实例化的问题

除了初始化作用,使用构造函数还可以将对象实例与类实例分离开。例如,可以创建一个对象时使用特定的属性和方法,而对于同一个类的另一个对象,可能具有不同的属性和方法,这使得代码更加模块化,更易于维护和扩展。

另外,构造函数可以被继承,这意味着子类可以继承父类的属性和方法,并在自己的构造函数中新增或覆盖这些属性和方法,从而创建更具有特异性和差异性的子类对象。

因此,无论是在开发过程中还是在面试中,掌握构造函数的使用都是非常重要的,它可以帮助您编写更清晰、可读性更强以及功能性更好的面向对象代码。

II. 创建构造函数

介绍如何定义并创建一个构造函数

定义并创建一个构造函数的基本步骤如下:

1. 创建一个JavaScript函数,名字可以是你喜欢的任何名称(注意第一个字母通常大写),例如:

function Car() {}

2. 在构造函数中定义该类的属性和方法,例如:

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
  this.start = function() {
    console.log("Engine started");
  };
}

3. 在JavaScript中,每个对象都是通过从构造函数中创建的

因此,要从对象实例中访问构造函数中定义的属性和方法,需要使用 this 关键字。在构造函数中,通过 this 将属性和方法附加到新对象上。

4. 最后,通过 new 关键字使用构造函数创建对象:

let myCar = new Car("Ford", "Mustang", 2022);

通过这个实例化过程,myCar 对象继承了 Car() 的所有属性和方法,并初始值为 "Ford", "Mustang", 和 2022 这些值。

正如上述例子所示,定义和创建构造函数是简单明了的,不仅可以指定每个对象的初始值,还可以绑定属性和方法。最终,它会生成一个 JavaScript 对象,可以在代码的各个部分中重复使用。

着重介绍构造函数的语法和使用方法

构造函数是一个用于创建对象实例的函数,它的语法和使用方法如下:

定义一个构造函数

要定义一个构造函数,我们需要创建一个函数并给它一个名称。按照惯例,它的名称必须以大写字母开头,以便与普通函数区分。例如:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

在这个函数中,我们使用了关键字 this 来指代该函数创建的对象实例本身。我们除了可以在其中定义属性外,还可以在其中定义方法。在这个例子中,我们只定义了两个属性:nameage

创建一个对象实例

要创建一个对象实例,我们需要使用 new 关键字。例如:

let john = new Person('John', 30);

这将创建一个名为 john 的新对象,并设置它的名称为 'John',年龄为 30

使用对象实例

我们可以使用 dot notation 来访问和修改对象实例中的属性和方法。例如:

console.log(john.name); // 输出 "John"
john.age = 31;
console.log(john.age); // 输出 "31"

继承和原型

构造函数允许我们利用原型链来继承属性和方法。如果我们想让 Person 构造函数中创建的所有对象都拥有一个方法,我们可以将这个方法添加到 Person 的原型上。例如:

Person.prototype.sayHello = function() {
  console.log('Hello, my name is ' + this.name + ', and I am ' + this.age + ' years old.');
}

现在,我们刚创建的 john 对象可以访问 sayHello() 方法了:

john.sayHello(); // 输出 "Hello, my name is John, and I am 31 years old."

使用构造函数,我们可以轻松创建对象并对其进行建模。它还提供了一些有用的特性,例如继承,以及让我们编写更易于维护和扩展的代码。

III. 构造函数的参数

介绍构造函数的参数以及它们的作用

构造函数的参数是在创建对象实例时传递给构造函数的值。它们可以用于设置对象实例的属性和执行构造函数中的函数。

构造函数的参数有以下作用:

1. 设置对象实例的属性

构造函数可以使用参数为对象实例的属性赋值。例如,假设我们有一个名为 Person 的构造函数,它需要传递 名字年龄 的参数。

function Person(name, age) {
  this.name = name;
  this.age = age;
}

let john = new Person('John', 30);
console.log(john.name); // 输出 "John"
console.log(john.age); // 输出 "30"

在这个例子中,我们将构造函数的参数 nameage 用于设置新的 Person 对象实例中的 nameage 属性。

2. 执行构造函数中的函数

构造函数可以包含除了设置属性之外的其他函数。这些函数可以利用传递给构造函数的参数来执行一些操作。例如:

function Person(name, age) {
  this.name = name;
  this.age = age;
  this.sayHello = function() {
    console.log('Hello, my name is ' + name + ', and I am ' + age + ' years old.');
  }
}

let john = new Person('John', 30);
john.sayHello(); // 输出 "Hello, my name is John, and I am 30 years old."

在这个例子中,我们添加了一个 sayHello() 的方法,该方法使用 nameage 属性来生成一条问候语,并将其输出到控制台。我们在构造函数中将这个方法作为对象实例的属性创建。

总的来说,构造函数的参数可以用来初始化对象实例的属性,并执行各种有用的任务。在创建对象实例时,可以传递参数以自定义对象的行为和属性。

如何定义构造函数的参数

定义构造函数的参数很简单,只需在构造函数的括号内添加参数即可。例如,假设我们有一个名为 Person 的构造函数,并且我们想为其添加一个 name 和一个 age 参数:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

在这个例子中,我们使用了 nameage 作为参数名称,并将它们作为属性绑定到新对象实例上。

当我们调用这个构造函数以创建新的 Person 对象时,我们将nameage 参数传递到构造函数中:

let john = new Person('John', 30);
let jane = new Person('Jane', 25);

在这里,我们在创建 johnjane 对象时,分别传递了 "John"30,以及 "Jane"25 作为参数。这将设置每个对象实例的 nameage 属性。

可以根据需要为构造函数添加任意数量的参数,这些参数将成为新对象实例的属性。例如:

function Product(name, price, description) {
  this.name = name;
  this.price = price;
  this.description = description;
}

let phone = new Product('iPhone', '999.99', 'The latest smartphone from Apple');

在这个例子中,我们添加了一个 description 参数,并将其作为对象实例的 description 属性。

着重介绍构造函数的默认参数和可选参数

JavaScript 中,构造函数可以通过以下两种方式来设置默认参数和可选参数:使用短路运算符或使用默认函数参数语法。

使用短路运算符

使用短路运算符,可以以一种简单的方式为构造函数设置默认参数和可选参数。例如,假设我们有以下 Person 构造函数:

function Person(name, age) {
  this.name = name || 'Unknown';
  this.age = age || 0;
}

在这个例子中,我们使用短路运算符 || 来为构造函数设置默认参数值。如果 nameage 为 falsey 值(例如 undefined、 null、0、空字符串等),则短路运算符返回 ‘Unknown’ 或 0,进而为参数设置默认值。

现在,我们可以通过如下方式创建 Person 对象:

let john = new Person('John', 30);
let jane = new Person();

这将创建一个 john 对象,它的 name 为 ‘John’, age 为 30,同时也将创建一个 jane 对象,它的 name 为 ‘Unknown’,age 为 0。

使用默认函数参数语法

ECMAScript 6 引入了函数默认参数语法,该语法也可用于构造函数。例如,我们可以使用默认函数参数语法来为 Person 构造函数设置默认参数值:

function Person(name = 'Unknown', age = 0) {
  this.name = name;
  this.age = age;
}

现在,我们可以通过如下方式创建 Person 对象:

let john = new Person('John', 30);
let jane = new Person();

这仍然会创建一个 john 对象,它的 name 为 ‘John’, age 为 30,同时也将创建一个 jane 对象,它的 name 为 ‘Unknown’,age 为 0。

注意,使用默认参数语法时,构造函数参数的默认值不仅仅限于原始值。也可以根据需要使用对象、数组和函数等数据类型。

总的来说,通过使用短路运算符或默认函数参数语法,可以轻松设置构造函数的默认参数和可选参数,并提高构造函数的灵活性和重用性。

IV. this 关键字

解释 this 关键字的作用

在 JavaScript 中, this 关键字指向当前执行代码的对象。这通常是当前函数所属的对象。当我们在构造函数内使用 this 关键字时,它引用的就是该构造函数创建的对象实例本身。

例如,假设我们有以下的 Person 构造函数:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

在这个构造函数中,我们使用 this 来设置对象实例的 nameage 属性。在创建新的对象实例时,通过 new 关键字对构造函数进行调用,以生成对该函数的新引用。这种方式将 this 绑定到新生成的对象实例上,并使我们可以使用点符号访问对象实例的属性和方法。

例如,使用上面的例子,我们可以这样创建对象实例:

let john = new Person('John', 30);

在这个例子中, this.name 将被设置为 ‘John’, this.age 将被设置为 30。通过使用 new 关键字,我们还可以访问新 Person 对象实例的 nameage 属性:

console.log(john.name); // 输出 "John"
console.log(john.age); // 输出 30

此外,this 关键字还可以用于访问当前执行代码的上下文。在全局上下文中,this 引用全局对象(在浏览器中是 window 对象,在 Node.js 中是 global 对象)。在函数内部,this 引用调用该函数的对象。

总之,this 关键字在 JavaScript 中是一个很重要的概念,它使得我们能够在构造函数和其他函数内部访问对象实例,并且在函数中引用调用函数的上下文。

为什么在构造函数中使用 this 关键字是必要的

在构造函数中使用 this 关键字是必要的,因为它允许我们引用新创建的对象实例。在创建对象实例时,使用构造函数可以初始化该实例,并将该实例的属性和方法绑定到它自己上面。

如果没有使用 this 关键字,我们就无法引用新创建的对象实例,并且无法在实例上绑定属性和方法,这意味着我们将失去使用构造函数的优势。

例如,在上面的例子中,我们使用 this 关键字来设置对象实例的属性。如果没有使用 this,我们将无法在构造函数中引用新创建的对象实例,并设置该实例的属性和方法:

function Person(name, age) {
  name = name; // ERROR:这是常规的局部变量赋值,不会将名称和年龄绑定到对象实例上
  age = age; // ERROR:这是常规的局部变量赋值,不会将名称和年龄绑定到对象实例上
}

在这个例子中,我们使用了常规的变量赋值,而不是 this 关键字,这意味着我们无法将传递给构造函数的参数与新创建的对象实例绑定。当我们创建新的 Person 对象时,这些属性将不会在新对象中可见。

因此,使用 this 关键字的目的是绑定对象实例到构造函数中,并将实例属性和方法绑定到该实例上。这是使用构造函数创建 JavaScript 对象的基础,而没有使用 this 是无法完成这项工作的。

演示如何在构造函数中正确使用 this 关键字

当创建构造函数时,正确使用 this 关键字非常重要。

以下是一个示例,演示了使用 this 来初始化对象实例的方法:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

let john = new Person('John', 30);
console.log(john.name); // 输出 "John"
console.log(john.age); // 输出 30

在这个示例中,我们定义了一个 Person 构造函数,并在其中使用 this 来设置对象实例的 nameage 属性。当我们通过 new Person('John', 30) 创建新的 Person 对象实例时,this 关键字将指向该新创建的对象实例。这允许我们将对象实例的属性绑定到该实例上。

john 对象实例中,this.name 被设置为 ‘John’,this.age 被设置为 30。我们可以通过使用点符号 . 访问这些属性来验证对象实例的属性是否正确地被绑定到该对象实例上。

在这个例子中,正确使用 this 关键字非常关键,因为它使我们能够将对象实例属性绑定到新创建的对象实例上。如果没有使用 this,我们无法访问新创建的对象实例,从而无法将对象实例属性绑定到对象实例上。

V. 使用构造函数创建对象

介绍如何使用构造函数来创建对象

JavaScript 中,可以使用构造函数来创建对象。构造函数是一个特殊的函数,当使用 new 关键字创建新对象实例时,该函数将被调用,并用于初始化新对象实例的属性和方法。

以下是使用构造函数创建对象的基本步骤:

1. 创建一个构造函数

构造函数可以是普通函数,但遵循特定的命名约定,即函数名以大写字母开头。例如,Person 是一个有效的构造函数名:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

在这个例子中,我们定义了一个 Person 构造函数,该构造函数具有 nameage 属性。

2. 实例化对象

使用 new 关键字创建新的对象实例。在这个例子中,我们使用 new Person('John', 30) 来创建新的 Person 对象实例:

let john = new Person('John', 30);

在这个例子中,我们传递 ‘John’ 和 30 作为参数,这些参数将在 Person 构造函数中被使用。

3. 访问对象属性和方法

创建对象实例后,我们可以使用点符号 . 来访问对象属性和方法。例如,在上面的例子中,我们可以访问 john 对象实例的 nameage 属性:

console.log(john.name); // 输出 "John"
console.log(john.age); // 输出 30

这使我们能够访问和使用 Person 对象实例的属性和方法。

总的来说,通过使用 new 关键字和构造函数,我们可以轻松地创建和初始化 JavaScript 对象实例。使用构造函数创建对象的核心在于构造函数本身,它定义了对象的属性和方法,并在实例化对象时被调用。

演示一个简单的例子,展示如何通过构造函数创建一个对象并访问其中的属性和方法

下面是一个简单的例子,展示了如何通过构造函数创建一个对象,以及如何访问该对象中的属性和方法:

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
  
  this.start = function() {
    console.log(`${this.make} ${this.model} starts.`);
  };
  
  this.stop = function() {
    console.log(`${this.make} ${this.model} stops.`);
  };
}

let honda = new Car('Honda', 'Civic', 2022);

console.log(honda.make); // 输出 "Honda"
console.log(honda.model); // 输出 "Civic"
console.log(honda.year); // 输出 2022

honda.start(); // 输出 "Honda Civic starts."
honda.stop(); // 输出 "Honda Civic stops."

在这个例子中,我们定义了一个 Car 构造函数,该构造函数具有 makemodelyear 属性,以及 startstop 方法。使用 new 关键字,我们实例化了一个新的 Car 对象,传递 ‘Honda’、‘Civic’ 和 2022 作为参数。当我们通过 honda 对象实例访问 makemodelyear 属性时,它们将返回我们在实例化对象时指定的值。

我们还可以通过 honda.start()honda.stop() 方法调用对象实例的 startstop 方法。这些方法使用 this 关键字引用当前对象实例的属性。

总的来说,这个例子演示了如何使用构造函数创建对象,并展示了如何访问和使用对象实例的属性和方法。

VI. 总结

简述构造函数的重要性和实用性

构造函数是 JavaScript 中的一个重要概念,它允许我们创建并初始化具有特定属性和方法的对象。

构造函数的重要性和实用性如下:

1. 可以创建多个实例

使用构造函数,我们可以轻松地创建多个具有相同属性和方法的对象实例。这意味着我们可以重复使用相同的代码,并创建多个对象,而不必为每个对象重复编写相同的代码。

2. 初始化对象属性

通过构造函数,我们可以设置对象实例的属性并对其进行初始化。这意味着我们可以通过构造函数确保每个对象实例都具有相同的属性值,从而保持代码的一致性和可维护性。

3. 可以使用继承

使用构造函数,我们可以使用 JavaScript 中的原型链继承模型来扩展对象的功能。这意味着我们可以定义一个基本构造函数,并扩展其功能以创建其他类型的对象。

4. 可以避免全局变量

使用构造函数,我们可以避免使用全局变量,从而减少代码中的命名冲突和不必要的复杂性。对象实例通过局部变量进行维护,这使得代码更加清晰和可理解。

总之,构造函数是 JavaScript 编程的基础概念之一,是创建和实例化对象的关键。它们为代码提供了结构,简化了对多个对象实例进行维护的任务,并为程序员提供了一种有效的方式来创建和初始化对象。

在编写面向对象的代码时考虑使用构造函数

在编写面向对象的代码时,使用构造函数是一种优雅的方式来创建和初始化对象实例。这种方法可以帮助我们组织代码,并将对象实例的属性和方法放在一起,以便更轻松地管理和维护代码。

以下是一些要考虑使用构造函数的情况:

  1. 当需要创建多个相似的对象实例时,可以使用构造函数来减少代码量并提高代码可维护性。

  2. 当需要初始化对象实例的属性值时,可以使用构造函数来设置这些属性。这有助于确保每个对象实例具有相同的属性值,从而提高代码的一致性和可读性。

  3. 当需要使用继承扩展对象时,可以使用构造函数作为基类,并为其添加子类或新的对象类型。这可以帮助我们复用代码,并将一些共同的功能提取出来。

  4. 当需要避免使用全局变量时,可以使用构造函数来创建对象实例。这有助于减少命名冲突和复杂性,并使代码更加模块化和易于维护。

总之,使用构造函数是一种有效的方式来创建和初始化对象实例,它可以帮助我们组织代码,并提高代码的可读性、可维护性和可重用性。因此,在编写面向对象的代码时考虑使用构造函数是非常值得的。

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

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

相关文章

模拟测试 青少年软件编程(Python)等级考试试卷(一级) 试题解析

【单选题】(每题2分) 1、与a>b and b>c等价的是?( ) A、a>b or b>c B、a>b>c C、a>b or not b D、not a 正确答案:B 试题解析:a>b并且b>c,那么a…

施工作业票管理

施工作业票管理是建筑行业中的一项重要管理,它是指在进行安全施工前,必须依据工程特点及安全要求,制定符合施工现场实际情况的施工作业方案,并按照程序进行作业申请及作业批准的程序书。比如说吊装作业票,高空作业票&a…

控制请求来源的HTML Meta标签 - Referrer详解

83. 控制请求来源的HTML Meta标签 - Referrer详解 在Web开发中&#xff0c;为了保护用户的隐私和安全&#xff0c;控制请求的来源信息是至关重要的。HTML中的<meta>标签提供了一种简单而有效的方式来控制请求的来源&#xff0c;其中包括Referrer&#xff08;引荐者&…

NVIDIA Jetson TX1,TX2,TX2 NX,AGX Xavier 和 Nano开发板GPIO口配置及应用

NVIDIA Jetson TX1&#xff0c;TX2&#xff0c;TX2 NX&#xff0c;AGX Xavier 和 Nano开发板GPIO口配置及应用 简介 ​ Jetson TX1、TX2、TX2 NX、AGX Xavier和Nano开发板都配备了一个包含40个引脚的GPIO接头&#xff0c;这些引脚可以用于数字输入输出。如下图 ​ 类似于Rasp…

cesium系列:根据中心点绘制圆和返回离某点最近的一个点的方法

1.背景 有需求写一个方法cesium 提供一个代码方法接收参数为function aaa(point1,point2,radius,num)其中点1和点2是经度纬度高度对象&#xff0c; 以point2为圆心&#xff0c;radius为半径生成一个圆弧&#xff0c;并创建一个数组在圆弧上均匀生成 num个点,点需要包含经纬高,…

2023年江西省研究生数学建模竞赛题目三解题思路

为了竞赛公平性&#xff0c;本人只提供思路&#xff0c;不提供具体的解决方法&#xff0c;欢迎交流讨论。给你们分享省赛特等奖的解题思路&#xff0c;哈哈哈&#xff0c;欢迎评论区讨论。这里给出第三题的解题思路。第二题的思路在这里&#xff1a;2023年江西省研究生数学建模…

打造加速组织变革的PMO—新药研发PMO实践分享︱先声药业研发PMO负责人

先声药业研发PMO负责人谢少斐先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;打造加速组织变革的PMO—新药研发PMO实践分享。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 2023年生物医药…

力扣 110. 平衡二叉树

题目来源&#xff1a;https://leetcode.cn/problems/balanced-binary-tree/description/ C题解1&#xff1a;递归法&#xff0c;后续遍历&#xff0c;从叶子节点开始&#xff0c;判断左右子树的深度差是否大于1。 /*** Definition for a binary tree node.* struct TreeNode {…

搭建OpenGL开发环境

资料 安装教程 软件下载 Visual Studio 2019CMakeGLFWGLAD glfw 3.3.8 下载glfw的目的&#xff1a; 获取压缩包里的include生成glfw3.lib 获取include 解压找到Include&#xff0c;include包含GLFW文件夹 生成glfw3.lib 使用CMake生成GLFW的工程文件在生成的目录中找…

基于OpenCV的傅里叶变换

基于OpenCV的傅里叶变换 傅里叶变换&#xff0c;表示能将满足一定条件的某个函数表示成三角函数&#xff08;正弦和/或余弦函数&#xff09;或者它们的积分的线性组合。在图像中变化剧烈的地方&#xff08;比如边界&#xff09;经过傅里叶别换后就相当与高频&#xff0c;反之变…

研究发现,电源指示灯的闪烁也能泄露密码

在巧妙的旁路攻击中&#xff0c;一组学者发现可以通过分析设备电源 LED 指示灯的变化来破解设备密钥。 内盖夫本古里安大学和康奈尔大学的研究人员在一项研究中表示&#xff0c;CPU 执行的密码计算会改变设备的功耗&#xff0c;从而影响设备电源 LED 的亮度。通过利用这一观察…

Git使用与配置

Git分布式版本控制工具 一、Git安装与配置 Git基本配置 打开Git Bash 设置用户信息 # 配置用户名和用户邮箱 git config --global user.name xxx git config --global user.email xxxxx.com查看用户信息 # 查看用户名和用户邮箱 git config --global user.name git config --g…

HVV蓝队扫盲,关于HVV你不知道的全在这

HVV蓝队扫盲,关于HVV你不知道的全在这 1.蓝队实战阶段职责分工2.蓝队防守的四个阶段3.蓝队常用防护手段4.蓝队常用安全设备边界防御设备安全检测设备流量监测设备终端防护设备威胁情报系统5.蓝队作战的三个阶段6.演练禁止采用的攻击方式1.蓝队实战阶段职责分工 1、领导小组。为…

【零基础入门学习Python---Python面向对象编程保姆级教程】

&#x1f680; Python &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

QT Creator上位机画波形之Qcharts使用学习

先看一个Qcharts的简单demo Qcharts是QT自带的组件&#xff0c;不需要另外添加文件。 打开QT Creator&#xff0c;新建一个工程&#xff0c;命名可以参考下图&#xff1a; 基类选择QWidget&#xff1a; .pro文件中添加charts模块 main.cpp源码&#xff1a; #include "…

Nginx配置块location及rewrite详解

目录 一、location配置块详解 1.location 大致分为三类 2.location 常用的匹配规则 3.location 匹配的优先级 4.location 匹配流程 5.location 的实际使用 二、if 模块常用的nginx全局变量 三、rewrite详解 1.rewrite简介 2.rewrite实现跳转原理 3.rewrite 执行顺序 …

房企如何向制造业学习,提高运营效率,降本增效?

导语 | 近年来&#xff0c;随着外部环境的变化&#xff0c;国内的房地产市场受到了很大的冲击&#xff0c;也发生了显著的变化。很多人都认为房地产行业已经迎来了「青铜时代」甚至是「黑铁时代」&#xff0c;已由过去的「高杠杆、高增长、高利润」经营模式转变为「低利润、低增…

借助 VMware 技术加快数字化优先、客户至上的银行业的发展

迎接下一波客户至上的银行业创新浪潮 金融服务业对颠覆并不陌生。对于许多机构来说&#xff0c;新冠疫情的突然爆发&#xff0c;戏剧性地证明了运营敏捷性的价值。这些机构不仅加倍重视数字化体验&#xff0c;而且迅速适应了新情况&#xff1a;打破障碍&#xff0c;采用新技术…

【数据结构OJ题】链表带环问题

目录 1.判断链表是否带环 证明 2.寻找环的入口点 1.判断链表是否带环 原题链接&#xff1a;力扣 思路一&#xff1a;先遍历一遍链表&#xff0c;计算出链表的长度&#xff0c;然后将长度除二&#xff0c;在遍历半个链表即可。但是这种方法效率比较低。 思路二&#xff1a;…

【软考网络管理员】2023年软考网管初级常见知识考点(30)-文件管理与传送控制

涉及知识点 文件管理的概念&#xff0c;绝对路径和相对路径&#xff0c;设备管理&#xff0c;IO控制方式有哪些。 软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&#xff0c;更…