C++深度解析教程笔记12ok-继承,继承的构造与析构,同名覆盖

C++深度解析教程笔记12

  • 第43课 - 继承的概念和意义
    • 实验-类的组合
    • 实验-类的继承
    • 实验-子类与父类的构造顺序
    • 小结
  • 第44课 - 继承中的访问级别
    • 实验-子类直接访问父类非公成员(error)
    • 实验-子类访问父类非公成员protected
    • 实验-复杂的例子
      • bug
    • 小结
  • 第45课 - 不同的继承方式
    • 实验-例子
    • 实验-3种继承的对比
    • 实验-多种语言分析
    • 小结
  • 第46课 - 继承中的构造与析构
    • 实验-默认调用
    • 实验-显示调用
    • 实验-析构顺序
    • 小结
  • 第47课 - 父子间的冲突
    • 实验-子类与父类的同名变量
    • 实验-区分子类与父类的同名变量
    • 实验-子类函数覆盖父类同名函数
    • 小结
  • 第48课 - 同名覆盖引发的问题
    • 实验-父类赋值给子类
    • 实验-函数重写
    • 小结

第43课 - 继承的概念和意义

在这里插入图片描述
在这里插入图片描述

实验-类的组合

#include <iostream>
#include <string>

using namespace std;

class Memory
{
public:
    Memory()
    {
        cout << "Memory()" << endl;
    }
    ~Memory()
    {
        cout << "~Memory()" << endl;
    }
};

class Disk
{
public:
    Disk()
    {
        cout << "Disk()" << endl;
    }
    ~Disk()
    {
        cout << "~Disk()" << endl;
    }   
};

class CPU
{
public:
    CPU()
    {
        cout << "CPU()" << endl;
    }
    ~CPU()
    {
        cout << "~CPU()" << endl;
    }    
};

class MainBoard
{
public:
    MainBoard()
    {
        cout << "MainBoard()" << endl;
    }
    ~MainBoard()
    {
        cout << "~MainBoard()" << endl;
    }    
};

class Computer
{
    Memory mMem;
    Disk mDisk;
    CPU mCPU;
    MainBoard mMainBoard;
public:
    Computer()
    {
        cout << "Computer()" << endl;
    }
    void power()
    {
        cout << "power()" << endl;
    }
    void reset()
    {
        cout << "reset()" << endl;
    }
    ~Computer()
    {
        cout << "~Computer()" << endl;
    }
};

int main()
{   
    Computer c;
    
    return 0;
}
/*
Memory()
Disk()
CPU()
MainBoard()
Computer()
~Computer()
~MainBoard()
~CPU()
~Disk()
~Memory()
*/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验-类的继承

#include <iostream>
#include <string>

using namespace std;

class Parent
{
    int mv;
public:
    Parent()
    {
        cout << "Parent()" << endl;
        mv = 100;
    }
    void method()
    {
        cout << "mv = " << mv << endl;
    }
};

class Child : public Parent
{
public:
    void hello()
    {
        cout << "I'm Child calss!" << endl;
    }
};

int main()
{   
    Child c;
    
    c.hello();
    c.method();
    
    return 0;
}
/*
Parent()
I'm Child calss!
mv = 100
*/

在这里插入图片描述
在这里插入图片描述

实验-子类与父类的构造顺序

#include <iostream>
#include <string>

using namespace std;

class Memory
{
public:
    Memory()
    {
        cout << "Memory()" << endl;
    }
    ~Memory()
    {
        cout << "~Memory()" << endl;
    }
};

class Disk
{
public:
    Disk()
    {
        cout << "Disk()" << endl;
    }
    ~Disk()
    {
        cout << "~Disk()" << endl;
    }   
};

class CPU
{
public:
    CPU()
    {
        cout << "CPU()" << endl;
    }
    ~CPU()
    {
        cout << "~CPU()" << endl;
    }    
};

class MainBoard
{
public:
    MainBoard()
    {
        cout << "MainBoard()" << endl;
    }
    ~MainBoard()
    {
        cout << "~MainBoard()" << endl;
    }    
};

