C++ 多态:(使用Shape类层次结构的多态性的屏幕管理器)开发一个基本图形软件包

news2024/11/15 15:55:44

基于上篇C++ 多态:Shape类层次结构icon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/133175074

【问题描述】


使用C++ 多态:Shape类层次结构中实现的Shape类层次。仅限于二维形状,如正方形,长方形、三角形和圆。和用户进行交互,让用户指定形状、位置和大小;以及绘制每个形状时所用的填充字符。用户可以指定多于一个的同样形状。当你创建每个形状时,都将指向新Shape 对象的一个Shape*指针添加到一个数组中。每个 Shape 类应用它自己的 draw 成员函数。编写一个遍历上述数组的多态的屏幕管理器,向数组中的每个对象发送draw消息,以形成屏幕图像。每次当用户指定新添的一个形状时,要重新绘制整个屏幕图像。


【具体方法】

1.创建Shape类

//Shape类 
class Shape
{
public:
	virtual double getArea(){}//计算面积 
	virtual double getVolume(){}//计算体积
	virtual void print(){}//打印 
	virtual void draw(int x,int y,char c){}//绘制形状 
	Shape(){}//构造 
	~Shape(){}//析构 	
};
2.创建二维类TwoDimensionalShape,继承于Shape类
class TwoDimensionalShape : public Shape//二维 
{
public:
	TwoDimensionalShape(){}
	virtual double getArea(){}
	virtual void print(){} 
	virtual void draw(int x,int y,char c){}
};
3.正方形类Square,继承于二维类TwoDimensionalShape
class Square : public TwoDimensionalShape//二维的正方形 
{
public:
	Square(){}
	Square(double side)
	{
		side_m=side; 
	}
	double getArea()
	{
		return side_m*side_m;
	}
	void print()
	{
		cout<<"二维的正方形的面积为:"<<getArea()<<endl;
			
	}
	void draw(int x,int y,char c)
	{
		int a[50][50];
		for(int i=0;i<50;i++)
		{
			for(int j=0;j<50;j++)
			{
				a[i][j]=0;
			}
		}
	
		for(int i=0;i<50;i++)
		{
			for(int j=0;j<50;j++)
			{
				if(j>=x-1 && j<x+side_m-1 && i>=y-1 && i<y+side_m-1)
				{
					a[i][j]=1;
				}
				if(j>=x-2 && j<x+side_m && i>=y-2 && i<y+side_m && a[i][j]!=1)
				{
					a[i][j]=2;
				}
			}
		}		
		for(int i=0;i<50;i++)
		{
			cout<<endl;
			for(int j=0;j<50;j++)
			{
				if(a[i][j]==1)
					cout<<c<<" ";
				else
					cout<<"  ";
			}
		}	
	
	}
private:
	double side_m;//边长 
};
4.长方形类Rectangle,继承于二维类TwoDimensionalShape
class Rectangle_ : public TwoDimensionalShape//二维的长方形 
{
public:
	Rectangle_(){}
	Rectangle_(double length,double width)
	{
		length_m=length;
		width_m=width;
	}
	double getArea()
	{
		return length_m*width_m;
	}
	void draw(int x,int y,char c)
	{
		int a[50][50];
		for(int i=0;i<50;i++)
		{
			for(int j=0;j<50;j++)
			{
				a[i][j]=0;
			}
		}
		for(int i=0;i<50;i++)
		{
			for(int j=0;j<50;j++)
			{
				if(j>=x-1 && j<x+length_m-1 && i>=y-1 && i<y+width_m-1)
				{
					a[i][j]=1;
				}
				if(j>=x-2 && j<x+length_m && i>=y-2 && i<y+width_m && a[i][j]!=1)
				{
					a[i][j]=2;
				}
			}
		}	
		for(int i=0;i<50;i++)
		{
			cout<<endl;
			for(int j=0;j<50;j++)
			{
				if(a[i][j]==1)
					cout<<c<<" ";
				else
					cout<<"  ";
			}
		}	
	}
	void print()
	{
		cout<<"二维的长方形的面积为:"<<getArea()<<endl;	
	}
private:
	double length_m;//长 
	double width_m;//宽 
};
5.三角形类Triangle,继承于二维类TwoDimensionalShape

