C++实验二——继承和多态
目录
1.类的继承
2. 类的多态性
1.类的继承
C++类继承中总共可以通过三个方式来实现,包括:公有继承(public)、私有继承(private)、保护继承(protected) 等。继承可以使现有的代码具有可重用性和可扩展性。但是,在C++的编程规范中(如google的编程规范),不建议使用私有继承和保护继承,而是使用组合方式。
main.cpp
#include "mainwindow.h"
#include <QApplication>
using namespace std;class A{
public:int _a;
protected:int _b;
private:int _c;
};class pub_B:public A{
public:void Test(){_a = 10;_b = 10;
// _c = 10; 无法访问}int pub_pub_b1;
protected:int pub_pro_b2;
private:int pub_pri_b3;
};class pro_B:protected A{
public:void Test(){_a = 10;_b = 10;
// _c = 10; 无法访问}int pro_pub_b1;
protected:int pro_pro_b2;
private:int pro_pri_b3;
};class pri_B :private A {
public:void Test() {_a = 10;_b = 10;
// _c = 10;不可访问}int pri_pub_b1;
protected:int pri_pro_b2;
private:int pri_pri_b3;
};class newPri_B:private A{
public:void Test(){_a = 10;_b = 10;
// _c = 10; 无法访问}int pri_pub_b1;using A::_a;
protected:int pri_pro_b2;
private:int pri_pri_b3;
};void test()
{A a;a._a;//a._b;//a._c;pub_B s1;s1.pub_pub_b1;s1._a;//s1._b;//si._c;//s1.pub_pro_b2;不可访问//s1.pub_pri_b3;不可访问pro_B s2;s2.pro_pub_b1;//s2._a;s2._b;s2._c;//s2.pro_pro_b2;不可访问//s2.pro_pri_b3;不可访问pri_B s3;s3.pri_pub_b1;//s3._a;s3._b;s3._c;//s3.pri_pro_b2;不可访问//s3.pri_pri_b3;不可访问newPri_B s4;s4.pri_pub_b1;//s4.pri_pro_b2;s4._a;//s4._b;
}
友元继承类测试:
#include<istream>
using namespace std;
class A {
private:int _a;friend class C;
};
class B: public A {
private:int b;
};
class C {
public:void Test() {B b1;b1._a;//b1._b;}
};
class D :public C {
public:void Test() {A a1;//a1._a;B b2;//b2._a;//b2._b;}
};
继承访问权限测试:B以private方式继承A,用using A::_a; 可以把A中的部分public成员提升为public。如果想让这些继承而来的数据成员作为public或者protected成员,可以用using重新声明。using声明语句中名字的访问权限由该using声明语句之前的访问说明符决定。
友元类继承测试:设计类A含有私有变量a,在类A中友元给类C;设计类B继承A,添加私有变量b;在类C中测试访问类B的成员变量a, b;此时类C中访问不到类B的私有成员量b,但是访问得到成员量a。设计类D继承C,在D的成员函数中测试访问类A的成员变量a,类B的成员变量a, b。对于类D来说,A的成员变量a,类B的成员变量a, b均不可见。当类Y被说明为类X的友元时,类Y的所有成员函数都成为类X的友元函数,这就意味着作为友元类Y中的所有成员函数都可以访问类X中的所有成员(包括私有成员)。友元关系是单向的,不具有交换性。友元关系也不具有传递性。友元关系不能被继承,基类的友元类未必是子类的友元,某类型的友元的子类未必是该类型的友元。
2. 类的多态性
main.cpp
#include<vector>
#include "graphics.h"
#include<iostream>
#include "CShape.h"
using namespace std;int main()
{//图形画布基础设置initgraph(640, 480);setbkcolor(WHITE);delay_ms(0);setcolor(BLACK);setfont(20, 0, "楷体");setbkmode(TRANSPARENT);//enter+左击-->新建矩形");//enter+右击-->新建三角形");//enter+滚轮中间-->新建组合图形//ctrl+左击-->复制图形");//ctrl+右击-->粘贴图形");vector<CShape*>shapes;vector<CShape*>shapestmp;shapes.push_back(new CTriangle(CPoint(320, 320), CPoint(250, 340), CPoint(340, 450)));//shapes.push_back(new CTriangle(CPoint(10, 10), CPoint(150, 10), CPoint(150, 150)));shapes.push_back(new CRect(CPoint(200, 200), CPoint(300, 300)));shapes.push_back(new Comgraphics(CRect(CPoint(250, 50))));//移动bool move_flag = false;bool copy_flag = false;bool redraw = true;int clickX, clickY;int copyX, copyY;int checkedid = -1;int copyid = -1;for (; is_run(); delay_fps(60)) {while (mousemsg()) {mouse_msg msg = getmouse();if (msg.is_move()) {if (checkedid != -1) {if (move_flag) {shapes[checkedid]->Move(msg.x - clickX, msg.y - clickY);}}clickX = msg.x;clickY = msg.y;redraw = true;}else if (msg.is_left()) {if (msg.is_down()) {clickX = msg.x;clickY = msg.y;CPoint pt = CPoint(clickX, clickY);int isIn = 0;for (int i = 0; i < shapes.size(); i++) {if (shapes[i]->ptIn(pt)) {isIn = 1;//如果鼠标在图形区域内就设置移动的flag为truemove_flag = true;checkedid = i;redraw = true;break;}}if (isIn == 0)checkedid = -1;}else {move_flag = false;}}}if (redraw) {redraw = false;cleardevice();for (int i = 0; i < shapes.size(); i++) {if (i == checkedid)shapes[i]->DrawColor();elseshapes[i]->Draw();}}while (kbmsg()) {key_msg msgk = getkey();if (msgk.key == key_enter && msgk.msg == key_msg_down) {mouse_msg msgm = getmouse();if (msgm.is_left()) {if (msgm.is_down()) {shapes.push_back(new CRect(CPoint(msgm.x, msgm.y)));redraw = true;}}if (msgm.is_right()) {if (msgm.is_down()) {shapes.push_back(new CTriangle(CPoint(msgm.x, msgm.y)));redraw = true;}}if (msgm.is_mid()) {CRect r1 = CRect(CPoint(msgm.x, msgm.y));if (msgm.is_down()) {shapes.push_back(new Comgraphics(r1));redraw = true;}}}if (msgk.key == key_control && msgk.msg == key_msg_down) {mouse_msg msgm = getmouse();if (msgm.is_left()) {if (msgm.is_down()) {copyX = msgm.x;copyY = msgm.y;CPoint pt = CPoint(copyX, copyY);for (int i = 0; i < shapes.size(); i++) {if (shapes[i]->ptIn(pt)) {copy_flag = true;copyid = i;break;}}}}if (msgm.is_right()) {if (msgm.is_down()) {if (copy_flag == true) {shapes.push_back(&(shapes[copyid]->Clone())->Move(msgm.x - copyX, msgm.y - copyY));redraw = true;}}}}}}closegraph();return 0;
}
CShape.h
#ifndef CSHAPE_H
#define CSHAPE_H
#include<string>
#include<math.h>
using namespace std;class CPoint;
class CRect;
class CShape
{
public:CShape();CShape(const CShape& shape);virtual ~CShape();virtual double GetArea() const;virtual bool ptIn(const CPoint& pt) const;virtual bool InRect(const CRect& rc) const;virtual void Draw() const;virtual void DrawColor();virtual CShape* Clone() const;virtual CShape& Move(int nOffsetX, int nOffsetY);protected:string m_sName;
};class CPoint :public CShape {
public:int m_nPosX;int m_nPosY;CPoint() {m_nPosX = 0;m_nPosY = 0;}CPoint(int nPosX, int nPosY);CPoint(const CPoint& pt);virtual ~CPoint();double GetArea() const;bool ptIn(const CPoint& pt) const;bool InRect(const CRect& rc) const;void Draw() const;void DrawColor();CPoint* Clone() const;CPoint& Move(int nOffsetX, int nOffsetY);
};
class CTriangle :virtual public CShape {
public:CTriangle() {}CTriangle(const CPoint& pt1, const CPoint& pt2, const CPoint& pt3);CTriangle(const CTriangle& rc);CTriangle(const CPoint& pt);virtual ~CTriangle();double GetArea() const;bool ptIn(const CPoint& pt) const;bool InRect(const CRect& rc) const;void Draw() const;void DrawColor();CShape* Clone() const;CShape& Move(int nOffsetX, int nOffsetY);CPoint m_pts[3];
};class CRect :virtual public CShape {
public:CRect() {}CRect(CPoint pt1, CPoint pt2);CRect(const CRect& rc);CRect(CPoint pt1);virtual ~CRect();double GetArea() const;bool ptIn(const CPoint& pt) const;bool InRect(const CRect& rc) const;void Draw() const;void DrawColor();CShape* Clone() const;CShape& Move(int nOffsetX, int nOffsetY);CPoint m_ptLT;CPoint m_ptBR;
};class Comgraphics :public CRect, public CTriangle {
public:Comgraphics(const CRect& pt1);Comgraphics(const Comgraphics& rc);Comgraphics(const CPoint pt1);virtual ~Comgraphics();double GetArea() const;bool ptIn(const CPoint& pt) const;bool InRect(const CRect& rc) const;void Draw() const;void DrawColor();CShape* Clone() const;CShape& Move(int nOffsetX, int nOffsetY);CPoint m_pt1;CPoint m_pt2;};
#endif
CShape.cpp
#include "CShape.h"
#include "graphics.h"
#include <iostream>
using namespace std;
//CShape
CShape::CShape()
{
}
CShape::CShape(const CShape& shape) {m_sName = shape.m_sName;
}
CShape::~CShape()
{
}
double CShape::GetArea() const {return 0;
}
bool CShape::ptIn(const CPoint& pt) const {return false;
}
bool CShape::InRect(const CRect& rc) const {return false;
}
void CShape::Draw() const
{
}
void CShape::DrawColor()
{
}
CShape* CShape::Clone() const {return new CShape(*this);
}
CShape& CShape::Move(int nOffsetX, int nOffsetY) {return *this;
}//CPoint
CPoint::CPoint(int nPosX, int nPosY) {m_nPosX = nPosX;m_nPosY = nPosY;
}
CPoint::CPoint(const CPoint& pt) {m_nPosX = pt.m_nPosX;m_nPosY = pt.m_nPosY;
}
CPoint::~CPoint() {//cout << "CPoint::~CPoint()\n";
}
double CPoint::GetArea() const {return 0;
}
bool CPoint::ptIn(const CPoint& pt) const {return false;
}
bool CPoint::InRect(const CRect& rc) const {return rc.ptIn(*this);
}
void CPoint::Draw() const {circle(m_nPosX, m_nPosY, 2);
}
void CPoint::DrawColor()
{
}
CPoint* CPoint::Clone() const {return new CPoint(*this);
}
CPoint& CPoint::Move(int nOffsetX, int nOffsetY) {m_nPosX += nOffsetX;m_nPosY += nOffsetY;return *this;
}//CTriangle
CTriangle::CTriangle(const CTriangle& tri) {for (int i = 0; i < 3; i++) {m_pts[i] = tri.m_pts[i];}
}
CTriangle::~CTriangle() {//cout << "CTriangle::~CTriangle()\n";
}
CTriangle::CTriangle(const CPoint& pt1, const CPoint& pt2, const CPoint& pt3) {m_pts[0] = pt1;m_pts[1] = pt2;m_pts[2] = pt3;
}
CTriangle::CTriangle(const CPoint& pt)
{CPoint* pt1 = new CPoint(pt.m_nPosX + 100, pt.m_nPosY + 90);CPoint* pt2 = new CPoint(pt.m_nPosX, pt.m_nPosY + 90);m_pts[0] = pt;m_pts[1] = *pt1;m_pts[2] = *pt2;
}CShape& CTriangle::Move(int nOffsetX, int nOffsetY) {for (int i = 0; i < 3; i++) {m_pts[i].Move(nOffsetX, nOffsetY);}return *this;
}
double CTriangle::GetArea() const {int x1, y1, x2, y2, x3, y3;x1 = m_pts[0].m_nPosX;y1 = m_pts[0].m_nPosY;x2 = m_pts[1].m_nPosX;y2 = m_pts[1].m_nPosY;x3 = m_pts[2].m_nPosX;y3 = m_pts[2].m_nPosY;double bottomLine = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));double verticalLine1 = abs((y1 - y2) * x3 - (x1 - x2) * y3 + (x1 - x2) * y2 - (y1 - y2) * x2);double verticalLine2 = sqrt(pow(y1 - y2, 2) + pow(x1 - x2, 2));double verticalLine = verticalLine1 / verticalLine2;return (verticalLine * bottomLine) / 2.0;
}
bool CTriangle::ptIn(const CPoint& pt) const {CTriangle c1 = CTriangle(m_pts[0], m_pts[1], pt);CTriangle c2 = CTriangle(m_pts[1], m_pts[2], pt);CTriangle c3 = CTriangle(m_pts[2], m_pts[0], pt);double totalArea = c1.GetArea() + c2.GetArea() + c3.GetArea();if (totalArea == this->GetArea())return true;elsereturn false;
}
bool CTriangle::InRect(const CRect& rc) const {return rc.ptIn(m_pts[0]) && rc.ptIn(m_pts[1]) && rc.ptIn(m_pts[2]);
}
void CTriangle::Draw() const {int poly[8] = { m_pts[0].m_nPosX ,m_pts[0].m_nPosY,m_pts[1].m_nPosX,m_pts[1].m_nPosY,m_pts[2].m_nPosX,m_pts[2].m_nPosY, m_pts[0].m_nPosX ,m_pts[0].m_nPosY };setfillcolor(EGERGB(0xFF, 0xFF, 0xFF));fillpoly(4, poly);
}
void CTriangle::DrawColor() {int poly[8] = { m_pts[0].m_nPosX ,m_pts[0].m_nPosY,m_pts[1].m_nPosX,m_pts[1].m_nPosY,m_pts[2].m_nPosX,m_pts[2].m_nPosY, m_pts[0].m_nPosX ,m_pts[0].m_nPosY };setfillcolor(EGERGB(0xFF, 0xA5, 0x00));fillpoly(4, poly);
}
CShape* CTriangle::Clone() const {return new CTriangle(*this);
}//CRect
CRect::CRect(CPoint pt1, CPoint pt2) {m_ptLT = CPoint(min(pt1.m_nPosX, pt2.m_nPosX), min(pt1.m_nPosY, pt2.m_nPosY));m_ptBR = CPoint(max(pt1.m_nPosX, pt2.m_nPosX), max(pt1.m_nPosY, pt2.m_nPosY));
}
CRect::CRect(const CRect& rc) {m_ptLT = rc.m_ptLT;m_ptBR = rc.m_ptBR;
}
CRect::CRect(CPoint pt1)
{m_ptLT = CPoint(pt1.m_nPosX, pt1.m_nPosY);m_ptBR = CPoint(pt1.m_nPosX + 100, pt1.m_nPosY + 100);
}
CRect::~CRect() {// cout << "CRect::CRect()\n";
}
double CRect::GetArea() const {return (m_ptBR.m_nPosX - m_ptLT.m_nPosX) * (m_ptBR.m_nPosY - m_ptLT.m_nPosY);
}
bool CRect::ptIn(const CPoint& pt) const {return (pt.m_nPosX >= m_ptLT.m_nPosX && pt.m_nPosX <= m_ptBR.m_nPosX) &&(pt.m_nPosY >= m_ptLT.m_nPosY && pt.m_nPosY <= m_ptBR.m_nPosY);
}
bool CRect::InRect(const CRect& rc) const {return rc.ptIn(m_ptLT) && rc.ptIn(m_ptBR);
}
void CRect::Draw() const {// 存储n个顶点的x,y坐标int pts[10] = { m_ptLT.m_nPosX,m_ptLT.m_nPosY,m_ptBR.m_nPosX,m_ptLT.m_nPosY,m_ptBR.m_nPosX,m_ptBR.m_nPosY,m_ptLT.m_nPosX,m_ptBR.m_nPosY,m_ptLT.m_nPosX,m_ptLT.m_nPosY };// 绘制n个顶点的多边形,第一个参数必须要传入n+1,pts最后一个顶点坐标和第一个相同//drawpoly(5, pts);setfillcolor(EGERGB(0xFF, 0xFF, 0xFF));fillpoly(5, pts);
}
void CRect::DrawColor() {int pts[10] = { m_ptLT.m_nPosX,m_ptLT.m_nPosY,m_ptBR.m_nPosX,m_ptLT.m_nPosY,m_ptBR.m_nPosX,m_ptBR.m_nPosY,m_ptLT.m_nPosX,m_ptBR.m_nPosY,m_ptLT.m_nPosX,m_ptLT.m_nPosY };// 绘制n个顶点的多边形,第一个参数必须要传入n+1,pts最后一个顶点坐标和第一个相同setfillcolor(EGERGB(0xFF, 0xA5, 0x00));fillpoly(5, pts);
}
CShape* CRect::Clone() const {return new CRect(*this);
}
CShape& CRect::Move(int nOffsetX, int nOffsetY) {m_ptLT.Move(nOffsetX, nOffsetY);m_ptBR.Move(nOffsetX, nOffsetY);return *this;}
//Comgraphics
Comgraphics::Comgraphics(const CRect&pt1){m_pt1.m_nPosX = pt1.m_ptBR.m_nPosX;m_pt1.m_nPosY = pt1.m_ptLT.m_nPosY + (pt1.m_ptBR.m_nPosY - pt1.m_ptLT.m_nPosY) / 2;m_pt2.m_nPosX = pt1.m_ptLT.m_nPosX + (pt1.m_ptBR.m_nPosX - pt1.m_ptLT.m_nPosX) / 2;m_pt2.m_nPosY = pt1.m_ptBR.m_nPosY;m_ptLT = pt1.m_ptLT;m_ptBR = pt1.m_ptBR;}
Comgraphics::Comgraphics(const Comgraphics& rc){m_pt1 = rc.m_pt1;m_pt2 = rc.m_pt2;m_ptBR = rc.m_ptBR;m_ptLT = rc.m_ptLT;
}
Comgraphics::Comgraphics(const CPoint pt1){m_ptLT = CPoint(pt1.m_nPosX, pt1.m_nPosY);m_ptBR = CPoint(pt1.m_nPosX + 60, pt1.m_nPosY + 80);
}
Comgraphics::~Comgraphics(){cout << "Comgraphics::~Comgraphics()" << endl;}
double Comgraphics::GetArea() const{return 0.0;
}
bool Comgraphics::ptIn(const CPoint& pt) const {return (pt.m_nPosX >= m_ptLT.m_nPosX && pt.m_nPosX <= m_ptBR.m_nPosX) &&(pt.m_nPosY >= m_ptLT.m_nPosY && pt.m_nPosY <= m_ptBR.m_nPosY);
}
bool Comgraphics::InRect(const CRect& rc) const const {return rc.ptIn(m_ptLT) && rc.ptIn(m_ptBR);
}
void Comgraphics::Draw() const {// 存储n个顶点的x,y坐标int pts[10] = { m_ptLT.m_nPosX,m_ptLT.m_nPosY,m_ptBR.m_nPosX,m_ptLT.m_nPosY,m_ptBR.m_nPosX,m_ptBR.m_nPosY,m_ptLT.m_nPosX,m_ptBR.m_nPosY,m_ptLT.m_nPosX,m_ptLT.m_nPosY };// 绘制n个顶点的多边形,第一个参数必须要传入n+1,pts最后一个顶点坐标和第一个相同//drawpoly(5, pts);setfillcolor(GREEN);fillpoly(5, pts);line(m_pt1.m_nPosX, m_pt1.m_nPosY, m_pt2.m_nPosX, m_pt2.m_nPosY);line(m_ptLT.m_nPosX, m_ptLT.m_nPosY, m_pt2.m_nPosX, m_pt2.m_nPosY);line(m_pt1.m_nPosX, m_pt1.m_nPosY, m_ptLT.m_nPosX, m_ptLT.m_nPosY);
}
void Comgraphics::DrawColor() {// 存储n个顶点的x,y坐标int pts[10] = { m_ptLT.m_nPosX,m_ptLT.m_nPosY,m_ptBR.m_nPosX,m_ptLT.m_nPosY,m_ptBR.m_nPosX,m_ptBR.m_nPosY,m_ptLT.m_nPosX,m_ptBR.m_nPosY,m_ptLT.m_nPosX,m_ptLT.m_nPosY };// 绘制n个顶点的多边形,第一个参数必须要传入n+1,pts最后一个顶点坐标和第一个相同setfillcolor(YELLOW);fillpoly(5, pts);line(m_pt1.m_nPosX, m_pt1.m_nPosY, m_pt2.m_nPosX, m_pt2.m_nPosY);line(m_ptLT.m_nPosX, m_ptLT.m_nPosY, m_pt2.m_nPosX, m_pt2.m_nPosY);line(m_pt1.m_nPosX, m_pt1.m_nPosY, m_ptLT.m_nPosX, m_ptLT.m_nPosY);
}
CShape* Comgraphics::Clone() const {return new Comgraphics(*(this));
}CShape& Comgraphics::Move(int nOffsetX, int nOffsetY) {m_ptLT.Move(nOffsetX, nOffsetY);m_ptBR.Move(nOffsetX, nOffsetY);m_pt1.Move(nOffsetX, nOffsetY);m_pt2.Move(nOffsetX, nOffsetY);return *this;
}
运行结果:
总结:多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。虚函数是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。我们想要的是在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接,或后期绑定。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Ubuntu18.04 安装 Anaconda3
Ubuntu18.04 安装 Anaconda3下载anaconda参考下载anaconda 下载地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 我选择我经常使用的3.5.1.0版本 参考 1、Ubuntu18.04 安装 Anaconda3 2、win10 Ubuntu16.04双系统下anacondatensorflowcudacudnn安…...
2024/4/24 8:53:07 - 从事软件测试行业将会面临哪些考验
在技术层面,不同开发模型所采用的开发、测试方式也不尽相同,这正是驱动 IT 行业技术发展的真正的原因。 简单地说,在传统的瀑布模型时代,大家都挺慢,系统需求也不会有太多变化,单纯美好的年代里࿰…...
2024/4/24 8:24:05 - Java栅栏CyclicBarrier及源码详解
什么是栅栏 Java中栅栏CyclicBarrier是一种同步机制,栅栏能够让一组线程到达一个同步点时被阻塞,直到这组线程中的最后一个线程到达同步点,所有被阻塞的线程才会被唤醒继续执行,即目的是只有某一组线程全部执行到同步点时&#x…...
2024/4/25 5:10:58 - MySQL,一些认识
MySQL 的逻辑架构 MySQL逻辑架构图主要分三层: (1)第一层负责连接处理,授权认证,安全等等 (2)第二层负责编译并优化SQL (3)第三层是存储引擎。 一条SQL查询语句执行过…...
2024/4/19 12:18:49 - Form表单
form表单的定义和用法 <form>用于为用户输入创建HTML表单。 表单能包括input元素,比如文本字段、复选框、单选框、提交按钮等。 表单还能包括textarea、fiedset等元素 type属性取值 text文本框password 密码框 submit提交按钮radio单选按钮checkbox多选按…...
2024/4/15 5:16:53 - T31-工程结构规约-感悟
1、应用分层 1.1、为什么分层? 扩展性 维护性 计算机领域的任何问题都可以通过增加一个中间层解决 1.2、MVC框架模式 1.3、推荐分层架构 1.4、分层异常处理 1.5、分层领域模型 2、MAVEN 2.1、什么叫做构建 2.2、JAVA项目构建工具 2.3、MAVEN主要功能 2.4、 什么时GA…...
2024/4/26 9:07:41 - 软件测试前景:29岁转行软件测试靠谱吗?(下)
搞定Python或者Java语言,建议先从Python入手 基本的语言知识,语法、函数、模块、输入与输出、面向对象编程。 脚本编写、标准库、多线程、第三方库,外部数据处理。 unittest、pytest测试框架、参数化、数据驱动。 web端的自动化测试 …...
2024/4/19 21:22:04 - 【环境配置】java及IDEA环境配置
JKD的安装 https://www.oracle.com/java/technologies/downloads/ 先去官网下载jdk,如果不想下载最新版,就按这个 open JDK Early Access Builds。 我下载的是最新的17.0的exe文件,然后双击默认安装即可。 配置环境变量 此电脑-属性-高级…...
2024/4/24 12:02:42 - 实训九 网络服务的基本配置
实训九 网络服务的基本配置 2017 年 4 月 16 日 今日公布 实训目标 完成本次实训,将能够:配置网卡。配置xinetd超级服务器。 实训准备 两台计算机,其中一台安装RHEL6系统,该系统出来root账号外,至少还有一个普通账号…...
2024/4/21 16:42:11 - Linux下安装mysql
在Linux下安装MySQL 一、在官网下载MySQL安装包。 这里是在Windows里下载好Linux版的MySQL安装包,传到Linux中进行解压、安装。 二、把下载好的安装包通过xshell传到Linux中。 三、开始安装。 1.创建一个MySQL专用用户。 2.选择一个路径,把MySQL的压…...
2024/4/22 22:47:08 - ElasticSearch 新增节点,横向扩容
文章目录查看当前ES状态新增节点配置遇到的问题查看当前ES状态 这里默认都是在Kibana进行操作 GET _cluster/health{"cluster_name" : "bjga-gz","status" : "yellow","timed_out" : false,"number_of_nodes" :…...
2024/4/15 5:17:03 - 【网站集合】【Windows】程序员常用网站一览
【开发/调试工具】【Windows】嵌入式程序员常用工具类软件/网址一览 之前这篇博文,侧重于工具、调试类软件,而这篇则侧重于更通用的一些的网站。 搜索引擎 https://www.google.com/https://cn.bing.com/ 开源世界 https://github.com/https://gitee.c…...
2024/4/18 5:18:55 - Html5+jQuery Mobile开发手机端网站感想与总结-(初)
看jQuery Mobile相关方面的东西,看了几天,发现,其实除了里边默认的图标、主题、以及点击后跳转的效果之外,其他的东西,和普通的html页面一样。 jQuery Mobile注意事项: 1、新的页面开始,标注:data-role=“page” 2、页面中的角色:data-role=“header”,其中的header、…...
2024/4/15 5:16:38 - Ribbon负载均衡流程解析
Ribbon负载均衡源码探究: 假设当前有一个订单服务,以及一个用户服务,用户服务为分布式架构,探究Ribbon中是如何实现负载均衡。 源码探究: 1、双击shift搜索类,查找LoadBalancerInterceptor注意在cloud包下面的才是。 …...
2024/4/24 14:49:16 - 足彩网站分类
1、官方网址 竞彩网是官方的,很多彩票店在使用。 竞彩网_中国体育彩票竞猜游戏官方信息发布平台https://www.sporttery.cn/北京体彩网-北京市体育彩票管理中心官方网站北京体彩网是北京市体育彩票管理中心官方网站,提供最新资讯、中奖公告、开奖视频、足彩赛程、单…...
2024/4/7 0:42:49 - 13、友元(全局函数做友元、类做友元、成员函数做友元)
1、全局函数做友元 #include<iostream> #include<string> using namespace std; class Buiding {//goodGay全局函数是Buiding的好朋友,可以访问Buiding中的私有成员,友元friend void goodGay(Buiding *buiding); public:Buiding(){m_sintin…...
2024/4/25 16:00:32 - 工厂模式白话理解
1.工厂模式(Factory pattern) 工厂模式顾名思义就是生产产品的工厂,用于生产接口方法. 举个例子: 发动机工厂 制造发动机 不同的厂家 根据这个发动机 做出来的不同的车 发动机工厂: 接口类 发动机: 方法 厂家: 开发者 车: 实现的功能 …...
2024/4/23 19:34:27 - Python | 密码验证 | pyotp+qrcode实现MFA生成与验证(基于Python2.7.13)
# -*- coding:utf-8 -*-import datetime import pyotp from qrcode import QRCode from qrcode import constants# 为了方便我用一个固定值测试 # secret_key pyotp.random_base32() secret_key "IVMUUGHFE6XJ7YKX"def generate_opt(username, issuer_name):"…...
2024/4/26 21:58:17 - 激励和设定可实现的目标是任何学习成功的关键。
both motivation and setting achievable goals are the key to success with any learning....
2024/4/25 21:46:47 - 设计模式之禅读书笔记-六大原则之单一设计原则
#设计模式 #设计原则 对于接口应该尽量保证单一职责原则。 比如将接口的信息和行为分开,拆分为两个接口。 不过也要打破惯性思维 比如电话的功能,拨通和挂断属于协议通信,通话属于数据传输。也算是两种原则。在实际项目有需要时,…...
2024/4/19 23:31:12
最新文章
- [网络安全] apt攻击是什么?
什么是APT攻击:APT攻击的主要特征包括:APT攻击的防御措施:零基础入门学习路线视频配套资料&国内外网安书籍、文档网络安全面试题 什么是APT攻击: APT(Advanced Persistent Threat,高级持续性威胁&…...
2024/4/27 4:48:27 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 论文阅读AI工具链
文献检索 可以利用智谱清言来生成合适的文献检索式,并根据需要不断调整。 谷歌学术 在Google Scholar中进行检索时,您可以使用类似的逻辑来构建您的搜索式,但是语法会有所不同。Google Scholar的搜索框接受普通的文本搜索,但是…...
2024/4/23 6:25:51 - 【Linux实验室】NFS、DHCP的搭建
NFS、DHCP的搭建 1、nfs服务搭建及测试什么是NFS?环境准备服务端机器安装nfs-utils和rpcbind包启动NFS服务创建/data/NFSdata目录,配置nfs文件启动服务挂载测试在服务端在共享目录下创建文件测试在客户端在共享目录下创建文件 2、dhcp服务搭建及测试什么…...
2024/4/23 12:03:02 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/26 18:09:39 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/26 20:12:18 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/26 23:05:52 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/27 4:00:35 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/25 18:39:22 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/25 18:39:22 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/26 21:56:58 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/25 16:48:44 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/26 16:00:35 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/25 18:39:16 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/26 22:01:59 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/25 2:10:52 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/25 18:39:00 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/26 19:46:12 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/25 18:38:58 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/25 18:38:57 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57