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

C++学习笔记“类和对象”:多态;

目录

4.7 多态

4.7.1 多态的基本概念

 4.7.2 多态案例--计算器类

4.7.3 纯虚函数和抽象类 

4.7.4 多态案例二 - 制作饮品

4.7.5 虚析构和纯虚析构

4.7.6 多态案例三-电脑组装 


4.7 多态

4.7.1 多态的基本概念

多态是C++面向对象三大特性之一

多态分为两类

  • 静志多态: 函数重载 和 运算符重载属于静态多态,复用函数名
  • 动态多态: 派生类和虚函数实现运行时多态

静志多态和动态多态区别:

  • 静态多态的函数地址早绑定 - 编译阶段确定函数地址
  • 动态多态的函数地址晚绑定 - 运行阶段确定函数地址

下面通过案例进行讲解多态

#include <iostream>
using namespace std;// 多态的基本概念// 动物类
class Animal {
public:virtual void speak() {// 虚函数,子类可以重写cout << "动物说话" << endl;}
};// 猫类
class Cat : public Animal {
public:void speak() {cout << "猫说话" << endl;}
};// 狗类
class Dog : public Animal {
public:void speak() {cout << "狗说话" << endl;}
};// 动态多态满足条件
// 1. 有继承关系
// 2. 父类有一个虚函数
// 3. 子类重写了父类的虚函数// 动态多态使用
// 父类的指针或引用指向子类的对象,调用父类的函数,实际调用的是子类的函数//执行说话的函数
void speak(Animal& animal) {// 这里的Animal&参数表示传入的是Animal类的引用animal.speak();// 调用Animal类的speak()函数
}void test() {Cat cat;// 实例化一个猫对象Dog dog;// 实例化一个狗对象speak(cat); // 输出 "猫说话"speak(dog); // 输出 "狗说话"
}int main() {test();return 0;
}

总结:
多态满足条件

  • 有继承关系
  • 子类重写父类中的虚函数

多态便用条件

  • 父类指针或引用指向子类对象

重写:函数返回值类型 函数名 参数列表 完全一致称为重写

 4.7.2 多态案例--计算器类

案例描述:
分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类
多态的优点:

  • 代码组织结构清晰
  • 可读性强
  • 利于前期和后期的扩展以及维护

示例:

#include <iostream>
using namespace std;// 多态案例--计算器类
// 案例描述:设计一个计算器类,分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类// 普通写法
class Calculator {
public:int getResult(string oper) {if (oper == "+") {return num_1 + num_2;}else if (oper == "-") {return num_1 - num_2;}else if (oper == "*") {return num_1 * num_2;}else if (oper == "/") {return num_1 / num_2;}else {cout << "Invalid operator!" << endl;return 0;}}void setNum1(int num) {num_1 = num;}void setNum2(int num) {num_2 = num;}int num_1;int num_2;
};void testCalculator() {Calculator c;c.setNum1(10);c.setNum2(5);cout << "10 + 5 = " << c.getResult("+") << endl;cout << "10 - 5 = " << c.getResult("-") << endl;cout << "10 * 5 = " << c.getResult("*") << endl;cout << "10 / 5 = " << c.getResult("/") << endl;cout << "10 % 5 = " << c.getResult("%") << endl;cout << "------------------------------------- "  << endl;
}// 利用多态实现计算器
// 多态好处
// 1、组织代码更加清晰
// 2、可读性更好
// 3、可扩展性更强,维护性更好// 定义计算器基类
class CalculatorBase {
public:virtual int getResult(){ return 0; }int num_1;int num_2;
};// 定义加法类
class Add : public CalculatorBase {
public:int getResult() {return num_1 + num_2;}
};// 定义减法类
class Subtract : public CalculatorBase {
public:int getResult() {return num_1 - num_2;}
};// 定义乘法类
class Multiply : public CalculatorBase {
public:int getResult() {return num_1 * num_2;}
};// 定义除法类
class Divide : public CalculatorBase {
public:int getResult() {return num_1 / num_2;}
};// 测试多态计算器
void testCalculator_2() {CalculatorBase *c1 = new Add();c1->num_1 = 10;c1->num_2 = 5;cout << "10 + 5 = " << c1->getResult() << endl;CalculatorBase *c2 = new Subtract();c2->num_1 = 10;c2->num_2 = 5;cout << "10 - 5 = " << c2->getResult() << endl;CalculatorBase *c3 = new Multiply();c3->num_1 = 10;c3->num_2 = 5;cout << "10 * 5 = " << c3->getResult() << endl;CalculatorBase *c4 = new Divide();c4->num_1 = 10;c4->num_2 = 5;cout << "10 / 5 = " << c4->getResult() << endl;delete c1;delete c2;delete c3;delete c4;
}// 程序入口
int main() {testCalculator();testCalculator_2();return 0;
}