class Triangle : public TwoDimensionalShape//二维的三角形 (这里定义为等腰直角三角形)
{
public:
	Triangle(){}
	Triangle(double side)
	{
		side_m=side; 
	}
	double getArea()
	{
		return 0.5*side_m*side_m;
	}
	void draw(int x,int y,char c)
	{
		int a[50][50];
		for(int i=0;i<50;i++)
		{
			for(int j=0;j<50;j++)
			{
				a[i][j]=0;
			}
		}
		for(int i=0,k=-y+2;i<50;i++,k++)
		{
			for(int j=0;j<50;j++)
			{
				if(j>=x-1 && j<x+k-1 && i>=y-1 && i<y+side_m-1)
				{
					a[i][j]=1;
				}
				if(j>=x-2 && j<x+k && i>=y-3 && i<y+side_m && a[i][j]!=1)
				{
					a[i][j]=2;
				}
			}
		}	
		for(int i=0;i<50;i++)
		{
			cout<<endl;
			for(int j=0;j<50;j++)
			{
				if(a[i][j]==1)
					cout<<c<<" ";
				else
					cout<<"  ";
			}
		}	
	}
	void print()
	{
		cout<<"二维的三角形的面积为:"<<getArea()<<endl;	
	}
private:
	double side_m;//等腰直角三角形的边长 
};
6.圆形类Circle,继承于二维类TwoDimensionalShape (在这里我想说一下,关于画圆以及如何填充圆,推荐参考文章 Bresenham 画圆算法原理)
class Circle : public TwoDimensionalShape//二维的圆形 
{
public:
	Circle(){}
	Circle(double radius)
	{
		radius_m=radius;
	}
	double getArea()
	{
		return E*radius_m*radius_m;
	}
	void draw(int x,int y,char c)
	{
 		//1=<r<=24
		int a[50][50];
		for(int i=0;i<50;i++)
		{
			for(int j=0;j<50;j++)
			{
				a[i][j]=0;
			}
		}
		int r=x;
		int p;
		x=0;
		y=r;
		p=3-2*r;
		for(;x<=y;x++)
		{
			a[ x+r][ y+r]=1;
			a[ x+r][-y+r]=1;
			a[-x+r][ y+r]=1;
			a[-x+r][-y+r]=1;
			a[ y+r][ x+r]=1;
			a[ y+r][-x+r]=1;
			a[-y+r][ x+r]=1;
			a[-y+r][-x+r]=1;
			if(p>=0)
			{
				p+=4*(x-y)+10;
				y--;
			}
			else
			{
				p+=4*x+6;
			}
			
		}
		for(int i=0;i<50;i++)
		{
			cout<<endl;
			for(int j=0;j<50;j++)
			{
				if(a[i][j]==1)
				cout<<c<<" ";
				else
				cout<<"  ";
			}
		}
	}
	void print()
	{
		cout<<"二维的圆形的面积为:"<<getArea()<<endl;	
	}	
private:
	double radius_m;//圆的半径 
};

7.绘制图形

char cinColor()
{
	char c;
	int color;
	cout<<"填充字符有:1.'*' 2.'#' 3.'@' 4.'&'"<<endl;
	cout<<"请输入你想绘制该形状的填充字符(编号),若超出范围则默认为'&':"<<endl;
	cin>>color; 
	if(color==1)
		c='*';
	else if(color==2)
		c='#';
	else if(color==3)
		c='@';
	else
		c='&';
	return c;
}

8.测试程序

