C++深度解析教程筆記9-靜態成員變量,靜態成員函數,二階構造,友元,函數重載,操作符重載

C++深度解析教程筆記9

  • 第25課 - 類的靜態成員變量
    • 實驗-數對象個數(失敗)
    • 實驗-靜態變量
    • 小結
  • 第26課 - 類的靜態成員函數
    • 實驗-修改對象的靜態變量數值
    • 實驗-利用靜態成員函數
    • 實驗-靜態變量+靜態函數實現統計對象個數
    • 小結
  • 第27課 - 二階構造模式
    • 實驗-初始化是否成功
    • 實驗-二階構造例子
    • 實驗-二階構造數組類
    • 小結
  • 第28課 - 友元的尷尬能力
    • 實驗-友元
    • 實驗-友元不具有傳遞性
    • 小結
  • 第29課 - 類中的函數重載
    • 實驗
    • 實驗
    • 實驗
    • 小結
  • 第30課 - 操作符重載的概念
    • 實驗-友元實現復數相加
    • 實驗-操作符重載
    • 實驗
    • 小結
  • 第31課 - 完善的復數類
    • 實驗
    • 小結

本文學習自狄泰軟件學院 唐佐林老師的 C++深度解析教程,圖片全部來源于課程PPT,僅用于個人學習記錄

第25課 - 類的靜態成員變量

成員變量不能在對象間共享,是專屬的,可通過對象名訪問public成員變量
需求

在這里插入圖片描述

實驗-數對象個數(失敗)

#include <stdio.h>class Test
{
private:int mCount;
public:Test() : mCount(0){mCount++;}~Test(){--mCount;}int getCount(){return mCount;}
};Test gTest;int main()
{Test t1;Test t2;printf("count = %d\n", gTest.getCount());printf("count = %d\n", t1.getCount());printf("count = %d\n", t2.getCount());return 0;
}
/*
期望輸出1 2 3,實際輸出:
count = 1
count = 1
count = 1
*/

在這里插入圖片描述
在這里插入圖片描述

實驗-靜態變量

#include <stdio.h>class Test
{
private:static int cCount;//靜態
public:Test(){cCount++;}~Test(){--cCount;}int getCount(){return cCount;}
};int Test::cCount = 0;Test gTest;int main()
{Test t1;Test t2;printf("count = %d\n", gTest.getCount());printf("count = %d\n", t1.getCount());printf("count = %d\n", t2.getCount());Test* pt = new Test();printf("count = %d\n", pt->getCount());delete pt;printf("count = %d\n", gTest.getCount());return 0;
}
/*
count = 3
count = 3
count = 3
count = 4
count = 3*/

小結

類中可以通過static關鍵定義靜態成員變量
靜態成員變量
在這里插入圖片描述

第26課 - 類的靜態成員函數

問題:不能隨時獲取當前對象的數據,沒有安全性,使用了全局變量
在這里插入圖片描述

實驗-修改對象的靜態變量數值

#include <stdio.h>class Test
{
public:static int cCount;
public:Test(){cCount++;}~Test(){--cCount;}int getCount(){return cCount;}
};int Test::cCount = 0;int main()
{printf("count = %d\n", Test::cCount);//count = 0Test::cCount = 1000;//可以修改數值,安全性問題printf("count = %d\n", Test::cCount);//count = 1000return 0;
}

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

實驗-利用靜態成員函數

#include <stdio.h>class Demo
{
private:int i;
public:int getI();static void StaticFunc(const char* s);//靜態函數static void StaticSetI(Demo& d, int v);//靜態函數
};int Demo::getI()
{return i;
}void Demo::StaticFunc(const char* s)
{printf("StaticFunc: %s\n", s);
}void Demo::StaticSetI(Demo& d, int v)
{d.i = v;
}int main()
{Demo::StaticFunc("main Begin...");//不需要對象,通過類直接調用Demo d;Demo::StaticSetI(d, 10);printf("d.i = %d\n", d.getI());Demo::StaticFunc("main End...");return 0;
}
/*
StaticFunc: main Begin...
d.i = 10
StaticFunc: main End...*/

在這里插入圖片描述

實驗-靜態變量+靜態函數實現統計對象個數