class Computer
{
    Memory mMem;
    Disk mDisk;
    CPU mCPU;
    MainBoard mMainBoard;
public:
    Computer()
    {
        cout << "Computer()" << endl;
    }
    void power()
    {
        cout << "power()" << endl;
    }
    void reset()
    {
        cout << "reset()" << endl;
    }
    ~Computer()
    {
        cout << "~Computer()" << endl;
    }
};

class HPBook : public Computer
{
    string mOS;
public:
    HPBook()
    {
        mOS = "Windows 8";
    }
    void install(string os)
    {
        mOS = os;
    }
    void OS()
    {
        cout << mOS << endl;
    }
};

class MacBook : public Computer
{
public:
    void OS()
    {
        cout << "Mac OS" << endl;
    }
};

int main()
{   
    HPBook hp;
    
    hp.power();
    hp.install("Ubuntu 16.04 LTS");
    hp.OS();
    
    cout << endl;
    
    MacBook mac;
    
    mac.OS();
    
    return 0;
}
/*
Memory()
Disk()
CPU()
MainBoard()
Computer()
power()
Ubuntu 16.04 LTS

Memory()
Disk()
CPU()
MainBoard()
Computer()
Mac OS
~Computer()
~MainBoard()
~CPU()
~Disk()
~Memory()
~Computer()
~MainBoard()
~CPU()
~Disk()
~Memory()

*/

小结

在这里插入图片描述

第44课 - 继承中的访问级别

在这里插入图片描述
在这里插入图片描述

实验-子类直接访问父类非公成员(error)

#include <iostream>
#include <string>

using namespace std;

class Parent
{
private:
    int mv;
public:
    Parent()
    {
        mv = 100;
    }
    
    int value()
    {
        return mv;
    }
};

class Child : public Parent
{
public:
    int addValue(int v)
    {
        mv = mv + v;    // ???? 如何访问父类的非公有成员  error: 'int Parent::mv' is private within this context
    }
};

int main()
{   
    return 0;
}

在这里插入图片描述

实验-子类访问父类非公成员protected

#include <iostream>
#include <string>

using namespace std;

class Parent
{
protected:
    int mv;
public:
    Parent()
    {
        mv = 100;
    }
    
    int value()
    {
        return mv;
    }
};

class Child : public Parent
{
public:
    void addValue(int v)
    {
        mv = mv + v;    //子类使用父类protected成员变量
    }
};