int main()
{
	char cinColor();
	vector<Shape*> shapeclass;
	vector<Shape*>::iterator iter;
    int a;
    int x,y;
    a=-1;
	while(a!=0)
	{
	cout<<"******二维形状图形********"<<endl 
		<<"********1.正方形**********"<<endl 
		<<"********2.长方形**********"<<endl 
		<<"********3.三角形**********"<<endl 
		<<"********4.圆形************"<<endl 
		<<"********0.退出************"<<endl;
		cout<<"请输入你所选择的形状(编号):"<<endl;
		cin>>a; 
		switch(a)
		{
			case 1:
				{
					double side;
					cout<<"Please enter the side of square:"<<endl;
					cin>>side;
					Shape *ptr_Square=new Square(side);
					shapeclass.push_back(ptr_Square);
					iter = shapeclass.begin();
					(*iter)->print();
					char ch=cinColor();
					cout<<"请输入图形的起始坐标:"<<endl;
					cin>>x>>y; 
					(*iter)->draw(x,y,ch);
					delete ptr_Square;	
				}
				break;
			case 2:
				{
					double length,width;
					cout<<"Please enter the length and width of the rectangle:"<<endl;
					cin>>length>>width;	
					Shape *ptr_Rectangle_=new Rectangle_(length,width);
					shapeclass.push_back(ptr_Rectangle_); 
					iter = shapeclass.begin();
					(*iter)->print();
					char ch=cinColor();
					cout<<"请输入图形的起始坐标:"<<endl;
					cin>>x>>y; 
					(*iter)->draw(x,y,ch);
					delete ptr_Rectangle_;
				}
				break;
			case 3: 
				{
					double side;
					cout<<"Please enter the side of the triangle: "<<endl;
					cin>>side;
					Shape *ptr_Triangle=new Triangle(side);
					shapeclass.push_back(ptr_Triangle);
					iter = shapeclass.begin();
					(*iter)->print();
					char ch=cinColor();
					cout<<"请输入图形的起始坐标:"<<endl;
					cin>>x>>y; 
					(*iter)->draw(x,y,ch);
					delete ptr_Triangle;	
				}
				break;
			case 4:
				{
					double radius;
					cout<<"Please enter the radius of Circle(0<radius<=24): "<<endl;
					cin>>radius;
					Shape *ptr_Circle=new Circle(radius);
					shapeclass.push_back(ptr_Circle);
					iter = shapeclass.begin();
					(*iter)->print();
					char ch=cinColor();
					x=y=radius; 
					(*iter)->draw(x,y,ch);	
					delete ptr_Circle;	
				}
				break;
			case 0:
				{
					a=0;
				}
				break;	
		}
	    system("pause");
	    system("cls");
	    cout<<endl;
	} 
	
	return 0;
}

完整的代码如下:

//
//习题13.14
//(使用Shape类层次结构的多态性的屏幕管理器)开发一个基本图形软件包
/
#include<iostream>
#include<vector>
#include<math.h>
#include<windows.h>
using namespace std;
#define E 3.14 
//Shape类 
class Shape
{
public:
	virtual double getArea(){}//计算面积 
	virtual double getVolume(){}//计算体积
	virtual void print(){}//打印 
	virtual void draw(int x,int y,char c){}//绘制形状 
	Shape(){}//构造 
	~Shape(){}//析构 	
};

class TwoDimensionalShape : public Shape//二维 
{
public:
	TwoDimensionalShape(){}
	virtual double getArea(){}
	virtual void print(){} 
	virtual void draw(int x,int y,char c){}
};
class Square : public TwoDimensionalShape//二维的正方形 
{
public:
	Square(){}
	Square(double side)
	{
		side_m=side; 
	}
	double getArea()
	{
		return side_m*side_m;
	}
	void print()
	{
		cout<<"二维的正方形的面积为:"<<getArea()<<endl;
			
	}
	void draw(int x,int y,char c)
	{
		int a[50][50];
		for(int i=0;i<50;i++)
		{
			for(int j=0;j<50;j++)
			{
				a[i][j]=0;
			}
		}
	
		for(int i=0;i<50;i++)
		{
			for(int j=0;j<50;j++)
			{
				if(j>=x-1 && j<x+side_m-1 && i>=y-1 && i<y+side_m-1)
				{
					a[i][j]=1;
				}
				if(j>=x-2 && j<x+side_m && i>=y-2 && i<y+side_m && a[i][j]!=1)
				{
					a[i][j]=2;
				}
			}
		}		
		for(int i=0;i<50;i++)
		{
			cout<<endl;
			for(int j=0;j<50;j++)
			{
				if(a[i][j]==1)
					cout<<c<<" ";
				else
					cout<<"  ";
			}
		}	
	
	}
private:
	double side_m;//边长 
};