#include <stdio.h>class Test
{
private:static int cCount;
public:Test(){cCount++;}~Test(){--cCount;}static int GetCount(){return cCount;}
};int Test::cCount = 0;int main()
{printf("count = %d\n", Test::GetCount());Test t1;Test t2;printf("count = %d\n", t1.GetCount());printf("count = %d\n", t2.GetCount());Test* pt = new Test();printf("count = %d\n", pt->GetCount());delete pt;printf("count = %d\n", Test::GetCount());return 0;
}
/*count = 0
count = 2
count = 2
count = 3
count = 2
*/

小結

在這里插入圖片描述

第27課 - 二階構造模式

在這里插入圖片描述
在這里插入圖片描述

實驗-初始化是否成功

#include <stdio.h>class Test
{int mi;int mj;bool mStatus;//記錄初始化是否成功
public:Test(int i, int j) : mStatus(false){mi = i;return;//endmj = j;mStatus = true;}int getI(){return mi;}int getJ(){return mj;}int status()//獲取狀態{return mStatus;}
};int main()
{  Test t1(1, 2);// printf("t1.mi = %d\n", t1.getI());//printf("t1.mj = %d\n", t1.getJ());//不成功if( t1.status() ){printf("t1.mi = %d\n", t1.getI());printf("t1.mj = %d\n", t1.getJ());}return 0;
}

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

IntArray::IntArray(int len)
{//m_pointer = 0;//new int[len];case1m_pointer = new int[len];//case2if(m_pointer){for(int i=0; i<len; i++){m_pointer[i] = 0;}}m_length = len;
}int main()
{IntArray a(5);a.set(2, 3);    printf("%d\n", a.length());    a.free(); return 0;
}
cyz@cyz-virtual-machine:~/桌面/testcpp$ g++ main.cpp IntArray.cpp
cyz@cyz-virtual-machine:~/桌面/testcpp$ ./a.out
段錯誤 (核心已轉儲)
cyz@cyz-virtual-machine:~/桌面/testcpp$ g++ main.cpp IntArray.cpp
cyz@cyz-virtual-machine:~/桌面/testcpp$ ./a.out
5

實驗-二階構造例子

#include <stdio.h>class TwoPhaseCons 
{
private:TwoPhaseCons() // 第一階段構造函數{  //與系統資源無關的初始化 }bool construct() // 第二階段構造函數{ //與系統資源相關關的初始化return true; }
public:static TwoPhaseCons* NewInstance(); // 對象創建函數
};TwoPhaseCons* TwoPhaseCons::NewInstance() 
{TwoPhaseCons* ret = new TwoPhaseCons();// 若第二階段構造失敗,返回 NULL    if( !(ret && ret->construct()) ) {delete ret;//刪除半成品ret = NULL;}return ret;
}int main()
{TwoPhaseCons* obj = TwoPhaseCons::NewInstance();printf("obj = %p\n", obj);//obj = 0000000002521CB0delete obj;return 0;
}

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

實驗-二階構造數組類

//h文件 修改
class IntArray
{
private:int m_length;int* m_pointer;IntArray(int len) ;// 第一階段構造函數bool construct() ;// 第二階段構造函數IntArray(const IntArray& obj);public:
static IntArray* NewInstance(int length); // 對象創建函數 靜態成員函數//IntArray(int len);//構造函數改為私有 作為第一階段構造函數int length();bool get(int index, int& value);bool set(int index ,int value);~IntArray();
};
//IntArray.cpp
IntArray::IntArray(int len)//第一階段構造函數
{m_length = len;
}
bool IntArray::construct() // 第二階段構造函數{ bool ret=true;m_pointer = new int[m_length];//與系統資源相關關的初始化if(m_pointer){for(int i=0; i<m_length; i++){m_pointer[i] = 0;}}else{ret=false;}return ret; }
IntArray* IntArray::NewInstance(int length)// 對象創建函數
{IntArray* ret = new IntArray(length);//new 第一階段構造函數 // 若第二階段構造失敗,返回 NULL    if( !(ret && ret->construct()) ) {delete ret;//刪除半成品ret = 0;}return ret;
}
IntArray::~IntArray()
{delete[]m_pointer;//printf("~IntArray()\n");
}//main.cppIntArray* a = IntArray::NewInstance(5);    printf("a.length = %d\n", a->length());a->set(0, 1);for(int i=0; i<a->length(); i++){int v = 0;a->get(i, v);printf("a[%d] = %d\n", i, v);}delete a;

小結

在這里插入圖片描述

第28課 - 友元的尷尬能力

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

實驗-友元

#include <stdio.h>
#include <math.h>class Point
{double x;double y;
public:Point(double x, double y){this->x = x;this->y = y;}double getX(){return x;}double getY(){return y;}friend double func(Point& p1, Point& p2);//友元 實現訪問類
//friend double func(Point& p1, Point& p2);//注釋后 error: 'double Point::y' is private within this context
};double func(Point& p1, Point& p2)
{double ret = 0;ret = (p2.y - p1.y) * (p2.y - p1.y) +(p2.x - p1.x) * (p2.x - p1.x);ret = sqrt(ret);return ret;
}int main()
{Point p1(1, 2);Point p2(10, 20);printf("p1(%f, %f)\n", p1.getX(), p1.getY());//p1(1.000000, 2.000000)printf("p2(%f, %f)\n", p2.getX(), p2.getY());//p2(10.000000, 20.000000)printf("|(p1, p2)| = %f\n", func(p1, p2));//|(p1, p2)| = 20.124612return 0;
}

在這里插入圖片描述

在這里插入圖片描述

實驗-友元不具有傳遞性

#include <stdio.h>class ClassC
{const char* n;
public:ClassC(const char* n){this->n = n;}friend class ClassB;//B可以訪問C的成員
};class ClassB
{const char* n;
public:ClassB(const char* n){this->n = n;}void getClassCName(ClassC& c){printf("c.n = %s\n", c.n);}friend class ClassA;//A可以訪問B的成員
};
//無傳遞性,A不可以訪問C的成員
class ClassA
{const char* n;
public:ClassA(const char* n){this->n = n;}void getClassBName(ClassB& b){printf("b.n = %s\n", b.n);}/*void getClassCName(ClassC& c)//error: 'const char* ClassC::n' is private within this context{printf("c.n = %s\n", c.n);}*/};int main()
{ClassA A("A");ClassB B("B");ClassC C("C");A.getClassBName(B);//b.n = BB.getClassCName(C);//c.n = Creturn 0;
}

小結

在這里插入圖片描述

第29課 - 類中的函數重載

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

實驗

#include <stdio.h>class Test
{int i;
public:Test(){printf("Test::Test()\n");this->i = 0;}Test(int i){printf("Test::Test(int i)\n");this->i = i;}Test(const Test& obj){printf("Test(const Test& obj)\n");this->i = obj.i;}static void func(){printf("void Test::func()\n");}void func(int i){printf("void Test::func(int i), i = %d\n", i);}int getI(){return i;}
};void func()//全局函數1
{printf("void func()\n");
}void func(int i)//全局函數2
{printf("void func(int i), i = %d\n", i);
}int main()
{func();func(1);Test t;        // Test::Test()Test t1(1);    // Test::Test(int i)Test t2(t1);   // Test(const Test& obj)func();        // void func()Test::func();  // void Test::func()func(2);       // void func(int i), i = 2;t1.func(2);    // void Test::func(int i), i = 2t1.func();     // void Test::func()return 0;
}
/*
void func()
void func(int i), i = 1
Test::Test()
Test::Test(int i)
Test(const Test& obj)
void func()
void Test::func()
void func(int i), i = 2
void Test::func(int i), i = 2
void Test::func()*/

在這里插入圖片描述

實驗

#include <stdio.h>
#include <string.h>char* strcpy(char* buf, const char* str, unsigned int n)
{return strncpy(buf, str, n);
}int main()
{const char* s = "D.T.Software";char buf[8] = {0};//strcpy(buf, s);//報錯,放不下字符串strcpy(buf, s, sizeof(buf)-1);//利用重載擴展原有函數的功能printf("%s\n", buf);//D.T.Sofreturn 0;
}

在這里插入圖片描述
在這里插入圖片描述

實驗

在這里插入代碼片

小結

在這里插入圖片描述

第30課 - 操作符重載的概念

在這里插入圖片描述

實驗-友元實現復數相加

#include <stdio.h>class Complex 
{int a;int b;
public:Complex(int a = 0, int b = 0){this->a = a;this->b = b;}int getA(){return a;}int getB(){return b;}friend Complex Add(const Complex& p1, const Complex& p2);
};Complex Add(const Complex& p1, const Complex& p2)
{Complex ret;ret.a = p1.a + p2.a;ret.b = p1.b + p2.b;return ret;
}int main()
{Complex c1(1, 2);Complex c2(3, 4);Complex c3 = Add(c1, c2); // c1 + c2printf("c3.a = %d, c3.b = %d\n", c3.getA(), c3.getB());//c3.a = 4, c3.b = 6return 0;
}

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

實驗-操作符重載

#include <stdio.h>class Complex 
{int a;int b;
public:Complex(int a = 0, int b = 0){this->a = a;this->b = b;}int getA(){return a;}int getB(){return b;}friend Complex operator + (const Complex& p1, const Complex& p2);
};Complex operator + (const Complex& p1, const Complex& p2)
{Complex ret;ret.a = p1.a + p2.a;ret.b = p1.b + p2.b;return ret;
}int main()
{Complex c1(1, 2);Complex c2(3, 4);Complex c3 = operator+(c1, c2);//Complex c3 = c1 + c2;  printf("c3.a = %d, c3.b = %d\n", c3.getA(), c3.getB());//c3.a = 4, c3.b = 6return 0;
}

在這里插入圖片描述

實驗

#include <stdio.h>class Complex 
{int a;int b;
public:Complex(int a = 0, int b = 0){this->a = a;this->b = b;}int getA(){return a;}int getB(){return b;}Complex operator + (const Complex& p){Complex ret;printf("Complex operator + (const Complex& p)\n");ret.a = this->a + p.a;ret.b = this->b + p.b;return ret;}friend Complex operator + (const Complex& p1, const Complex& p2);
};Complex operator + (const Complex& p1, const Complex& p2)
{Complex ret;printf("Complex operator + (const Complex& p1, const Complex& p2)\n");ret.a = p1.a + p2.a;ret.b = p1.b + p2.b;return ret;
}int main()
{Complex c1(1, 2);Complex c2(3, 4);Complex c3 = c1 + c2; // c1.operator + (c2)printf("c3.a = %d, c3.b = %d\n", c3.getA(), c3.getB());return 0;
}
/*
Complex operator + (const Complex& p)
c3.a = 4, c3.b = 6
*/
編譯器優先調用類中的函數,其次才是全局函數

小結

在這里插入圖片描述

第31課 - 完善的復數類

在這里插入圖片描述
在這里插入圖片描述

實驗

#ifndef _COMPLEX_H_
#define _COMPLEX_H_class Complex
{
private:double a;double b;
public:Complex(double a=0,double b=0);double getA();double getB();double getmodulus();Complex operator+(const Complex& c);Complex operator-(const Complex& c);Complex operator*(const Complex& c);Complex operator/(const Complex& c);bool operator==(const Complex& c);bool operator!=(const Complex& c);Complex& operator=(const Complex& c);};
#endif // _COMPLEX_H_#include "Complex.h"
#include "math.h"Complex::Complex(double a,double b)
{this->a=a;this->b=b;
}
double Complex::getA()
{return a;
}
double Complex::getB(){return b;
}
double Complex::getmodulus()
{double res=sqrt(a*a+b*b);return res;
}Complex Complex::operator+(const Complex& c)
{double na=a+c.a;double nb=b+c.b;Complex res=Complex(na,nb);return res;
}
Complex Complex::operator-(const Complex& c)
{double na=a-c.a;double nb=b-c.b;Complex res=Complex(na,nb);return res;}
Complex Complex::operator*(const Complex& c)
{double na=a*c.a-b*c.b;double nb=a*c.b+b*c.a;Complex res=Complex(na,nb);return res;}
Complex Complex::operator/(const Complex& c)
{double m=c.a*c.a+c.b*c.b;double na=(a*c.a+b*c.b)/m;double nb=(-a*c.b+b*c.a)/m;Complex res=Complex(na,nb);return res;}bool Complex::operator==(const Complex& c){return a==c.a&&b==c.b;}
bool Complex::operator!=(const Complex& c)
{return !(a==c.a&&b==c.b);}
Complex& Complex::operator=(const Complex& c){if(this!=&c){a=c.a;b=c.b;}return *this;}//main.cpp
#include <stdio.h>
#include "Complex.h"int main()
{Complex a1(1,2);Complex a2(3,4);Complex a3=a1+a2;printf("%f %f\n",a3.getA(),a3.getB());printf("a3.getmodulus()=%f\n",a3.getmodulus());a3=a1-a2;printf("a1-a2 %f %f\n",a3.getA(),a3.getB());a3=a1*a2;printf("a1*a2%f %f\n",a3.getA(),a3.getB());a3=a1/a2;printf("a1/a2%f %f\n",a3.getA(),a3.getB());Complex a4=a1;printf("%f %f\n",a4.getA(),a4.getB());printf("a4==a1 %d  a4!=a1 %d\n",a4==a1,a4!=a1);return 0;
}

在這里插入圖片描述

小結

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45884.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45884.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45884.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

百度人臉識別Windows C++離線sdk C#接入

百度人臉識別Windows C離線sdk C#接入 目錄 說明 設計背景 ? 場景特點&#xff1a; ? 客戶特點&#xff1a; ? 核心需求&#xff1a; SDK 包結構 效果 代碼 說明 自己根據SDK封裝了動態庫&#xff0c;然后C#調用。 功能接口 設計背景 ? 場景特點&#xff1a; -…

【滲透入門】XSS

文章目錄 XSS漏洞XSS舉例XSS類型防御方式 XSS漏洞 XSS&#xff08;Cross-Site Scripting&#xff0c;跨站腳本攻擊&#xff09;是一種常見的Web應用程序安全漏洞。XSS漏洞發生在應用程序未能充分過濾用戶提供的數據&#xff0c;使得惡意腳本得以在不知情的用戶的瀏覽器中被執行…

ARFoundation系列講解 - 91 Immersal 簡介

一、Immersal 簡介 Immersal是一家專注于增強現實(AR)技術的公司,致力于開發和推廣空間感知解決方案(簡稱:大空間技術)。他們的核心產品是一個名為Immersal SDK的開發工具包,通過視覺定位(VPS)能夠輕松地在現實世界中實現高精度的定位和增強現實體驗。 二、Immersal …

Spring Boot集成Knife4j:實現高效API文檔管理

Spring Boot集成Knife4j&#xff1a;實現高效API文檔管理 在軟件開發過程中&#xff0c;編寫和維護接口文檔是一項必不可少的任務。隨著微服務架構的流行&#xff0c;API文檔的重要性日益凸顯。然而&#xff0c;傳統的手動編寫文檔方式不僅效率低下&#xff0c;而且容易出錯。…

支持前端路由權限和后端接口權限的企業管理系統模版

一、技術棧 前端&#xff1a;iview-admin vue 后端&#xff1a;springboot shiro 二、基于角色的權限控制 1、路由權限 即不同角色的路由訪問控制 2、菜單權限 即不同角色的菜單列表展示 3、按鈕權限 即不同角色的按鈕展示 4、接口權限 即不同角色的接口訪問控制 三…

數字化時代的生產革新:數字孿生平臺如何助力新質生產力

一.新質生產力 在當今快速發展的科技和信息時代&#xff0c;企業和組織在提高生產效率和質量方面面臨著越來越多的挑戰和機遇。新質生產力的概念應運而生&#xff0c;強調通過創新和技術進步&#xff0c;不僅提升生產的數量和速度&#xff0c;更重要的是優化生產方式、改善產品…

leetcode熱題100.分割等和子集(動態規劃)

分割等和子集 Problem: 416. 分割等和子集 思路 我選擇使用動態規劃的方法來解題。我們需要判斷是否可以將數組分割成兩個子集&#xff0c;使得這兩個子集的和相等。這個問題可以轉化為在數組中找到一個子集&#xff0c;使得其和等于數組總和的一半。 解題過程 首先&#xf…

消息隊列-RocketMQ

消息隊列-RocketMQ 1、RocketMQ是什么?2、RocketMQ有什么優缺點?3、消息隊列主要有哪幾種消息模型?4、RocketMQ主要使用哪種消息模型?5、RocketMQ的基本架構是怎樣的?有哪些核心組件?6、RocketMQ通過什么方式保證消息的可用性和可靠性?7、什么情況下會發生消息丟失?Roc…

設計模式大白話之裝飾者模式

想象一下&#xff0c;你走進一家咖啡館&#xff0c;點了一杯美式咖啡。但是&#xff0c;你可能還想根據自己的口味添加一些東西&#xff0c;比如奶泡、巧克力粉、焦糖醬或是肉桂粉。每次你添加一種配料&#xff0c;你的咖啡就會變得更豐富&#xff0c;同時價格也會相應增加。 在…

圖——圖的應用02最短路徑(Dijkstra算法與Floyd算法詳解),拓撲排序及關鍵路徑

前面介紹了圖的應用——01最小生成樹章節&#xff0c;大家可以通過下面的鏈接學習&#xff1a; 圖——圖的應用01最小生成樹&#xff08;Prim算法與Kruskal算法詳解&#xff09; 今天就講一下圖的其他應用——最短路徑&#xff0c;拓撲排序及關鍵路徑。 目錄 一&#xff0c…

HG/T 3655-2024 紫外光UV固化木器涂料檢測

紫外光UV固化木器涂料是指由活性低聚物、活性稀釋劑、光引發劑和其他成分組成的水性、非水性紫外光固化木器涂料&#xff0c;主要用于室內用木質地板、家具、裝飾板等木器的裝飾與保護。 HG/T 3655-2024紫外光UV固化木器涂料檢測項目&#xff1a; 測試指標 測試方法 在容器中…

成都亞恒豐創教育科技有限公司 【插畫猴子:筆尖下的靈動世界】

在浩瀚的藝術海洋中&#xff0c;每一種創作形式都是人類情感與想象力的獨特表達。而插畫&#xff0c;作為這一廣闊領域中的璀璨明珠&#xff0c;以其獨特的視覺語言和豐富的敘事能力&#xff0c;構建了一個又一個令人遐想連篇的夢幻空間。成都亞恒豐創教育科技有限公司 在眾多插…

MYSQL設計索引一般需要考慮哪些因素?

在設計MySQL索引時&#xff0c;確實需要綜合考慮多個因素以確保索引的有效性和性能優化。以下是您提到的參考思路的詳細擴展&#xff1a; 1. 數據量 數據量大小&#xff1a;通常&#xff0c;當表中的數據量超過一定閾值&#xff08;如幾百條記錄&#xff09;時&#xff0c;創…

Linux——進程概念詳解

一、進程的基本概念 在給進程下定義之前&#xff0c;我們先了解一下進程&#xff1a; 我們在編寫完代碼并運行起來時&#xff0c;在我們的磁盤中會形成一個可執行文件&#xff0c;當我們雙擊這個可執行文件時&#xff08;程序時&#xff09;&#xff0c;這個程序會加載到內存…

動手學深度學習6.3 填充和步幅-筆記練習(PyTorch)

以下內容為結合李沐老師的課程和教材補充的學習筆記&#xff0c;以及對課后練習的一些思考&#xff0c;自留回顧&#xff0c;也供同學之人交流參考。 本節課程地址&#xff1a;填充和步幅_嗶哩嗶哩_bilibili 代碼實現_嗶哩嗶哩_bilibili 本節教材地址&#xff1a;6.3. 填充和…

如何在 Ubuntu 14.04 服務器上使用 Nginx 安裝和保護 phpMyAdmin

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站。 介紹 像 MySQL 這樣的關系型數據庫管理系統在許多網站和應用程序中都是必不可少的。然而&#xff0c;并非所有用戶都習慣通過命令行來管…

oracle數據庫,怎么分頁查詢

項目場景&#xff1a; 使用oracle數據庫&#xff0c;怎么分頁查詢 問題描述 平常使用的最多的是MySQL DB, 用的是 limit 語句&#xff1b;Oracle DB, 沒有 limit 語句&#xff1b; 原因分析&#xff1a; 解決方案&#xff1a; SELECT * FROM (SELECT t.*, ROWNUM rn FROM…

java算法day16

java算法day16 112 路徑總和404 左葉子之和513 找樹左下角的值 112 路徑總和 題型判定為自頂向下類型&#xff0c;并且為路徑和類型。 那就套模板。 自頂向下就是從上到下處理&#xff0c;那么就是前序遍歷的思想。 class Solution {boolean res false;public boolean hasP…

自建Web網站部署——案例分析

作者主頁: 知孤云出岫 目錄 作者主頁:如何自建一個Web網站一、引言二、需求分析三、技術選型四、開發步驟1. 項目初始化初始化前端初始化后端 2. 前端開發目錄結構示例代碼App.jsHome.js 3. 后端開發目錄結構示例代碼app.jsproductRoutes.jsProduct.js 4. 前后端連接安裝axio…

泛微e-cology WorkflowServiceXml SQL注入漏洞(POC)

漏洞描述&#xff1a; 泛微 e-cology 是泛微公司開發的協同管理應用平臺。泛微 e-cology v10.64.1的/services/接口默認對內網暴露&#xff0c;用于服務調用&#xff0c;未經身份認證的攻擊者可向 /services/WorkflowServiceXml 接口發送惡意的SOAP請求進行SQL注入&#xff0c;…