 总结:C++开发提倡利用多态设计程序架构,因为多态优点很多

4.7.3 纯虚函数和抽象类 

 在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容
因此可以将虚函数改为纯虚函数
纯虚函数语法: virtual 返回值类型 函数名(参数列表)=0;
当类中有了纯虚函数,这个类也称为抽象类
抽象类特点:

  • 无法实例化对象
  • 子类必须重写抽象类中的纯虚函数,否则也属于抽象类

示例:

#include <iostream>
using namespace std;// 纯虚函数和抽象类class Base {
public:// 只要有一个纯虚函数,该类就是抽象类// 不能创建对象,只能作为基类被继承// 抽象类特点// 1. 无法实例化对象// 2. 抽象类的子类,必须要重写父类的纯虚函数,否则子类也是抽象类virtual void fun() = 0; // 纯虚函数
};class Derived : public Base {
public:virtual void fun() {cout << "Derived::fun()" << endl;}
};void test() {//Base b; // 抽象类不能创建对象// Base b1; // 抽象类不能实例化// Base b2 = new Base; // 抽象类不能实例化Derived d;// 继承抽象类,必须重写父类的纯虚函数d.fun();Base *base = new Derived; // 指针指向抽象类的子类对象,可以调用子类的成员函数base->fun(); // 调用子类的成员函数
}int main() {test();return 0;
}
4.7.4 多态案例二 - 制作饮品

案例描述:
制作饮品的大致流程为:煮水-冲泡-倒入杯中-加入辅料
利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶

#include <iostream>
#include <string>
using namespace std;// 制作饮品的基类
class Drink {
public:virtual void BoilWater() = 0;// 烧水virtual void AddCondiments() = 0;// 添加调料virtual void PourInCup() = 0;// 把饮品倒进杯子virtual void AddSugar() = 0;// 添加糖virtual void AddMilk() = 0;// 添加牛奶void makeDrink(){BoilWater();AddCondiments();PourInCup();AddSugar();AddMilk();}
};// 制作咖啡的子类
class Coffee : public Drink {
public:void BoilWater() {cout << "烧水" << endl;}void AddCondiments() {cout << "添加糖" << endl;}void PourInCup() {cout << "倒进杯子" << endl;}void AddSugar() {cout << "添加糖" << endl;}void AddMilk() {cout << "添加牛奶" << endl;}
};// 制作茶的子类
class Tea : public Drink {
public:void BoilWater() {cout << "烧水" << endl;}void AddCondiments() {cout << "添加柠檬" << endl;}void PourInCup() {cout << "倒进杯子" << endl;}void AddSugar() {cout << "添加糖" << endl;}void AddMilk() {cout << "添加牛奶" << endl;}
};// 制作饮品的函数
void makeDrinkWork(Drink* drink) {drink->makeDrink();// 调用基类的makeDrink()函数cout << "制作--完成" << endl;delete drink;// 释放内存
}void test() {// 制作咖啡makeDrinkWork(new Coffee());// 动态创建咖啡对象并调用makeDrinkWork()函数cout << "--------------------------------" << endl;// 制作茶makeDrinkWork(new Tea());
}int main() {test();return 0;
}
4.7.5 虚析构和纯虚析构

多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码
解决方式:将父类中的析构函数改为虚析构或者纯虚析构
虚析构和纯虚析构共性:

  • 可以解决父类指针释放子类对象
  • 都需要有具体的函数实现

虚析构和纯虚析构区别:

  • 如果是纯虚析构,该类属于抽象类,无法实例化对象

 虚析构语法:
virtual ~类名(){}
纯虚析构语法:
virtual~类名()=0;
类名::~类名(){}