class Rectangle_ : public TwoDimensionalShape//二维的长方形 
{
public:
	Rectangle_(){}
	Rectangle_(double length,double width)
	{
		length_m=length;
		width_m=width;
	}
	double getArea()
	{
		return length_m*width_m;
	}
	void draw(int x,int y,char c)
	{
		int a[50][50];
		for(int i=0;i<50;i++)
		{
			for(int j=0;j<50;j++)
			{
				a[i][j]=0;
			}
		}
		for(int i=0;i<50;i++)
		{
			for(int j=0;j<50;j++)
			{
				if(j>=x-1 && j<x+length_m-1 && i>=y-1 && i<y+width_m-1)
				{
					a[i][j]=1;
				}
				if(j>=x-2 && j<x+length_m && i>=y-2 && i<y+width_m && a[i][j]!=1)
				{
					a[i][j]=2;
				}
			}
		}	
		for(int i=0;i<50;i++)
		{
			cout<<endl;
			for(int j=0;j<50;j++)
			{
				if(a[i][j]==1)
					cout<<c<<" ";
				else
					cout<<"  ";
			}
		}	
	}
	void print()
	{
		cout<<"二维的长方形的面积为:"<<getArea()<<endl;	
	}
private:
	double length_m;//长 
	double width_m;//宽 
};

class Triangle : public TwoDimensionalShape//二维的三角形 (这里定义为等腰直角三角形)
{
public:
	Triangle(){}
	Triangle(double side)
	{
		side_m=side; 
	}
	double getArea()
	{
		return 0.5*side_m*side_m;
	}
	void draw(int x,int y,char c)
	{
		int a[50][50];
		for(int i=0;i<50;i++)
		{
			for(int j=0;j<50;j++)
			{
				a[i][j]=0;
			}
		}
		for(int i=0,k=-y+2;i<50;i++,k++)
		{
			for(int j=0;j<50;j++)
			{
				if(j>=x-1 && j<x+k-1 && i>=y-1 && i<y+side_m-1)
				{
					a[i][j]=1;
				}
				if(j>=x-2 && j<x+k && i>=y-3 && i<y+side_m && a[i][j]!=1)
				{
					a[i][j]=2;
				}
			}
		}	
		for(int i=0;i<50;i++)
		{
			cout<<endl;
			for(int j=0;j<50;j++)
			{
				if(a[i][j]==1)
					cout<<c<<" ";
				else
					cout<<"  ";
			}
		}	
	}
	void print()
	{
		cout<<"二维的三角形的面积为:"<<getArea()<<endl;	
	}
private:
	double side_m;//等腰直角三角形的边长 
};

class Circle : public TwoDimensionalShape//二维的圆形 
{
public:
	Circle(){}
	Circle(double radius)
	{
		radius_m=radius;
	}
	double getArea()
	{
		return E*radius_m*radius_m;
	}
	void draw(int x,int y,char c)
	{
 		//1=<r<=24
		int a[50][50];
		for(int i=0;i<50;i++)
		{
			for(int j=0;j<50;j++)
			{
				a[i][j]=0;
			}
		}
		int r=x;
		int p;
		x=0;
		y=r;
		p=3-2*r;
		for(;x<=y;x++)
		{
			a[ x+r][ y+r]=1;
			a[ x+r][-y+r]=1;
			a[-x+r][ y+r]=1;
			a[-x+r][-y+r]=1;
			a[ y+r][ x+r]=1;
			a[ y+r][-x+r]=1;
			a[-y+r][ x+r]=1;
			a[-y+r][-x+r]=1;
			if(p>=0)
			{
				p+=4*(x-y)+10;
				y--;
			}
			else
			{
				p+=4*x+6;
			}
			
		}
		for(int i=0;i<50;i++)
		{
			cout<<endl;
			for(int j=0;j<50;j++)
			{
				if(a[i][j]==1)
				cout<<c<<" ";
				else
				cout<<"  ";
			}
		}
	}
	void print()
	{
		cout<<"二维的圆形的面积为:"<<getArea()<<endl;	
	}	
private:
	double radius_m;//圆的半径 
};