int main()
{   
    Parent p;
    
    cout << "p.mv = " << p.value() << endl;//p.mv = 100
    
    // p.mv = 1000;    // error
    
    Child c;
    
    cout << "c.mv = " << c.value() << endl;//c.mv = 100  子类返回父类protected成员变量
    
    c.addValue(50);
    
    cout << "c.mv = " << c.value() << endl;//c.mv = 150 
    
   // c.mv = 10000;  // error: 'int Parent::mv' is protected within this context
    
    return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验-复杂的例子

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

class Object
{
protected:
    string mName;
    string mInfo;
public:
    Object()
    {
        mName="Object";
        mInfo="";

    }
    string GetName()
    {
        return mName;
    }
    string GetInfo()
    {
        return mInfo;
    }

};

class Point:public Object
{
private:
    int mx;
    int my;
public:
    Point(int x=0,int y=0)
    {
        mx=x;
        my=y;
        ostringstream s;
        mName="point";
        s<<"P("<<mx<<","<<my<<")";
        mInfo=s.str();
    }
    int x()
    {
        return mx;
    }
    int y()
    {
        return my;
    }
};


class Line:public Object
{
private:
    Point mp1;
    Point mp2;
public:
    Line(Point p1,Point p2)
    {
        mp1=p1;
        mp2=p2;
        ostringstream s;
        mName="Line";
        s<<"Line from "<<mp1.GetInfo()<<" to "<<mp2.GetInfo();//mp2.GetInfo()  .mInfo
        mInfo=s.str();

    }
    Point linestart()
    {
        return mp1;
    }
    Point lineend()
    {
        return mp2;
    }
};/*
*/

int main()
{

    Object o;
    Point p1(1,2);
    Point p2(3,4);
    Line L1(p1,p2);/**/
    cout<<"o.GetName():"<<o.GetName()<<endl;
    cout << "o.GetInfo():"<<o.GetInfo() << endl;

    cout << endl;

    cout << p1.GetName() << endl;
    cout << p1.GetInfo() << endl;

    cout << endl;

    cout << L1.GetName() << endl;
    cout << L1.GetInfo() << endl;
    return 0;
}
/*
o.GetName():Object
o.GetInfo():

point
P(1,2)

Line
Line from P(1,2) to P(3,4)*/

bug

s<<"Line from "<<mp1.GetInfo()<<" to "<<mp2.mInfo;//mp2.GetInfo()  .mInfo//error: 'std::string Object::mInfo' is protected|位置在父类的定义位置

小结

在这里插入图片描述

第45课 - 不同的继承方式

在这里插入图片描述
在这里插入图片描述

实验-例子

#include <iostream>
#include <string>

using namespace std;

class Parent
{
};

class Child_A : public Parent
{
};

class Child_B : protected Parent
{
};

class Child_C : private Parent
{
};

int main()
{   
    return 0;
}

在这里插入图片描述
在这里插入图片描述

实验-3种继承的对比

#include <iostream>
#include <string>

using namespace std;

class Parent
{
protected:
    int m_a;
protected:
    int m_b;
public:
    int m_c;
    
    void set(int a, int b, int c)
    {
        m_a = a;
        m_b = b;
        m_c = c;
    }
};

class Child_A : public Parent
{
public:
    void print()
    {
        cout << "m_a" << m_a <<"   "
            << "m_b" << m_b <<"   "
     << "m_c" << m_c << endl;
    }
};

class Child_B : protected Parent
{
public:
    void print()
    {
        cout << "m_a" << m_a <<"   "
                << "m_b" << m_b <<"   "
                 << "m_c" << m_c << endl;
    }
};

class Child_C : private Parent
{
public:
    void print()
    {
        cout << "m_a" << m_a << "   "
               << "m_b" << m_b << "    "
               << "m_c" << m_c << endl;
    }
};

int main()
{   
    Child_A a;
    Child_B b;
    Child_C c;
    
    a.m_c = 100;
     //b.m_c = 100;    // Child_B 保护继承自 Parent, 所以所有的 public 成员全部变成了 protected 成员, 因此外界无法访问 error: 'int Parent::m_c' is inaccessible within this context
    //c.m_c = 100;    // Child_C 私有继承自 Parent, 所以所有的成员全部变成了 private 成员, 因此外界无法访问error: 'int Parent::m_c' is inaccessible within this context
    
    a.set(1, 1, 1);
    //b.set(2, 2, 2);//error: 'Parent' is not an accessible base of 'Child_B'
    //c.set(3, 3, 3);//error: 'Parent' is not an accessible base of 'Child_C'
    
    a.print();     //m_a1   m_b1   m_c1
 // b.m_a = 100;// error: 'int Parent::m_a' is protected within this context
    b.print();    //m_a2   m_b0   m_c14639008
    c.print();    //m_a0   m_b8    m_c0
    
    return 0;
}

在这里插入图片描述

实验-多种语言分析

在这里插入代码片

gdc 45-3.d
./a.out
gmcs 45-3.cs
/45-3.exe

javac 45-3.java
java program

小结

在这里插入图片描述

第46课 - 继承中的构造与析构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
子类对象的构造子类中
可以定义构造函数子类构造函数
一必须对继承而来的成员进行初始化
·直接通过初始化列表或者赋值的方式进行初始
调用父类构造函数进行初始化
在这里插入图片描述

实验-默认调用

#include <iostream>
#include <string>

using namespace std;

class Parent 
{
public:
    Parent()
    {
        cout << "Parent()" << endl;
    }
    Parent(string s)
    {
        cout << "Parent(string s) : " << s << endl;
    }
};

class Child : public Parent
{
public:
    Child()
    {
        cout << "Child()" << endl;
    }
    Child(string s) : Parent(s)//不能丢
    {
        cout << "Child(string s) : " << s << endl;
    }
};

int main()
{       
    Child c; //Child()  Parent() 不对
    Child cc("cc");  // Parent(string s) :cc    Child(string s) :cc
    
    return 0;
}
/*
Parent()
Child()
Parent(string s) : cc
Child(string s) : cc   */

对象创建时构造函数的调用顺序 1.
调用父类的构造函数 2.
调用成员变量的构造函数 3.调用类自身的构造函数
口诀心法:
先父母,后客人,再自己,
在这里插入图片描述
在这里插入图片描述

实验-显示调用

#include <iostream>
#include <string>

using namespace std;

class Object
{
public:
    Object(string s)
    {
        cout << "Object(string s) : " << s << endl;
    }
};

class Parent : public Object
{
public:
    Parent() : Object("Default")
    {
        cout << "Parent()" << endl;
    }
    Parent(string s) : Object(s)
    {
        cout << "Parent(string s) : " << s << endl;
    }
};

class Child : public Parent
{
    Object mO1;
    Object mO2;
public:
    Child() : mO1("Default 1"), mO2("Default 2")
    {
        cout << "Child()" << endl;
    }
    Child(string s) : Parent(s), mO1(s + " 1"), mO2(s + " 2")
    {
        cout << "Child(string s) : " << s << endl;
    }
};

int main()
{       
    Child cc("cc");
    
    return 0;
}
//先父母
//Object(string s) :cc
//Parent(string s) : cc



//再客人
//Object(string s) :cc1
//Object(string s) :cc2

//自己
//Child(string s) :cc
/*
Object(string s) : cc
Parent(string s) : cc
Object(string s) : cc 1
Object(string s) : cc 2
Child(string s) : cc
*/


在这里插入图片描述

实验-析构顺序

#include <iostream>
#include <string>

using namespace std;

class Object
{
    string ms;
public:
    Object(string s)
    {
        cout << "Object(string s) : " << s << endl;
        ms = s;
    }
    ~Object()
    {
        cout << "~Object() : " << ms << endl;
    }
};

class Parent : public Object
{
    string ms;
public:
    Parent() : Object("Default")
    {
        cout << "Parent()" << endl;
        ms = "Default";
    }
    Parent(string s) : Object(s)
    {
        cout << "Parent(string s) : " << s << endl;
        ms = s;
    }
    ~Parent()
    {
        cout << "~Parent() : " << ms << endl;
    }
};

class Child : public Parent
{
    Object mO1;
    Object mO2;
    string ms;
public:
    Child() : mO1("Default 1"), mO2("Default 2")
    {
        cout << "Child()" << endl;
        ms = "Default";
    }
    Child(string s) : Parent(s), mO1(s + " 1"), mO2(s + " 2")
    {
        cout << "Child(string s) : " << s << endl;
        ms = s;
    }
    ~Child()
    {
        cout << "~Child() " << ms << endl;
    }
};

int main()
{       
    Child cc("cc");
    
    cout << endl;
    
    return 0;
}
//Object(string s) :cc
//Parent(string s) :cc
//Object(string s) :cc 1
//Object(string s) :cc 2
//Child(string s) : cc

//~Child() cc
//~Object() :cc 2
//~Object() :cc 1
//~Parent() :cc
//~Object() :cc





小结

在这里插入图片描述

第47课 - 父子间的冲突

在这里插入图片描述

实验-子类与父类的同名变量

#include <iostream>
#include <string>

using namespace std;

class Parent
{
public:
    int mi;
};

class Child : public Parent
{
public:
    int mi;
};

int main()
{
    Child c;
    
    c.mi = 100;    // mi 究竟是子类自定义的,还是从父类继承得到的?
    
    return 0;
}

在这里插入图片描述
在这里插入图片描述

实验-区分子类与父类的同名变量

#include <iostream>
#include <string>

using namespace std;

namespace A
{
    int g_i = 0;
}

namespace B
{
    int g_i = 1;
}

class Parent
{
public:
    int mi;
    
    Parent()
    {
        cout << "Parent() : " << "&mi = " << &mi << endl;
    }
};

class Child : public Parent
{
public:
    int mi;
    
    Child()
    {
        cout << "Child() : " << "&mi = " << &mi << endl;
    }
};

int main()
{
    Child c;
    
    c.mi = 100;    
    
    c.Parent::mi = 1000;
    
    cout << "&c.mi = " << &c.mi << endl;
    cout << "c.mi = " << c.mi << endl;
    
    cout << "&c.Parent::mi = " << &c.Parent::mi << endl;
    cout << "c.Parent::mi = " << c.Parent::mi << endl;
    
    return 0;
}
/*
Parent() : &mi = 0x61fe18
Child() : &mi = 0x61fe1c
&c.mi = 0x61fe1c
c.mi = 100
&c.Parent::mi = 0x61fe18
c.Parent::mi = 1000
*/

在这里插入图片描述
在这里插入图片描述

实验-子类函数覆盖父类同名函数

#include <iostream>
#include <string>

using namespace std;

class Parent
{
public:
    int mi;
    
    void add(int v)
    {
        mi += v;
    }
    
    void add(int a, int b)
    {
        mi += (a + b);
    }
};

class Child : public Parent
{
public:
    int mi;
    
    void add(int v)
    {
        mi += v;
    }
    
    void add(int a, int b)
    {
        mi += (a + b);
    }
    
    void add(int x, int y, int z)
    {
        mi += (x + y + z);
    }
};

int main()
{
    Child c;
    
    c.mi = 100;    
    
    c.Parent::mi = 1000;
    
    cout << "c.mi = " << c.mi << endl;
    
    cout << "c.Parent::mi = " << c.Parent::mi << endl;
    
    c.add(1);//子类
    c.add(2, 3);//子类
    c.add(4, 5, 6);//子类
    //c.Parent::add(2, 3);调用父类函数
    cout << "c.mi = " << c.mi << endl;//
    
    cout << "c.Parent::mi = " << c.Parent::mi << endl;
    //c.mi = 100
//c.Parent::mi = 1000
//c.mi = 121
//c.Parent::mi = 1000
    return 0;
}

在这里插入图片描述

小结

在这里插入图片描述

第48课 - 同名覆盖引发的问题

在这里插入图片描述

实验-父类赋值给子类

用子类初始化父类
父类引用子类
父类指向子类

#include <iostream>
#include <string>

using namespace std;

class Parent
{
public:
    int mi;
    
    void add(int i)
    {
        mi += i;
    }
    
    void add(int a, int b)
    {
        mi += (a + b);
    }
};

class Child : public Parent
{
public:
    int mv;
    
    void add(int x, int y, int z)
    {
        mv += (x + y + z);
    }
};

int main()
{
    Parent p;
    Child c;
    
    p = c;//子类赋值给父类
    
    Parent p1(c);
    
    
    Parent& rp = c;//定义父类引用子类
    Parent* pp = &c;
    
    rp.mi = 100;
    rp.add(5);             // c的引用 的add预计报错  没有发生同名覆盖?
    rp.add(10, 10);        // 没有发生同名覆盖?
    
    /* 为什么编译不过? */
     //pp->mv = 1000;//error: 'class Parent' has no member named 'mv'; did you mean 'mi'?
     //pp->add(1, 10, 100);// error: no matching function for call to 'Parent::add(int, int, int)'
    
    return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验-函数重写

#include <iostream>
#include <string>

using namespace std;

class Parent
{
public:
    int mi;
    
    void add(int i)
    {
        mi += i;
    }
    
    void add(int a, int b)
    {
        mi += (a + b);
    }
    
    void print()
    {
        cout << "I'm Parent." << endl;
    }
};

class Child : public Parent
{
public:
    int mv;
    
    void add(int x, int y, int z)
    {
        mv += (x + y + z);
    }
    
    void print()
    {
        cout << "I'm Child." << endl;
    }
};
//void how_to_print(Child* p)//error: invalid conversion from 'Parent*' to 'Child*' [-fpermissive]
void how_to_print(Parent* p)//父类指针
{
    p->print();
}

int main()
{
    Parent p;
    Child c;
    
    how_to_print(&p);    // Expected to print: I'm Parent.
    how_to_print(&c);    // Expected to print: I'm Child.
    
    return 0;
}
//I'm Parent.
//I'm Parent.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何构建全生命周期的安全体系架构来确保容器的安全?

容器技术在云原生应用和微服务架构中得到了广泛应用&#xff0c;其轻量、灵活和高效的特点使其成为现代IT环境中的重要工具。然而&#xff0c;尽管容器带来了许多优势&#xff0c;但其安全性问题也不容忽视。接下来跟随博主一起探索如何构建全生命周期的安全体系架构以确保容器…

《算法笔记》总结No.7——二分(多例题详解版)

一.二分查找 目前有一个有序数列&#xff0c;举个例子&#xff0c;假设是1~1000&#xff0c;让我们去查找931这个数字&#xff0c;浅显且暴力的做法就是直接从头到尾遍历一遍&#xff0c;直到找到931为止。当n非常大&#xff0c;比如达到100w时&#xff0c;这是一个非常大的量级…

经纬恒润底盘控制产品R-EPS成功量产

近日&#xff0c;经纬恒润开发的齿条式电动助力转向系统R-EPS&#xff08;Rack-Electronic Power Steering&#xff09;搭载某新能源车企中高端MPV车型&#xff0c;成功量产落地。 该产品采用恒润Double Pinion/Rack平台级的软硬件方案&#xff0c;模块复用程度更高&#xff0c…

5.4 软件工程-系统设计

系统设计 - 概述 设计软件系统总体结构 数据结构及数据库设计 编写概要设计文档、评审 详细设计的基本任务 真题

DHCP服务、FTP服务

一、DHCP 1.1 DHCP是什么 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09;是一种网络协议&#xff0c;用于自动分配 IP 地址和其他网络配置信息给网络中的设备 1.2 DHCP的好处 自动化: 减少了手动配置 IP 地址和网络参数的工…

pc端注册页面 密码校验规则

1.密码校验规则 格应包含大小写字母、数字和特殊符号,长度为8-20 var validateRetrievePassword (rule, value, callback) > {let reg /^(?.*[A-Za-z])(?.*\d)(?.*[~!#$%^&*()_<>?:"{},.\/\\;[\]])[A-Za-z\d~!#$%^&*()_<>?:"{},.\/\\;…

Linux系统下weblogic10.3.6版本打补丁步骤

linux系统 weblogic补丁压缩包&#xff1a;p35586779_1036_Generic.zip 链接&#xff1a;https://pan.baidu.com/s/1EEz_zPX-VHp5EU5LLxfxjQ 提取码&#xff1a;XXXX &#xff08;补丁压缩包中包含以下东西&#xff09; 打补丁步骤&#xff1a; 1.备份原weblogic(需要先确保服…

【Linux杂货铺】期末总结篇3:用户账户管理命令 | 组账户管理命令

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux杂货铺、Linux实践室 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 第五章5.1 ⛳️Linux 账户5.2 ⛳️用户配置文件和目录&#xff08;未完待续&#xff09;5.2.1 …

【机器学习实战】Datawhale夏令营2:音视频攻防(deepfake)Baseline句解

# Datawhale # AI夏令营 # 夏令营 文章目录 1. 赛题简要介绍2. 赛题数据集3. 评价指标4. Baseline整体4.1 计算样本数4.2 创建video对象4.3 下载需要的库&&补充知识4.4 设置pytorch随机种子&&CUDNN配置4.5 音视频预处理4.6 创建训练数据文件夹4.7 生成梅尔频谱…

habase集群安装

解压到/opt/softs目录 tar -zxvf hbase-2.4.11-bin.tar.gz -C /opt/softs/ 改名 mv hbase-2.4.11/ hbase2.4.11 配置环境变量 修改/etc/profile vim /etc/profile 添加 #HBASE_HOME export HBASE_HOME/opt/softs/hbase2.4.11 export PATH$PATH:$HBASE_HOME/bin 修改其中的…

Linux部署禅道(无脑复制版)

目录 环境部署1、下载&#xff0c;解压2、启动3、设置开机自启 登录禅道登录数据库1、设置账号2、网页登录数据库 环境 Linux系统 Centos7 《Linux一键安装包安装禅道》视频链接&#xff1a; https://www.zentao.net/zentao-install/zentao-linux-install-80523.html 部署 …

matine组件库踩坑日记 --- react

Mantine实践 一 禁忌核心css样式二 添加轮播图扩展组件 一 禁忌核心css样式 import React from react import ReactDOM from react-dom/client import { BrowserRouter } from react-router-dom; import App from ./App.jsx import ./index.css import mantine/core/styles.cs…

如何PR到别人仓库(指定分支,无废话)

如何PR到别人仓库&#xff08;指定分支&#xff09; 记录一下&#xff0c;之前都是直接master分支&#xff0c;现在记录如何pr到别人仓库的其他分支 首先进入别人仓库然后点击fork到自己仓库 步骤&#xff08;以博主自己一个例子为例&#xff09; &#xff08;1&#xff09;…

Andriod Stdio新建Kotlin的Jetpack Compose简单项目

1.选择 No Activity 2.选择kotlin 4.右键选择 在目录MyApplication下 New->Compose->Empty Project 出现下面的画面 Finish 完成

MySql 数据库 - 下载安装

MySQL数据库 简单介绍 数据库 数据存储的仓库数据库管理系统 操作和管理数据库的大型软件SQL 操作关系型数据库的变成语言&#xff0c;是一套标准 版本 MySQL官方提供了两种不同的版本&#xff1a; 社区版 免费&#xff0c;MySQL不提供任何的技术支持商业版 收费&#xff0c…

[crypt]-密码学心声

通过音乐来传递情报&#xff0c;乐谱如下&#xff1a; 乐谱中有请转成艾塞克、十进制等等&#xff0c;可以将数字转为assic试试&#xff0c;1234567&#xff0c;猜测是8进制&#xff0c;三位一组&#xff0c;破解如下&#xff1a; oct8 [111, 114, 157, 166, 145, 123, 145, …

【vue教程】二. Vue特性原理详解

目录 回顾本章涵盖知识点Vue 实例和选项创建 Vue 实例Vue 实例的选项 Vue 模板语法插值表达式指令v-bindv-modelv-on 自定义指令创建自定义指令在模板中使用自定义指令自定义指令的钩子函数自定义指令的实例演示 指令注册局部注册指令过滤器 数据绑定和响应式原理响应式数据绑定…

Prometheus监控主机进程

前言 客户端安装及配置 Premetheus服务端配置 模板导入 grafana效果图 前言 此场景主要是利用process-export监控主机的进程存活、资源占用率&#xff0c;防止进程挂掉导致服务崩溃 gitlab地址&#xff1a;GitHub - ncabatoff/process-exporter: Prometheus exporter that…

unseping

nnnd&#xff0c;这道题谁标的难度1&#xff01;参考文章&#xff1a;江苏工匠杯-unseping&序列化&#xff0c;正则绕过(全网最简单的wp)_江苏工匠杯unseping-CSDN博客 这是这道题的源码&#xff0c;一看exec和unserialize就是反序列化和命令执行&#xff0c;还有个正则应…

安全防御拓扑1

目录 实验的拓扑&#xff1a; 要求&#xff1a; 我搭建的实验拓扑 步骤&#xff1a; 创建vlan&#xff1a; 接口配置&#xff1a; 防火墙&#xff1a; 防火墙配置&#xff1a; 建立安全策略&#xff1a; 防火墙的用户&#xff1a; 办公区的市场部和研发部用户 市场部…