0815,析构函数,拷贝构造函数,赋值运算符函数


来自同济医院的问候

目录

01:对象创建

001.cc

003size.cc 

02:对象销毁

004pointer.cc

005destroytime.cc

03:本类型对象的复制

3.1 拷贝构造函数

006cp.cc

007cptime.cc

008recursion.cc

009rightleft.cc

3.2 赋值运算符函数

010thispointer.cc

 011operator.cc

3.3 三合成原则

作业喵:

01,关于对象概念的描述中,( )是错误的。   A

02,有关析构函数的说法不正确的是( )  C

03,对类的构造函数和析构函数描述正确的是( )。  A

04,有关类的说法不正确的是____。    D

05,一个空类对象占据的空间有多大?会自动创建哪些函数呢?

06,什么情况下,会调用拷贝构造函数?

07,什么是拷贝构造函数,其形态是什么,参数可以修改吗?

08,什么是赋值运算符函数,其形态是什么?什么情况下需要手动提供赋值运算符函数呢?

09,写出下面程序的运行结果()

10,设已经有A,B,C,D 4个类的定义,程序中A,B,C,D析构函数调用顺序为? ABDC(坏)

11,定义一个学生类,其中有3个数据成员:学号、姓名、年龄,以及若干成员函数。同时编写main函数,使用这个类,实现对学生数据的复制、赋值与输出。

01:对象创建

001.cc

#include <iostream>
using std::cout;
using std::endl;class Point{
public:Point():_ix(0),_iy(0){cout<<"Point()"<<endl;}Point(int x,int y=1):_ix(x),_iy(y){cout<<"Point(int ,int)"<<endl;}//不是严格意义的初始化,本质是赋值/* Point(int x,int y){ *//*     _ix=x; *//*     _iy=y; *//*     cout<<"Point(int ,int )"<<endl;} */void print(){ cout<<_ix<<"\t\t"<<_iy<<endl; }
private:int _ix;int _iy;
};
void test(){Point pt1;Point pt2(5);Point pt(1,2);pt1.print();pt2.print();pt.print();
}int main(void)
{test();return 0;
}

003size.cc 

#include <iostream>
using std::cout;
using std::endl;#pragma pack(4)class A{int _num;double _price;
};
class B{int _num;int _price;
};
class C{int _num;int _num1;double _price;
};
class D{int _num;double _price;int _num1;
};
class E{double _e;char _eArr[20];double _e1;int _e2;
};
class F{char _fArr[20];
};
class G{int num;
};
class H{char _gArr[20];int _g1;int _g2;
};
class I {};
void test(){cout<<sizeof(A)<<endl;cout<<sizeof(B)<<endl;//16 8cout<<sizeof(C)<<endl;cout<<sizeof(D)<<endl;//16 24cout<<sizeof(E)<<endl;cout<<sizeof(F)<<endl;//48 24cout<<sizeof(G)<<endl;cout<<sizeof(H)<<endl;cout<<endl;I i1,i2;cout<<&i1<<" "<<&i2<<endl;cout<<sizeof(I)<<endl;
}int main(void)
{test();return 0;
}

02:对象销毁

004pointer.cc