char cinColor()
{
	char c;
	int color;
	cout<<"填充字符有:1.'*' 2.'#' 3.'@' 4.'&'"<<endl;
	cout<<"请输入你想绘制该形状的填充字符(编号),若超出范围则默认为'&':"<<endl;
	cin>>color; 
	if(color==1)
		c='*';
	else if(color==2)
		c='#';
	else if(color==3)
		c='@';
	else
		c='&';
	return c;
}

int main()
{
	char cinColor();
	vector<Shape*> shapeclass;
	vector<Shape*>::iterator iter;
    int a;
    int x,y;
    a=-1;
	while(a!=0)
	{
	cout<<"******二维形状图形********"<<endl 
		<<"********1.正方形**********"<<endl 
		<<"********2.长方形**********"<<endl 
		<<"********3.三角形**********"<<endl 
		<<"********4.圆形************"<<endl 
		<<"********0.退出************"<<endl;
		cout<<"请输入你所选择的形状(编号):"<<endl;
		cin>>a; 
		switch(a)
		{
			case 1:
				{
					double side;
					cout<<"Please enter the side of square:"<<endl;
					cin>>side;
					Shape *ptr_Square=new Square(side);
					shapeclass.push_back(ptr_Square);
					iter = shapeclass.begin();
					(*iter)->print();
					char ch=cinColor();
					cout<<"请输入图形的起始坐标:"<<endl;
					cin>>x>>y; 
					(*iter)->draw(x,y,ch);
					delete ptr_Square;	
				}
				break;
			case 2:
				{
					double length,width;
					cout<<"Please enter the length and width of the rectangle:"<<endl;
					cin>>length>>width;	
					Shape *ptr_Rectangle_=new Rectangle_(length,width);
					shapeclass.push_back(ptr_Rectangle_); 
					iter = shapeclass.begin();
					(*iter)->print();
					char ch=cinColor();
					cout<<"请输入图形的起始坐标:"<<endl;
					cin>>x>>y; 
					(*iter)->draw(x,y,ch);
					delete ptr_Rectangle_;
				}
				break;
			case 3: 
				{
					double side;
					cout<<"Please enter the side of the triangle: "<<endl;
					cin>>side;
					Shape *ptr_Triangle=new Triangle(side);
					shapeclass.push_back(ptr_Triangle);
					iter = shapeclass.begin();
					(*iter)->print();
					char ch=cinColor();
					cout<<"请输入图形的起始坐标:"<<endl;
					cin>>x>>y; 
					(*iter)->draw(x,y,ch);
					delete ptr_Triangle;	
				}
				break;
			case 4:
				{
					double radius;
					cout<<"Please enter the radius of Circle(0<radius<=24): "<<endl;
					cin>>radius;
					Shape *ptr_Circle=new Circle(radius);
					shapeclass.push_back(ptr_Circle);
					iter = shapeclass.begin();
					(*iter)->print();
					char ch=cinColor();
					x=y=radius; 
					(*iter)->draw(x,y,ch);	
					delete ptr_Circle;	
				}
				break;
			case 0:
				{
					a=0;
				}
				break;	
		}
	    system("pause");
	    system("cls");
	    cout<<endl;
	} 
	
	return 0;
}

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

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

相关文章

计算机操作系统 (王道考研)笔记(三)文件