#include <iostream>
#include <string>
using namespace std;// 虚析构和纯虚析构class Animal {
public:virtual void speak() = 0; // 纯虚函数// 利用虚析构函数释放内存,可以解决父类指针释放子类对象时不干净的问题//virtual ~Animal() {} // 虚析构函数,释放内存// 纯虚析构函数,需要声明也需要实现// 有了纯虚析构函数,这个类也就成为了抽象类,不能实例化对象,只能作为基类被派生virtual ~Animal() = 0; // 纯虚析构函数,声明,但不定义,用于派生类中
};// 纯虚析构函数,用于派生类中,声明但不定义
Animal::~Animal(){}class Cat : public Animal {
public:Cat(string *name) {m_Name = new string(*name);}virtual void speak() {cout << "Cat: " << *m_Name << ";Meow!" << endl;}~Cat() { cout << "Cat: " << *m_Name << ";Bye!" << endl; delete m_Name; } // 虚析构函数,释放内存string *m_Name;
};void test_Cat() {string name = "Kitty";// 注意:这里传递的是指针,而不是字符串Animal* a = new Cat(&name);// 注意:这里传递的是指针,而不是对象a->speak();// 注意:这里调用的是虚函数,而不是对象指针delete a;// 注意:这里释放的是指针,而不是对象
}int main() {test_Cat();return 0;
}

总结:
1.虚析构或纯虚析构就是用来解决通过父类指针释放子类对象

2.如果子类中没有堆区数据,可以不写为虚析构或纯虚析构

3.拥有纯虚析构函数的类也属于抽象类 

4.7.6 多态案例三-电脑组装 

案例描述:
电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储)

将每个零件封装出抽象其类,并且提供不同的厂商生产不同的零件,例如Intel厂商和Lenovo厂商创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口

测试时组装三台不同的电脑进行工作
示例:

#include <iostream>
#include <string>
using namespace std;// CPU类
class CPU {
public:virtual void calculate() = 0;// 虚函数,用于计算功能
};// 主板类
class Mainboard {
public:virtual void motherboard() = 0;// 虚函数,用于组装主板
};// 内存条类
class Memory {
public:virtual void RAM() = 0;// 虚函数,用于安装内存条
};// 显卡类
class GraphicsCard {
public:virtual void display() = 0;// 虚函数,用于安装显卡
};// 电脑类
class Computer {
public:Computer(CPU* cpu, Mainboard* mainboard, Memory* memory, GraphicsCard* graphicsCard): cpu(cpu), mainboard(mainboard), memory(memory), graphicsCard(graphicsCard) {// 构造函数,传入各个部件对象/*cpu = cpu;mainboard = mainboard;memory = memory;graphicsCard = graphicsCard;*/}void assemble() {// 组装电脑cpu->calculate();mainboard->motherboard();memory->RAM();graphicsCard->display();}private:CPU* cpu;// CPU对象Mainboard* mainboard;// 主板对象Memory* memory;// 内存条对象GraphicsCard* graphicsCard;// 显卡对象
};// 具体实现类
class IntelCPU : public CPU {
public:virtual void calculate() {cout << "Intel CPU is calculating..." << endl;}
};class ASUSMainboard : public Mainboard {
public:virtual void motherboard() {cout << "ASUS Mainboard is assembling..." << endl;}
};class KingstonMemory : public Memory {
public:virtual void RAM() {cout << "Kingston Memory is installing..." << endl;}
};class NvidiaGraphicsCard : public GraphicsCard {
public:virtual void display() {cout << "Nvidia GraphicsCard is installing..." << endl;}
};void test() {// 第一台电脑零件CPU* intelCPU = new IntelCPU();Mainboard* asusMainboard = new ASUSMainboard();Memory* kingstonMemory = new KingstonMemory();GraphicsCard* nvidiaGraphicsCard = new NvidiaGraphicsCard();// 组装电脑Computer* computer = new Computer(intelCPU, asusMainboard, kingstonMemory, nvidiaGraphicsCard);computer->assemble();// 释放内存delete intelCPU;delete asusMainboard;delete kingstonMemory;delete nvidiaGraphicsCard;delete computer;
}int main() {test();return 0;
}

相关文章:

C++学习笔记“类和对象”:多态;

目录 4.7 多态 4.7.1 多态的基本概念 4.7.2 多态案例--计算器类 4.7.3 纯虚函数和抽象类 4.7.4 多态案例二 - 制作饮品 4.7.5 虚析构和纯虚析构 4.7.6 多态案例三-电脑组装 4.7 多态 4.7.1 多态的基本概念 多态是C面向对象三大特性之一 多态分为两类 静志多态: 函数…...

QT Udp广播实现设备发现

测试环境 本文选用pc1作为客户端&#xff0c;pc2&#xff0c;以及一台虚拟机作为服务端。 pc1,pc2(客户端&#xff09;: 虚拟机&#xff08;服务端)&#xff1a; 客户端 原理&#xff1a;客户端通过发送广播消息信息到ip:255.255.255.255(QHostAddress::Broadcast),局域网…...

PyTorch 统计属性-Tensor基本操作

最小 min, 最大 max, 均值 mean&#xff0c;累加 sum&#xff0c;累乘 prod … >>> a torch.arange(0,8).view(2,4).float() >>> a tensor([[0., 1., 2., 3.],[4., 5., 6., 7.]])>>> a.min() ## 最小值&#xff1a;tensor(0.) >>> a.ma…...

波拉西亚战记加速器 台服波拉西亚战记免费加速器

波拉西亚战记是一款新上线的MMORPG游戏&#xff0c;游戏内我们有多个角色职业可以选择&#xff0c;可以体验不同的战斗流派玩法&#xff0c;开放式的地图设计&#xff0c;玩家可以自由的进行探索冒险&#xff0c;寻找各种物资。各种随机事件可以触发&#xff0c;让玩家的冒险过…...

Mocha + Chai 测试环境配置,支持 ES6 语法

下面是一个完整的 Mocha Chai 测试环境配置&#xff0c;支持 ES6 语法。我们将使用 Babel 来转译 ES6 代码。 步骤一&#xff1a;初始化项目 首先&#xff0c;在项目目录中运行以下命令来初始化一个新的 Node.js 项目&#xff1a; npm init -y步骤二&#xff1a;安装必要的…...

华为网络设备攻击防范

畸形报文攻击防范 攻击行为 畸形报文攻击是通过向交换机发送有缺陷的IP报文&#xff0c;使得交换机在处理这样的IP包时会出现崩溃&#xff0c;给交换机带来损失。 畸形报文攻击主要有如下几种&#xff1a; 没有IP载荷的泛洪攻击 IGMP空报文攻击 LAND攻击 Smurf攻击 TCP标…...

RK3588开发笔记-100M网口自协商成1000M网口

目录 前言 一、问题描述 二、原理图连接 三、解决方法 总结 前言 在进行RK3588开发过程中,遇到一个令人困惑的问题:在使用RTL8211F-CG phy芯片出来的100M网口在自协商后连接速率变成了1000M。这篇博客将详细记录这个问题的产生、排查过程以及最终的解决方案,希望能对遇到…...

Python第二语言(十三、PySpark实战)

目录 1.开篇 2. PySpark介绍 3. PySpark基础准备 3.1 PySpark安装 3.2 掌握PySpark执行环境入口对象的构建 3.3 理解PySpark的编程模型 4. PySpark&#xff1a;RDD对象数据输入 4.1 RDD对象概念&#xff1a;PySpark支持多种数据的输入&#xff0c;完成后会返回RDD类的对…...

《阅读的方法》读后感——超越期待的收获

当我翻开这本书的扉页时&#xff0c;未曾料到它会给我带来如此深远的启示和收获。依照推荐序言中的指引&#xff0c;我随意翻阅、精心选读&#xff0c;每一次都如同打开一扇新的窗户&#xff0c;让我窥见不同领域的智慧和美好。 等地铁时、临睡前随便读点什么&#xff0c;有什么…...

算法训练营第五十八天 | LeetCode 392 判断子序列、卡码网模拟美团笔试第一、二、三题(300/500有待提高)

卡码网图论更新了可以去看看&#xff0c;模拟笔试第四题就是深搜/广搜还不太会 LeetCode 392 判断子序列 其实就是最长公共子序列翻版 代码如下&#xff1a; class Solution {public boolean isSubsequence(String s, String t) {int[][] dp new int[s.length() 1][t.lengt…...

Sa-Token鉴权与网关服务实现

纠错&#xff1a; 在上一部分里我完成了微服务框架的初步实现&#xff0c;但是先说一下之前有一个错误&#xff0c;就是依赖部分 上次的学习中我在总的父模块下引入了spring-boot-dependencies&#xff08;版本控制&#xff09;我以为在子模块下就不需要再引用了&#xff0c;…...

企事业单位安全生产月活动怎样向媒体投稿?

作为一名单位的信息宣传员,我肩负着将每一次重要活动的精彩瞬间转化为文字,向外界传递我们单位声音的重任。初入此行时,我满怀热情,坚信通过传统的方式——电子邮件投稿,能够有效地将我们的故事传播出去。然而,现实却给我上了生动的一课。 记得在筹备“安全生产月”活动的宣传时…...

MySQL8.0默认TCP端口介绍

1、本文内容 选择题TCP/IPMySQL 8.0 的默认TCP端口show variables查看总结 2、选择题 A、3306 B、33060 C、33062 D、33063 3、TCP/IP TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/网际协议&#xff09;是指能够在多个不同…...

Javaweb避坑指北(持续更新)

内容较多可按CtrlF搜索 0.目录 1.获取插入数据后自增长主键的值 2.Controller中返回给ajax请求字符串/json会跳转到xxx.jsp 3.ajax请求获得的json无法解析 4.在Controller中使用ServletFileUpload获取的上传文件为null 5.莫名其妙报service和dao里方法的错误 6.ajax请求拿…...

Web前端知道:深入探索与无尽挑战

Web前端知道&#xff1a;深入探索与无尽挑战 Web前端&#xff0c;这个看似简单却实则深不可测的领域&#xff0c;一直以来都吸引着无数开发者投入其中。在这个充满未知与可能的世界里&#xff0c;我们既是探索者&#xff0c;也是挑战者。本文将从四个方面、五个方面、六个方面…...

QT调用vs2019生成的c++动态库

QT调用vs2019生成的c动态库 dll库的创建方法&#xff1a; VS2019创建c动态链接库dll与调用方法-CSDN博客 加减法示范&#xff1a; 头文件 // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLL3_EXPORTS // 符号编…...

C语言TC中有⼏个画线函数?怎么使⽤?

一、问题 C语⾔中画线的函数好像不⽌ line( )⼀个&#xff0c;那么除了 line( ) &#xff0c;还有哪些画线函数&#xff1f;怎么使⽤&#xff1f; 二、解答 TC中有3种画线的函数&#xff0c;共语法格式如下。 void far line(int x0, int y0, int xl, int y1); void far linet…...

掌握WhoisAPI,提升域名管理的效率

在互联网时代&#xff0c;域名管理是网站运营中非常重要的一环。通过域名&#xff0c;我们能够轻松访问和识别不同的网站。然而&#xff0c;域名的注册和管理也是一项复杂的任务&#xff0c;特别是对于大规模拥有许多域名的企业来说。为了提升域名管理的效率&#xff0c;我们可…...

Docker与Docker-Compose详解

1、Docker是什么&#xff1f; 在计算机中&#xff0c;虚拟化(英语: Virtualization) 是一种资源管理技术&#xff0c;是将计算机的各种实体资源&#xff0c;如服务器、网络、内存及存储等&#xff0c;予以抽象、转换后呈现出来&#xff0c;打破实体结构间的不可切割的障碍&…...

微服务之熔断器

1、高并发带来的问题 在微服务架构中&#xff0c;我们将业务拆分成一个个的服务&#xff0c;服务与服务之间可以相互调用&#xff0c;但是由于网络原因 或者自身的原因&#xff0c;服务并不能保证服务的100%可用&#xff0c;如果单个服务出现问题&#xff0c;调用这个服务就会…...

【高校科研前沿】北京大学赵鹏军教授团队在Nature Communications发文:揭示城市人群移动的空间方向性

文章简介 论文名称&#xff1a;Unravelling the spatial directionality of urban mobility 第一作者及单位&#xff1a;赵鹏军&#xff08;教授|第一作者|北京大学&#xff09;&王浩&#xff08;博士生|共同一作|北京大学&#xff09;; 通讯作者及单位&#xff1a;赵鹏军…...

徐州存储服务器会应用在哪些场景?

企业的业务随着不断的发展&#xff0c;数据信息与重要文件也在不断激增&#xff0c;存储服务器也受到了各个领域的广泛运用&#xff0c;那徐州存储服务器会应用在哪些场景当中呢&#xff1f; 存储服务器能够存储大量的数据信息、图片和视频等内容&#xff0c;是专门为数据存储设…...

个人博客搭建

liupengs blogs 环境搭建 版本环境&#xff1a;hexo3.8.0 node12.17.0 https://www.cnblogs.com/fengxiongZz/p/7707219.html 搭建 https://www.cnblogs.com/fengxiongZz/p/7707568.html 进阶 https://www.cnblogs.com/chengxs/p/7496265.html https://www.cnbl…...

服务器数据库三级等保的一些修改步骤

服务器整改项: 1.服务器需要设置强制密码复杂度,要求密码包含3种以上字符,最低8位 [root@localhost ~]# vi /etc/pam.d/system-auth password requisite pam_pwquality.so try_first_pass local_users_only retry=5 minlen=9 lcredit=-1 dcredit=-1 ocrredit=-1 enforrce_fo…...

Python私教张大鹏 Vue3整合AntDesignVue之DatePicker 日期选择框

案例&#xff1a;选择日期 <script setup> import {ref} from "vue";const date ref(null) </script> <template><div class"p-8 bg-indigo-50 text-center"><a-date-picker v-model:value"date"/><a-divide…...

springboot+vue前后端分离项目中使用jwt实现登录认证

文章目录 一、后端代码1.响应工具类2.jwt工具类3.登录用户实体类4.登录接口5.测试接口6.过滤器7.启动类 二、前端代码1.登录页index 页面 三、效果展示 一、后端代码 1.响应工具类 package com.etime.util;import com.etime.vo.ResponseModel; import com.fasterxml.jackson.…...

leetcode hot100 之 编辑距离

给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 输入&#xff1a;word1 “horse”, word2 “ros” 输出&#xff1a;3 解释&#xff1a…...

杨校老师项目之基于SpringBoot的理发店的预约管理系统

原系统是SSMJSP页面构成&#xff0c;先被修改为SpringBoot JSP页面 自助下载渠道: https://download.csdn.net/download/kese7952/89417001&#xff0c;或 点我下载 理发师信息&#xff1a; 理发师详细信息 公告信息 员工登录&#xff1a; 管理员登录...

SpringAI学习及搭建AI原生应用

文章目录 一、SpringAI是什么二、准备工作1.GPT-API-free2.AiCore3.eylink 三、对话案例实现1.创建项目2.实现简单的对话 四、聊天客户端ChatClient1.角色预设2.流式响应3.call和stream的区别 五、聊天模型提示词提示词模板 六、图像模型(文生图)七、语音模型1.文字转语音(文生…...

CobaltStrike权限传递MSF

一、测试环境 操作系统&#xff1a; 1.VMware17 2.kali 6.1.0-kali5-amd64 3.Win10x64 软件&#xff1a; 1.cs4.0 2.metasploit v6.3.4-dev 二、测试思路 1.cs是一款渗透测试工具&#xff0c;但没有漏洞利用的模块&#xff0c;我们可以在拿到目标主机的权限后&#xff0c;将…...

做调查的网站知乎/seo专员是干嘛的

HTTP协议超级详解 原文&#xff1a;https://www.cnblogs.com/an-wen/p/11180076.html HTTP协议简介 超文本传输协议&#xff08;英文&#xff1a;HyperText Transfer Protocol&#xff0c;缩写&#xff1a;HTTP&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层…...

宝安做网站公司/百度seo按天计费

1、while循环语句 迭代(iteration)意味着反复执行相同的代码块。实现迭代的编程结构称为循环(loop)。 假设有一项任务&#xff0c;要在屏幕上输出从1到100的数字。仅仅使用之前讨论过的知识&#xff0c;可能会写出如下代码&#xff1a; print(1) print(2) print(3) # 此处省略…...

free wordpress/站长工具使用方法

在TestNG的另一个有趣的功能是参数测试。在大多数情况下&#xff0c;你会遇到这样一个场景&#xff0c;业务逻辑需要一个巨大的不同数量的测试。参数测试&#xff0c;允许开发人员运行同样的测试&#xff0c;一遍又一遍使用不同的值。 TestNG让你直接传递参数测试方法两种不同的…...

有哪些网站可以做店面设计/seo技术分享

1、 git init 2、把文件添加到本地版本库中&#xff0c; git add . 3、把文件提交到仓库 git commit -m first commit’ 4、关联到远程库 git remote add origin 你的远程库地址 5、远程库与本地同步合并 git pull --rebase origin master 6、推送到远程仓库&#xf…...

长沙的网站建设公司哪家好/网站优化内容

今天一同事问我怎么利用数据库让数据库定时更新、备份。我想了很久&#xff0c;才想到作业上来。由于以前基本没用过作业&#xff0c;今天特意恶补了一下&#xff0c;帮同事给解决了。现在总结出来来给大家看一下。 1、 首先先了解一下什么是SQL数据库中的作业 贴上微软官方的…...

全网第一赚钱网站/关键词优化简易

开机后&#xff0c;在系统启动菜单过后本应该接着出现欢迎界面来的&#xff0c;可是竟然出现了一个硬件配置文件/硬件恢复菜单&#xff0c;然后让选择两个配置文件Profile1和Profile中的一个&#xff0c;默认等待30秒 解决办法&#xff1a; 我的电脑--属性--硬件--硬件配置文件…...