#include <iostream>
#include <string.h>
using std::cout;
using std::endl;class Computer{
public:Computer(const char* brand,double price): _brand(new char[strlen(brand)+1]()), _price(price){strcpy(_brand,brand);// 否则没有赋值喵,不输出cout<<"Computer"<<endl;}~Computer(){if(_brand){delete []  _brand;  //coution_brand=nullptr;   //加上,信任行为喵}cout<<"~Computer"<<endl;}void printBrandPrice(){cout<<"brand:"<<_brand<<"\t\t";cout<<"price:"<<_price<<endl;}
private:/* char _brand[20]; */char* _brand;double _price;
};void test(){Computer pc("dell",20000);pc.printBrandPrice();//对象销毁时一定会调用析构函数,析构函数执行完,对对象没有被销毁//defecate indiscriminately pc.~Computer();/* pc.printBrandPrice();  //locked */cout<<"over "<<endl;
}
void test01(){const char *p="i love xixi";int * pp=nullptr;cout<<p<<endl;cout<<pp<<endl; //0p=nullptr;//C++会自动访问char*类型指针,此处访问了空指针/* cout<<p<<endl; */cout<<"OK OK OK"<<endl;
}
int main(void)
{test();test01();return 0;
}

005destroytime.cc

#include <iostream>
#include <string.h>
using std::cout;
using std::endl;class Computer{
public:Computer(const char* brand,double price): _brand(new char[strlen(brand)+1]()), _price(price){strcpy(_brand,brand);// 否则没有赋值喵,不输出cout<<_brand<<"\t\t"<<"Computer"<<endl;}~Computer(){cout<<_brand<<"\t\t";if(_brand){delete []  _brand;  //coution_brand=nullptr;   //加上,信任行为喵}cout<<"~Computer"<<endl;}void printBrandPrice(){cout<<_brand<<"\t";cout<<_price<<endl;}
private:/* char _brand[20]; */char* _brand;double _price;
};Computer pc_static("huipu__1",40000);
void test(){Computer pc("dell__2",20000);pc.printBrandPrice();Computer pc_kaixin("honor__3",0);pc_kaixin.printBrandPrice();static Computer pc_jiajia("vsus__4",10000);pc.printBrandPrice();pc_jiajia.printBrandPrice();pc_static.printBrandPrice();Computer* p_new=new Computer("lengion__5",8000);p_new->Computer::printBrandPrice();delete p_new;p_new=nullptr;//坏  后创建的先销毁
}
void test01(){
}
int main(void)
{test();test01();return 0;
}

03:本类型对象的复制

3.1 拷贝构造函数

006cp.cc

#include <iostream>
#include <string.h>
using std::cout;
using std::endl;class Computer{
public:Computer(const char* brand,double price): _brand(new char[strlen(brand)+1]()), _price(price){strcpy(_brand,brand);// 否则没有赋值喵,不输出cout<<_brand<<"\t\t"<<"Computer"<<endl;}Computer(const Computer & pc): _brand(new char[strlen(pc._brand)+1]()), _price(pc._price){strcpy(_brand,pc._brand);// 否则没有赋值喵,不输出cout<<_brand<<"\t\t"<<"Copy  Computer"<<endl;}~Computer(){cout<<_brand<<"\t\t";if(_brand){delete []  _brand;  //coution_brand=nullptr;   //加上,信任行为喵}}void printBrandPrice(){cout<<_brand<<"\t";cout<<_price<<endl;}
private:/* char _brand[20]; */char* _brand;double _price;
};void test(){int x=10;int y=x;cout<<x<<endl;cout<<y<<endl;Computer pc("dell",20000);pc.printBrandPrice();/* Computer pp=pc; */Computer pp(pc);pp.printBrandPrice();//坏,double free//original cpy浅拷贝喵}int main(void)
{test();return 0;
}

007cptime.cc

#include <iostream>
using std::cout;
using std::endl;class Point{
public:Point():_ix(0),_iy(0){cout<<"Point()"<<endl;}Point(int x,int y=1):_ix(x),_iy(y){cout<<"Point(int ,int)"<<endl;}Point(const Point & p):_ix(p._ix),_iy(p._iy){cout<<"Point(Point &)"<<endl;}void print(){ cout<<_ix<<"\t\t"<<_iy<<endl; }
private:int _ix;int _iy;
};//Point p=pt3
void func(Point p){p.print();
}
//第二种调用时机 实参和形参都是对象(用实参初始化形参的过程也会调用拷贝构造)
//避免多余复制,写成引用形式
void func01(Point &  p){p.print();
}
Point pp(258,258);
Point func02(){ return pp; }
//函数的返回值时对象时,执行return语句会调用拷贝构造
Point & func03(){ return pp; }
//避免这次复制可以将返回值写为引用
//caution live_timevoid test(){Point pt1;Point pt2(5);Point pt(1,2);Point pt3(pt1);//第一种调用时机 初始化cout<<endl;func(pt3);func01(pt3);//第2种调用时机 cout<<endl;func03().print();func02().print();//第3种调用时机 /* pt1.print(); *//* pt2.print(); *//* pt.print(); *//* pt3.print(); */
}int main(void)
{test();return 0;
}

008recursion.cc

#include <iostream>
using std::cout;
using std::endl;class Point{
public:Point():_ix(0),_iy(0){cout<<"Point()"<<endl;}Point(int x,int y=1):_ix(x),_iy(y){cout<<"Point(int ,int)"<<endl;}/* Point(const Point & p) *//*     :_ix(p._ix),_iy(p._iy) *//*     {cout<<"Point(Point &)"<<endl;} *//* Point( Point & p) *//*     :_ix(p._ix),_iy(p._iy) *//*     {cout<<"Point(Point &)"<<endl;} *///保证右操作数不被修改,为了能够复制临时对象的Point(const Point  p):_ix(p._ix),_iy(p._iy){cout<<"Point(Point &)"<<endl;}//const Point p=pt1,触发拷贝构造函数,陷入递归拷贝喵void print(){ cout<<_ix<<"\t\t"<<_iy<<endl; }
private:int _ix;int _iy;
};void test(){Point pt1(30,50);Point pt3(pt1);pt1.print();/* pt3.print(); *///error /* Point pt4=Point(20,20); *//* pt4.print(); *///坏,我的好想能跑
}int main(void)
{test();return 0;
}

009rightleft.cc

#include <iostream>
using std::cout;
using std::endl;class Point{
public:Point():_ix(0),_iy(0){cout<<"Point()"<<endl;}Point(int x,int y=1):_ix(x),_iy(y){cout<<"Point(int ,int)"<<endl;}Point(const Point & p):_ix(p._ix),_iy(p._iy){cout<<"Point(Point &)"<<endl;}void print(){ cout<<_ix<<"\t\t"<<_iy<<endl; }
private:int _ix;int _iy;
};void test(){int a=10;int b=20;cout<<&a<<endl;cout<<&(++a)<<endl;//左值  能取地址/* cout<<&(a++)<<endl; *//* cout<<&(a+b)<<endl; *///右值 不能 (临时变量/匿名对象,临时对象,字面值//&1  存在与指令系统,不存在内存中Point pt(1,1);cout<<&pt<<endl;cout<<endl;int & ref=a;const int & ref1=b;/* int & ref2=a+b; *///no const=left//const = left or rightconst int & ref4=a+b;/* printf("%p\n",ref); *//* printf("%p\n",ref1); *//* printf("%p\n",ref4); */
}int main(void)
{test();return 0;
}

3.2 赋值运算符函数

010thispointer.cc

#include <iostream>
using std::cout;
using std::endl;class Point{
public:Point():_ix(0),_iy(0){cout<<"Point()"<<endl;}Point(int x,int y=1):_ix(x),_iy(y){cout<<"Point(int ,int)"<<endl;}Point(const Point & p):_ix(p._ix),_iy(p._iy){cout<<"Point(Point &)"<<endl;}//Point * const this//不能修改指向,”本对象“的地址//隐藏成员函数参数Point & operator=(const Point & p){cout<<"operator="<<endl;/* this->_ix=p._ix; *//* this->_iy=p._iy; */_ix=p._ix;_iy=p._iy;return *this;}void print(){ cout<<_ix<<"\t\t"<<_iy<<endl; }
private:int _ix;int _iy;
};void test(){Point p(10,30);Point p1;p1.print();p1=p;/* pt.operator=(pt2);//本质形式 */p1.print();cout<<endl;int x=10,y=100;cout<<&(x=y)<<endl;cout<<&x<<endl;
}int main(void)
{test();return 0;
}

 011operator.cc

#include <iostream>
#include <string.h>
using std::cout;
using std::endl;class Computer{
public:Computer(const char* brand,double price): _brand(new char[strlen(brand)+1]()), _price(price){strcpy(_brand,brand);// 否则没有赋值喵,不输出}Computer(const Computer & pc): _brand(new char[strlen(pc._brand)+1]()), _price(pc._price){strcpy(_brand,pc._brand);// 否则没有赋值喵,不输出}Computer & operator=(const Computer & c){cout<<"operator ="<<endl;if(this!=&c){//1 考虑自赋值的情况delete [] _brand;//2  回收原本管理的堆空间_brand=new char[strlen(c._brand)+1]();strcpy(_brand,c._brand);//3  深拷贝_price=c._price;}return *this;//4  返回本对象}~Computer(){if(_brand){delete []  _brand;  //coution_brand=nullptr;   //加上,信任行为喵}}void printBrandPrice(){cout<<_brand<<"\t";cout<<_price<<endl;}
private:/* char _brand[20]; */char* _brand;double _price;
};void test(){Computer pc("dell",20000);Computer pc1("cici",20000);pc.printBrandPrice();/* Computer pp=ps; */Computer pp(pc);pp.printBrandPrice();//坏,double free//original cpy浅拷贝喵pc=pc;pc.printBrandPrice();pc=pc1;pc.printBrandPrice();}int main(void)
{test();return 0;
}

3.3 三合成原则

作业喵:

01,关于对象概念的描述中,( )是错误的。   A

  • A对象就是C语言中的结构体

  • B对象是状态和操作的封装体

  • C对象之间的信息传递是通过消息进行的

  • D对象是某个类的一个实例

02,有关析构函数的说法不正确的是( )  C

  • A析构函数有且只有一个

  • B析构函数无任何函数类型

  • C析构函数和构造函数一样可以有形参

  • D析构函数的作用是在对象被撤销时收回先前分配的内存空间

03,对类的构造函数和析构函数描述正确的是( )。  A

  • A构造函数可以重载,析构函数不能重载

  • B构造函数不能重载,析构函数可以重载

  • C构造函数可以重载,析构函数也可以重载

  • D构造函数不能重载,析构函数也不能重载

04,有关类的说法不正确的是____。    D

  • A类是一种用户自定义的数据类型

  • B只有类中的成员函数才能存取类中的私有数据

  • C在类中,如果不作特别说明,所有的数据均为私有类型

  • D在类中,如果不作特别说明,所有的成员函数均为公有类型

05,一个空类对象占据的空间有多大?会自动创建哪些函数呢?

空类:1个字节,仅仅是编译器的一种占位机制

自动创建的函数:默认无参构造,默认析构,默认拷贝构造(浅拷贝),赋值运算符函数(浅拷贝的那种喵)

06,什么情况下,会调用拷贝构造函数?

1,用已经存在的对象给新建的对象初始化

(以下为不看代码十分抽象内容)

2,函数参数(实参和形参的类型都是对象),形参与实参结合时(实参初始化形参)
避免不必要的拷贝,可以使用引用作为参数

3,函数的返回值是对象(return 会 copy)
避免多余拷贝,用引用作为返回值,确保返回值的生命周期大于函数的生命周期

07,什么是拷贝构造函数,其形态是什么,参数可以修改吗?

1,用一个已经存在的同类型的对象来初始化新对象的 构造函数

2,类名  (const 类名 & )

3,不可以
3.1  不可以去掉引用符号(遇到第二种调用时机“形参实参都是对象,用实参初始化形参”的时候,会再一次调用拷贝构造,导致递归调用
3.2  不可以去掉const   (1,确保右操作数的数据成员不会被改变,2,为了能够赋值临时对象的内容,非const引用不能绑定临时变量)

08,什么是赋值运算符函数,其形态是什么?什么情况下需要手动提供赋值运算符函数呢?

1,用已经创建的对象给另一个对象赋值的时候,会调用赋值运算函数(没有自定义时,系统会提供一个默认版本(浅拷贝版本))

2,类名 & operator =   (const 类名 &)

3,当拷贝构造,析构函数,赋值运算符手动定义了其中任何一个,其他两个也都需要手动定义

09,写出下面程序的运行结果()

class Sample 
{int i;
public:Sample();Sample(int val);void Display();~Sample();
};Sample::Sample() 
{cout << "Constructor1" << endl;i=0;
}Sample::Sample(int val) 
{cout << "Constructor2" << endl;i=val;
}void Sample::Display() 
{cout << "i=" << i << endl;
}Sample::~Sample() 
{cout << "Destructor" << endl;
}int main() 
{Sample a, b(10);a.Display();b.Display();return 0;
}

Constructor1
Constructor2
i=0
i=10
Destructor
Destructor 

10,设已经有A,B,C,D 4个类的定义,程序中A,B,C,D析构函数调用顺序为? ABDC(坏)

C c;
int main()
{A *pa=new A();B b;static D d;delete pa;return 0;
}

A  B  D  C  (坏,后创建的先销毁

1,堆对象,delete删除时

2,全局对象,整个程序结束时

3,静态对象,整个程序结束时

4,局部对象,程序离开局部对象的作用域时

11,定义一个学生类,其中有3个数据成员:学号、姓名、年龄,以及若干成员函数。同时编写main函数,使用这个类,实现对学生数据的复制、赋值与输出。

#include <iostream>
#include <string.h>
using std::cout;
using std::endl;class Student{
public:Student(int id,int age,const char* name):_id(id),_age(age),_name(new char[strlen(name)+1]()){strcpy(_name,name);}Student(const Student & s):_id(s._id),_age(s._age),_name(new char[strlen(s._name)+1]()){strcpy(_name,s._name);}Student & operator=(const Student & s){if(this!=&s){_id=s._id;_age=s._age;delete [] _name;_name=new char[strlen(s._name)]();strcpy(_name,s._name);}return *this;}~Student(){cout<<_name<<" ";if(_name){delete [] _name;_name=nullptr;cout<<"love xixi"<<endl;}}void printStudent(){cout<<_id<<"\t"<<_age<<"\t"<<_name<<endl;}
private:int _id;int _age;char* _name;
};
void test(){Student jia(1,21,"jiajia");jia.printStudent();Student kai(1,21,"kaixin");jia.printStudent();Student hui(kai);hui.printStudent();hui=jia;hui.printStudent();
}int main(void)
{test();return 0;
}

1    21    jiajia
1    21    jiajia
1    21    kaixin
1    21    jiajia
jiajia love xixi
kaixin love xixi
jiajia love xixi     //只调用了三次析构函数喵    是我  en~~~?

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

平安城市/雪亮工程现状及需求分析:EasyCVR视频汇聚平台助力雪亮工程项目建设

一、背景现状 经过近几年的努力&#xff0c;平安城市雪亮工程建设取得了显著的成绩&#xff0c;完成了前端高清视频点位和高清卡口系统建设&#xff0c;建成了&#xff08;视频监控类&#xff09;、&#xff08;卡口类&#xff09;和&#xff08;应用类&#xff09;的平台。这…

BvSP_ Broad-view Soft Prompting for Few-Shot Aspect Sentiment Quad Prediction

中文题目: 英文题目: BvSP: Broad-view Soft Prompting for Few-Shot Aspect Sentiment Quad Prediction 论文地址: aclanthology.org/2024.acl-long.460.pdf 代码地址: https://github.com/byinhao/BvSP 论文级别&#xff0c; 单位: (2024 ACL long paper) 南开大学&#xff0…

Fortify三种扫描模式有什么区别?分别怎么用?

一、通过“Audit Workbench”进行测试 “Audit Workbench”支持Java语言源代码的测试。 二、通过“Scan Wizard”进行测试 “Scan Wizard”支持Java、Python、C/C、.Net、Go、PHP、Flex、Action Script、HTML、XML、JavaScript、TypeScript、Kotlin、SQL、ABAP、ColdFusion语言…

RCE编码绕过--php://filter妙用

目录 代码 如何绕过 payload构造 代码 <?php $content <?php exit; ?>; $content . $_POST[txt]; file_put_contents($_POST[filename],$content); 当你想要输入代码的时候前面会有<?php exit;?>;&#xff0c;代码没有办法执行下去&#xff0c;所以…

2024新型数字政府综合解决方案(三)

新型数字政府综合解决方案通过融合人工智能、大数据和云计算技术&#xff0c;建立了一个智能化、互联互通的政府服务平台&#xff0c;旨在提升政府服务效率与透明度。该方案通过全面数字化政务流程&#xff0c;实现数据的实时共享和自动化处理&#xff0c;使公众能够便捷地访问…

基于小土堆入门教程的pytorch训练神经网络方法实现

成果展示 在学习吴恩达机器学习和小土堆入门教程的基础上&#xff0c;完成了该实验&#xff0c;目前可以实现标准数据集的加载、网络模型的搭建及训练、数据可视化、GPU加速功能&#xff0c;是机器学习理论的初步实践 import torch import torchvision.datasets from torch i…

安卓应用开发学习:查看手机传感器信息

一、引言 在手机app的开发中经常会用到手机的传感器&#xff0c;在《Android App 开发进阶与项目实战》一书的第10章就介绍了传感器的一些功能和用法。要想使用传感器&#xff0c;首先得知道手机具备哪些传感器。书中有传感器类型取值的说明&#xff0c;并提供了一个查看手机传…

聊聊场景及场景测试

在我们进行测试过程中&#xff0c;有一种黑盒测试叫场景测试&#xff0c;我们完全是从用户的角度去理解系统&#xff0c;从而可以挖掘用户的隐含需求。 场景是指用户会使用这个系统来完成预定目标的所有情况的集合。 场景本身也代表了用户的需求&#xff0c;所以我们可以认为…

橙色简洁大气体育直播自适应模板赛事直播门户自适应网站源码

源码名称&#xff1a;酷黑简洁大气体育直播自适应模板赛事直播门户网站 源码开发环境&#xff1a;帝国cms 7.5 安装环境&#xff1a;phpmysql 带采集&#xff0c;可以挂着电脑上自动采集发布&#xff0c;无需人工操作&#xff01; 橙色简洁大气体育直播自适应模板赛事直播门户…

Java Web|day5.MyBatis

MyBatis 定义 它是一款半自动的ORM持久层框架&#xff0c;具有较高的SQL灵活性&#xff0c;支持高级映射(一对一&#xff0c;一对多)&#xff0c;动态SQL&#xff0c;延迟加载和缓存等特性&#xff0c;但它的数据库无关性较低 **ORM: **Object Relation Mapping&#xff0c;…

数字孪生技术框架:从数据到决策的桥梁

随着科技的飞速发展&#xff0c;数字孪生技术作为一种创新的信息化手段&#xff0c;正逐步渗透到各个行业领域&#xff0c;成为推动数字化转型的重要力量。数字孪生技术框架&#xff0c;作为支撑这一技术体系的核心架构&#xff0c;以其独特的层级结构&#xff0c;实现了从数据…

如何选择适合流水线作业的工业级条码读码器

高度自动化的工业生产环境中&#xff0c;条码二维码的应用&#xff0c;在工厂流水线作业的高效性和准确性对于企业的生产效率和质量管控至关重要&#xff0c;条码二维码扫描设备作为流水线中用于读取条码或二维码朔源信息的关键设备&#xff0c;它们能够快速、准确地识别和采集…

vim - vim模式及部分操作

文章目录 一、vim 基本介绍二、vim 的简单使用三、几种常用模式切换四、命令模式和底行模式的操作汇总 一、vim 基本介绍 vim 是一款多模式的编辑器。vim 中有很多子命令来进行代码的编写操作。 同时&#xff0c;vim 提供了不同的模式供我们选择。 在vim下的底行模式下通过:he…

8.15 day bug

bug1 一个按钮折腾了 两个小时 一直点第一个按钮&#xff0c;然后进去后发现根本没有课程&#xff0c;需要创建workspace&#xff0c;然后各种问题&#xff0c;还是没把课程启动起来&#xff0c;然后去看gitpod使用文档&#xff0c;搞懂工作区到底是怎么回事&#xff0c;一通操…

JVM 有哪些垃圾回收算法(回收机制)?

JVM 有哪些垃圾回收算法&#xff08;回收机制&#xff09;&#xff1f; 标记-清除算法 在Java虚拟机中&#xff0c;标记-清除算法是一种用于垃圾回收的算法。它分为两个阶段&#xff1a;标记阶段和清除阶段。 在标记阶段&#xff0c;垃圾收集器会遍历堆内存中的所有对象&…

JavaEE 第11节 定时器

前言 本篇博客重点介绍定时器的简单实现&#xff0c;帮助理解其底层原理。关于JAVA工具类自带的定时器&#xff0c;只会简单介绍&#xff0c;详细使用参阅官方文档&#xff08;下文中有官方文档的连接&#xff09;。 一、什么是定时器 定时器的概念非常简单。 它在软件开发…

自制深度学习推理框架之计算图设计

文章目录 一、计算图1.1 计算图定义1.2 计算图的生成1.2.1 **静态计算图&#xff08;Static Computational Graph&#xff09;**1.2.2 **动态计算图&#xff08;Dynamic Computational Graph&#xff09;** 1.3 计算图功能1.3.1 训练阶段1.3.2 推理部署阶段 1.4 计算图的调度(执…

引领企业全球化发展 极光亮相华为亚太ICT峰会2024·泰国

近日&#xff0c;华为亚太ICT峰会2024泰国正式开幕&#xff0c;极光&#xff08;Aurora Mobile&#xff0c;纳斯达克股票代码&#xff1a;JG&#xff09;凭借其创新的技术实力与前瞻性的产品布局&#xff0c;受邀出席本次活动。会上&#xff0c;极光展示了其全域消息通知解决方…

【ocr识别003】flask+paddleocr+bootstrap搭建OCR文本推理WEB服务

1.欢迎点赞、关注、批评、指正&#xff0c;互三走起来&#xff0c;小手动起来&#xff01; 2.了解、学习OCR相关技术知识领域&#xff0c;结合日常的场景进行测试、总结。如本文总结的flaskpaddleocrbootstrap搭建OCR文本推理WEB服务应用示例场景。 文章目录 1.代码结构2.效果演…

MySQL 在 Windows 和 Ubuntu 上的安装与远程连接配置简介

MySQL 是一个广泛使用的开源关系型数据库管理系统&#xff0c;它提供了多用户、多线程的数据库服务。本文将介绍如何在 Windows 和 Ubuntu 操作系统上安装 MySQL&#xff0c;并配置远程连接。 Windows 上的 MySQL 安装 1. 下载 MySQL Installer 访问 MySQL 官方网站下载 Win…