目录 1 文件1.1 内存映射文件1.1.1 定义1.1.2 传统文件访问方式1.1.3 内存映射文件访问方式 1.2 文件管理1.3 文件的逻辑结构1.4 文件目录1.5 文件物理结构&#xff08;文件分配方式&#xff09;1.6文件的逻辑结构和物理结构 2 I/O3 缓冲区&#xff0c;磁盘 1 文件 1.1 内存映…

第二证券:北证50是什么意思?

随着中国资本市场的不断发展&#xff0c;投资者开始关注市场指数。北证50指数是其中一个备受关注的指数。那么&#xff0c;北证50究竟是什么意思呢&#xff1f;本文将从定义、历史、构成股票等多个角度分析北证50指数&#xff0c;帮助读者全面了解该指数。 1.定义 北证50指数…

基于Web安全的Python编程(1)

目录 一、http协议基础知识介绍 1、http协议分类 2、请求方法 3、什么是URL 4、请求头 5、响应状态码 二、常用Python库、函数、操作 三、http常用请求方法 1、不带参请求 2、带参数请求&#xff08;get和post存在细微区别&#xff09; 四、http响应属性获取 1、获取…

TikTok营销成功秘籍:ROI指标的黄金法则

在当今数字营销领域&#xff0c;TikTok已经崭露头角&#xff0c;成为了品牌和营销者们争相追逐的热门平台。 然而&#xff0c;要在TikTok上取得成功&#xff0c;不仅需要创意和内容&#xff0c;还需要精确的ROI&#xff08;投资回报率&#xff09;指标来衡量和优化你的营销策略…

【python入门篇】列表简介及操作(2)

列表是什么&#xff1f; 列表是由一系列按特定顺序排列的元素组成。你可以创建包含字母表中的所有字母、数字 0~9 或所有家庭成员的列表&#xff1b;也可以将任何东西加入列表中&#xff0c;其中的元素之间可以没有任何关系。列表通常包含多个元素&#xff0c;因此给列表指定一…

图片转RGB数组格式

0 Preface/Foreword 嵌入式开发中&#xff0c;想要在LCD屏幕中显示任意照片&#xff0c;该如何操作&#xff1f; 根据LCD的大小确定把照片进行缩放&#xff1b;比如LCD的规格为&#xff1a;360 RGB* 360&#xff0c; 原始照片的大小为&#xff1a;1000RGB*1000&#xff0c;那…

FlashAttention2原理解析以及面向AIGC的加速实践

FlashAttention-2提出后&#xff0c;便得到了大量关注。本文将具体讲述FlashAttention-2的前世今生&#xff0c;包括FlashAttention1&2的原理解析、加速效果比较以及面向AIGC的加速实践&#xff0c;在这里将相关内容与大家分享&#xff5e; 引言 将 Transformers 扩展到更长…

文心一言 VS 讯飞星火 VS chatgpt (102)-- 算法导论9.3 8题

八、用go语言&#xff0c;设 X[1…n]和 Y[1…n]为两个数组&#xff0c;每个都包含n个有序的元素。请设计一个 O(lgn)时间的算法来找出数组 X和Y中所有 2n 个元素的中位数。 文心一言&#xff1a; 要在 O(lgn) 时间内找出两个有序数组 X 和 Y 中所有元素的中位数&#xff0c;可…

vue最新前端面试题系列(1-5)

前言: 欢迎浏览和关注本专栏《 前端就业宝典 》, 不管是扭螺丝还是造火箭, 多学点知识总没错。 这个专栏是扭螺丝之上要造火箭级别的知识,会给前端工作学习的小伙伴带来意想不到的帮助。 文章目录 1,Vue 常用的修饰符都有哪些?事件修饰符表单修饰符2,$route和 $router的…

企业年报API的应用:从金融投资到市场研究

引言 在数字化时代&#xff0c;企业年报不再仅仅是一份财务报告&#xff0c;它们变成了宝贵的信息资源&#xff0c;可用于各种商业应用。企业年报API已经改变了金融投资和市场研究的方式&#xff0c;使得从中获取数据变得更加高效和灵活。本文将深入探讨企业年报API的应用&…

创建线程的4种方法

目录 一.前言 1.关于进程调度 (1)为什么要调度? (2)调度的真正对象 (3)调度的资源 2.线程 (1).线程的写法 (2)线程创建的方法 1.继承Thread (1)使用继承Thread,重写run的方式来创建线程 (2)继承Thread,使用匿名内部类 2.实现Runnable (1)使用实现Runnable,重写run…

基于SSM的网上药品售卖系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

衷心 祝愿

达之云衷心祝愿您&#xff0c;中秋国庆双节快乐&#xff0c;阖家幸福&#xff01;感谢您们一直以来对达之云的关注与支持。 双节来临之际&#xff0c;达之云发布全新产品——达之云CDP客户数据平台&#xff08;Dazdata CDP&#xff09;&#xff0c;致力于为中小企业提供互联网营…

【VUE复习·6】监视属性watch:用途、两种写法、简写、应用时注意事项(重点)、深度监视(重点)

总览 1.监视属性是用来干什么的&#xff1f; 2.监视属性的两种写法 3.应用时注意事项 4.深度监视 一、监视属性是用来干什么的&#xff1f; 1.用途 监视一个值&#xff08;可以是基本属性 data&#xff0c;或者是计算属性 computed&#xff09;是否被改变。如果此值被改变&…

品牌奖项+个人奖项双丰收,极智嘉全面展现自身硬核实力

最近&#xff0c;中国物流与采购联合会发布了2022年度科学技术奖获奖名单。在这份名单中&#xff0c;极智嘉与国药物流、南京医药、九州通医药以及多所高校合作&#xff0c;成功研发并应用了“面向医药流通的大规模机器人集群系统关键技术”。这项研究赢得了科学技术进步奖的一…

SpringCloud + SpringGateway 解决Get请求传参为特殊字符导致400无法通过网关转发的问题

title: “SpringCloud SpringGateway 解决Get请求传参为特殊字符导致400无法通过网关转发的问题” createTime: 2021-11-24T10:27:5708:00 updateTime: 2021-11-24T10:27:5708:00 draft: false author: “Atomicyo” tags: [“tomcat”] categories: [“java”] description: …

Win10检测和配置使用千兆网

注&#xff1a;一般只有比较旧的电脑才会是百兆网卡&#xff08;我的2019年笔记本dell灵越是百兆网卡瑞昱RTL810x/8139&#xff0c;离谱&#xff09;。 查看硬件是否为千兆网卡 cmd内执行如下&#xff08;100000000b100000kb100Mb&#xff0c;我这里显示的为百兆&#xff09;…

如何在不失去理智的情况下调试 TensorFlow 训练程序

一、说明 关于tensorflow的调试&#xff0c;是一个难啃的骨头&#xff0c;除了要有耐力&#xff0c;还需要方法&#xff1b;本文假设您是一个很有耐力的开发者&#xff0c;为您提供一些方法&#xff1b;这些方法也许不容易驾驭&#xff0c;但是依然强调您只要有耐力&#xff0c…

Multisim14.0仿真(二十七)基于UC3842的反激式开关电源的设计及仿真

一、UC3842简介&#xff1a; UC3842为固定频率电流模式PWM控制器。它们是专门为OFF−线和直流到直流转换器应用与最小的外部组件。内部实现的电路包括用于精确占空比控制的修剪振荡器、温度补偿参考、高增益误差放大器、电流传感比较器和理想适合于驱动功率MOSFET的高电流温度极…

Unity中Shader的前向渲染路径ForwardRenderingPath

文章目录 前言一、前向渲染路径的特点二、渲染方式1、逐像素(效果最好)2、逐顶点(效果次之)3、SH球谐(效果最差) 三、Unity中对灯光设置 后&#xff0c;自动选择对应的渲染方式1、ForwardBase仅用于一个逐像素的平行灯&#xff0c;以及所有的逐顶点与SH2、ForwardAdd用于其他所…