当前位置: 首页 > news >正文

搜狗网站录入/seo及网络推广招聘

搜狗网站录入,seo及网络推广招聘,wordpress加产品展示,十大免费cad网站入口软件1 类型转换构造函数 1.1 why? 基本类型之间的转换,编译器内置转换规则:int -> double 类类型之间的转换,编译器不知道转换规则,需要用户提供:Cat -> Dog // consconv_why.cpp 为什么需要自定义转换 #includ…

1  类型转换构造函数

1.1  why?

        基本类型之间的转换,编译器内置转换规则:int -> double

        类类型之间的转换,编译器不知道转换规则,需要用户提供:Cat -> Dog

// consconv_why.cpp 为什么需要自定义转换
#include <iostream>
using namespace std;class Cat {
public:Cat( const char* name ) : m_name(name) {//【string m_name(name);】}void talk( ) {cout << m_name << ": 喵喵~~~" << endl;}
private:string m_name;
};class Dog {
public:Dog( const char* name ) : m_name(name) {//【string m_name(name);】}void talk( ) {cout << m_name << ": 汪汪~~~" << endl;}
private:string m_name;
};
// 模拟类的设计者(类库、别人设计的类、自己设计的类)
// --------------------------------
// 模拟用户(使用类的人)
int main( void ) {Cat smallwhite("小白");smallwhite.talk( );Dog bigyellow = smallwhite; // Cat --> Dogreturn 0;
}

1.2  理论

        定义:1)单参构造                            (同于拷贝构造函数)   

                   2)参数类型与类类型不同      (异于拷贝构造函数)

        (单参构造就2种,参数类型同于类类型,就是拷贝构造,否则就是类型转换构造)

        class   目标类型 {

                   目标类型 ( const  源类型&  src ) { ... }  // 类型转换构造函数

                    };

        用于:

        1)利用一个已定义的对象,来定义另一个不同类型的对象

        2)实现从源类型到目标类型的隐式类型转换 

        通过explicit关键字,可以强制  这种通过类型转换构造函数实现的类型转换  必须通过静态转换显示地进行:

        class  目标类型 {

                explicit  目标类型 ( const  源类型&  src ) { ... };

        };

// consconv.cpp
// 类型转换构造函数 -- 指定 源类型 到 目标类型 的 转换规则
#include <iostream>
using namespace std;class Cat {
public:explicit Cat( const char* name ) : m_name(name) { // 类型转换构造函数//【string m_name(name);】cout << "Cat类的类型转换构造函数被调用" << endl;}void talk( ) {cout << m_name << ": 喵喵~~~" << endl;}
private:string m_name;friend class Dog; // 友元声明
};class Dog {
public:Dog( const char* name ) : m_name(name) { // 类型转换构造函数//【string m_name(name);】}explicit Dog( const Cat& c ) : m_name(c.m_name) { // 类型转换构造函数(Cat-->Dog的转换规则)//【string m_name=c.m_name;】cout << "Dog类的类型转换构造函数被调用" << endl;}void talk( ) {cout << m_name << ": 汪汪~~~" << endl;}
private:string m_name;
};
// 模拟类的设计者(类库、别人设计的类、自己设计的类)
// --------------------------------
// 模拟用户(使用类的人)
int main( void ) {
//  Cat smallwhite("小白"); // 定义smallwhite,利用smallwhite.Cat("小白")->类型转换构造函数//  Cat smallwhite = "小白"; // 定义 匿名Cat类对象,利用 匿名Cat类对象.Cat("小白")->隐式转换// Cat smallwhite=匿名Cat类对象-->克隆Cat smallwhite = static_cast<Cat>("小白"); // 定义 匿名Cat类对象,利用 匿名Cat类对象.Cat("小白")->静态转换// Cat smallwhite=匿名Cat类对象-->克隆smallwhite.talk( );//    Dog bigyellow(smallwhite); // 定义bigyellow,利用bigyellow.Dog(smallwhite)->类型转换构造函数//    Dog bigyellow = smallwhite; // 定义 匿名Dog类对象,利用 匿名Dog类对象.Dog(smallwhite)->隐式类型转换// Dog bigyellow = 匿名Dog类对象-->克隆Dog bigyellow = static_cast<Dog>(smallwhite); // 定义 匿名Dog类对象,利用 匿名Dog类对象.Dog(smallwhite)->静态类型转换// Dog bigyellow = 匿名Dog类对象-->克隆bigyellow.talk( );return 0;
}

2  析构函数

2.1  理论

        析构函数的函数名就是在类名前面加“~”,没有返回类型没有参数,不能重载。

        在销毁对象之前一刻自动被调用,且仅被调用一次 :

                - 对象离开作用域   (栈对象离开main函数)

                - delete操作符        (堆对象被释放)

        作用:销毁  对象的各个成员变量 

        如果一个类没有定义析构函数,那么编译器会为其提供一个默认的析构函数:

                - 对基本类型的成员变量,什么也不做。

                - 对类类型的成员变量,调用相应类型的析构函数。

                - 销毁 对象的各个成员变量 

2.2  析构过程

        

        对象的销毁过程:

        1)调用析构函数(陷)

                - 执行自己在析构函数中书写的代码 

                - 利用类成员变量调用相应的析构函数 

                - 释放对象的各成员变量所占内存空间 

        2)释放整个对象所占用的内存空间 (皮)

// 析构函数
#include <iostream>
using namespace std;class Human {
public:
//  如果类没有提供任何构造函数,编译器将提供一个无参的构造函数
/*  Human() {【int m_age;】定义m_age,初值为随机数【string m_name;】定义m_name,利用m_name.string()}*/Human( int age=0, const char* name="无名" ) : m_age(age),m_name(name) {//【int m_age=age;】定义m_age,初值为age//【string m_name(name);】定义m_name,利用m_name.string(name)cout << "Human类缺省构造函数被调用" << endl;}
//  如果类没有提供拷贝构造函数,编译器将提供一个默认的拷贝构造函数
/*  Human( const Human& that ) { 【int m_age=that.m_age;】定义m_age,初值为that.m_age【string m_name(that.m_name);】定义m_name,利用m_name.string(that.m_name)-->string类拷贝构造函数}*/Human( const Human& that ) : m_age(that.m_age), m_name(that.m_name) { //【int m_age=that.m_age;】定义m_age,初值为that.m_age//【string m_name(that.m_name);】定义m_name,利用m_name.string(that.m_name)cout << "Human类拷贝构造函数被调用" << endl;}
//  如果类没有提供拷贝赋值函数,编译器将提供一个默认的拷贝赋值函数
/*  Human& operator=( const Human& that ) {this->m_age = that.m_age;this->m_name = that.m_name; // this->m_name.operator=(that.m_name)-->string类的拷贝赋值函数return *this;}*/Human& operator=( const Human& that ) {// 编译器不会再拷贝赋值函数中塞任何操作cout << "Human类的拷贝赋值函数被调用" << endl;this->m_age = that.m_age;this->m_name = that.m_name; // this->m_name.operator=(that.m_name)-->string类的拷贝赋值函数return *this;}
//  如果类没有提供析构函数,编译器将提供一个默认的析构函数
/*  ~Human() {对于基本类型成员变量m_age,什么都不做对于类类型成员变量m_name,利用 m_name.~string()释放 m_age/m_name 本身所占内存空间}*/~Human() {cout << "Human类的析构函数被调用" << endl;// 对于基本类型成员变量m_age,什么都不做// 对于类类型成员变量m_name,利用 m_name.~string()// 释放 m_age/m_name 本身所占内存空间}void getinfo( ) {cout << "姓名: " << m_name << ", 年龄: " << m_age << endl;}
private:int m_age; // 基本类型的成员变量string m_name; // 类类型的成员变量
};// 模拟类的设计者(类库、别人设计的类、自己设计的类)
// --------------------------------
// 模拟用户(使用类的人)
int main( void ) {Human h; // 定义h,利用h.Human()-->h维护的内容为(无名,0)h.getinfo( );Human h2(22,"张飞"); // 定义h2,利用h2.Human(22,"张飞")-->h2维护的内容为(张飞,22)h2.getinfo();Human h3(h2); // = h2; // 定义h3,利用h3.Human(h2)-->触发拷贝构造函数h3.getinfo();Human h4; // 定义h4,利用h4.Human()-->h4维护的内容为(无名,0)cout << "h4被赋值前---";h4.getinfo();h4 = h3; // h4.operator=(h3)-->触发拷贝赋值函数cout << "h4被赋值后---";h4.getinfo();cout << "------------main will be over----------------" << endl;return 0;
} //(1) h.~Human() h2.~Human() h3.~Human() h4.~Human() (2)释放h/h2/h3/h4本身所占的内存空间//(1) 删馅                                           (2)删皮

2.3  has to

        通常情况下,若对象在其声明周期的最终时刻,并不持有任何动态分配的资源,可以不定义析构函数。

        若对象在其声明周期的最终时刻,持有动态资源,则必须定义析构函数,释放对象所持有的动态资源。

// hastodes必须自己写析构函数的情况 -- 对象临死时,持有动态资源
#include <iostream>
using namespace std;class A {
public:A(int i) : m_i(i), m_p(new int), m_f(open("./file", O_CREAT|O_RDWR,0644)) {//【int m_i=i;】定义m_i,初值为i//【int* m_p=new int;】定义m_p,初值为指向一块堆内存(动态资源)//【int m_f=open(...);】定义m_f,初值为文件描述符-->文件表等内核结构(动态资源)}~A() {delete m_p;close( m_f ); // 动态资源需要自己写代码释放// 释放m_i / m_p / m_f 本身所占内存空间}/* 默认析构函数~A() {释放m_i / m_p / m_f 本身所占内存空间}*/
private:int m_i;int* m_p;int m_f;
};
// 模拟类的设计者(类库、别人设计的类、自己设计的类)
// --------------------------------
// 模拟用户(使用类的人)
int main( void ) {A a; // 定义a,利用a.A()return 0;
} // a.~A()  释放a本身所占内存空间

        析构函数的功能并不局限在释放资源上,它还可以执行  我们希望在  对象被释放之前  执行的任何操作。 

3  深拷贝

3.1  浅拷贝缺陷

        如果类不提供拷贝构造,编译器将提供默认的拷贝构造。

        无论是  拷贝构造  还是  拷贝赋值,其默认实现,对任何类型的指针成员都是简单地复制地址,而并不复制地址指向的数据,这种情况称为浅拷贝。(左图)

        为了获得完整意义上的对象副本,必须自己定义  拷贝构造  和  拷贝赋值,针对指针型成员变量做深拷贝。(右图)

           

// copybytes_pre.cpp 类中有指针成员,默认拷贝构造 会有浅拷贝缺陷
#include <iostream>
#include <cstring>
using namespace std;
// 模拟C++标准的string类 实现自己的String类
class String {
public:String( const char* psz="" ) : m_psz(new char[strlen(psz)+1]) {//【char* m_psz=new char[strlen(psz)+1];】// 动态资源strcpy( m_psz, psz );}~String( /* String* this */ ) {delete[] this->m_psz;// 释放 m_psz 本身所占内存空间}char* c_str() { return m_psz; }
//  默认的拷贝构造
/*  String( const String& that ) {【char* m_psz = that.m_psz;】只复制了地址,没有复制地址指向的数据-->浅拷贝}*/ 
private:char* m_psz;
};
// 模拟类的设计者(类库、别人设计的类、自己设计的类)
// --------------------------------
// 模拟用户(使用类的人)
int main( void ) {String s1("hello");cout << "s1:" << s1.c_str() << ", s1中的m_psz指向的堆内存的地址: " << (void*)s1.c_str() << endl;String s2(s1); // = s1; 定义s2,利用s2.String(s1)-->拷贝构造函数cout << "s2:" << s2.c_str() << ", s2中的m_psz指向的堆内存的地址: " << (void*)s2.c_str() << endl;return 0;
} // s1.~String()  s2.~String() 

        相对于拷贝构造,拷贝赋值需要做更多的工作:

                - 避免自赋值

                - 分配新资源

                - 拷贝新内容

                - 释放旧资源

                - 返回自引用

// copybytes.cpp 类中有指针成员,默认拷贝构造 会有浅拷贝缺陷
#include <iostream>
#include <cstring>
using namespace std;
// 模拟C++标准的string类 实现自己的String类
class String {
public:String( const char* psz="" ) : m_psz(new char[strlen(psz)+1]) {//【char* m_psz=new char[strlen(psz)+1];】// 动态资源strcpy( m_psz, psz );}~String( /* String* this */ ) {delete[] this->m_psz;// 释放 m_psz 本身所占内存空间}char* c_str() { return m_psz; }
//  默认的拷贝构造
/*  String( const String& that ) {【char* m_psz = that.m_psz;】只复制了地址,没有复制地址指向的数据-->浅拷贝}*/// 深拷贝构造函数String( const String& that ) : m_psz(new char[strlen(that.m_psz)+1]) {//【char* m_psz = new char[strlen(that.m_psz)+1];】strcpy( m_psz, that.m_psz ); // 不复制地址,复制地址指向的数据-->深拷贝}/* 默认拷贝赋值函数String& operator=( const String& that ) {this->m_psz = that.m_psz; // 只复制了地址,没有复制地址指向的数据-->浅拷贝return *this;}*/// 深拷贝赋值函数String& operator=( const String& that ) {if( this != &that ) { // 防止自赋值delete[] this->m_psz; // 释放旧资源this->m_psz = new char[strlen(that.m_psz)+1]; // 分配新资源strcpy( this->m_psz, that.m_psz ); // 拷贝新内容}return *this; // 返回自引用}
private:char* m_psz;
};
// 模拟类的设计者(类库、别人设计的类、自己设计的类)
// --------------------------------
// 模拟用户(使用类的人)
int main( void ) {String s1("hello");cout << "s1:" << s1.c_str() << ", s1中的m_psz指向的堆内存的地址: " << (void*)s1.c_str() << endl;String s2(s1); // = s1; 定义s2,利用s2.String(s1)-->拷贝构造函数cout << "s2:" << s2.c_str() << ", s2中的m_psz指向的堆内存的地址: " << (void*)s2.c_str() << endl;String s3; // 定义s3,利用s3.String()-->s3维护一个字节堆内存('\0')s3 = s2; // s3.operator=(s2)cout << "s3:" << s3.c_str() << ", s3中的m_psz指向的堆内存的地址: " << (void*)s3.c_str() << endl;return 0;
} // s1.~String()  s2.~String() 

3.2  建议

        1)只有类中有指针型成员变量,才会涉及深浅拷贝的问题,因此应尽量避免使用指针型成员变量。

        2)如果确实无法实现完整意义上的  深拷贝拷贝构造  和  深拷贝拷贝赋值,可将它们私有化,禁止用户使用。

4  静态成员

4.1  静态成员变量

        静态成员变量  不属于对象  而  属于类

                - 静态成员变量不包含在对象中,进程级生命期

                - 静态成员变量的定义和初始化,只能在类的外部(即全局域)而不能在构造函数中进行。

                - 静态成员变量依然受  类作用域  和  访问控制限定符  的约束。

                - 访问静态成员变量,既可以通过  类  也可以通过  对象。

                - 静态成员变量为该类的所有对象实例所共享

// static.cpp 类的静态成员变量
#include <iostream>
using namespace std;// 普通成员变量:属于对象,对象的生命期      静态成员变量:不属于对象,进程级生命期
class A {
public:A() {//【int m_i;】}int m_i; // 声明static int m_si; // 声明
};
int A::m_si = 0; // 全局域中定义-->进程级生命期
// 模拟类的设计者(类库、别人设计的类、自己设计的类)
// --------------------------------
// 模拟用户(使用类的人)
int main( void ) {A a, b; // 静态成员变量没有保存在对象内部-->不属于对象cout << "a对象的大小:" << sizeof(a) << endl; // 4cout << "b对象的大小:" << sizeof(b) << endl; // 4A::m_si = 888; // 静态成员受到类作用域的约束 也受到访问控制限定符的约束-->属于类a.m_si = 999; // A::m_si=999;cout << "b.m_si=" << b.m_si << endl; // A::m_si// 类的静态成员变量,被该类的所有对象共享return 0;
}

4.2  静态成员函数

        静态成员函数  不属于对象(普通成员函数也不属于对象,更准确地说,不用非要对象来调)  而  属于类

                - 静态成员函数没有this指针,也没有常属性  

                - 静态成员函数依然受  类作用域  和  访问控制限定符的约束

                - 访问静态成员函数,既可以通过  类  也可以通过  对象。(普通成员函数,只对象)

                -静态成员函数只能访问静态成员,而非静态成员函数可以访问所有成员。

// static.cpp 类的 静态成员变量 和 静态成员函数
#include <iostream>
using namespace std;// 普通成员函数:必须利用对象来调用      静态成员函数:不是必须利用对象来调用
class A {
public:int m_i; // 普通成员变量void foo( /* const A* this */ ) const { // 普通成员函数cout << "foo is invoked" << endl;cout << m_i << endl; // okcout << m_si << endl;// okbar();               // ok
//      以上三行代码证明 非静态成员函数 即可访问非静态成员 也可访问 静态成员(不挑食)}static int m_si; //静态成员变量static void bar( /*无this指针*/ ) /*const*/ { // 静态成员函数cout << "bar is invoked" << endl;cout << m_si << endl; // ok
//      cout << m_i << endl;  // error
//      foo();                // error
//      以上三行代码证明 静态成员函数 只能访问 静态成员,不能访问非静态的普通成员(挑食)}
};
int A::m_si = 0; // 全局域中定义-->进程级生命期
// 模拟类的设计者(类库、别人设计的类、自己设计的类)
// --------------------------------
// 模拟用户(使用类的人)
int main( void ) {A a, b;a.foo(); // foo(&a);b.foo(); // foo(&b);A::bar(); // 受到类作用域的约束 也受到访问控制限定符的约束-->属于类a.bar(); // A::bar();b.bar(); // A::bar();return 0;
}

4.3  总结

                                                

        事实上,类的静态成员变量和静态成员函数,更像是普通的全局变量和全局函数,

        只是多了一层类作用域和访问控制限定符的约束,

        相当于  具有成员访问属性的全局变量和全局函数。

5  类  扩充

        空类对象的大小是1个字节。

        类中不能包含  本类对象  作为  普通成员变量;

        类中可以包含  本类对象  作为  静态成员变量。

// class_add
#include <iostream>
using namespace std;
/*
class A { // 空类
};
int main( void ) {A a; // 空类对象占1个字节内存(1个字节的垃圾数据)A& ra = a;cout << "空类对象a的大小: " << sizeof(a) << endl;return 0;
}
*/class A {
public:int m_i;
//  A m_a; // errorstatic A m_sa; // ok
};
int main( void ) {A a; // 定义a(给a分配内存空间)cout << "对象a的大小: " << sizeof(a) << endl;return 0;
}

6  单例模式

        要求:设计一个类,要求用户在使用这个类时仅有一个实例(只能出现一个对象):

        class  Singleton {

                // 设计这个类

        };

        int  main(void) {

                // 用户这里只能出现一个Singleton类对象,不能出现第二个

                return  0;

        }

        

        实现方法:

        1)将  包括类的拷贝构造函数在内的所有构造函数 私有化,防止user在类的外部创建对象。

        2)唯一的对象由类的设计者来创建

        3)提供公有静态成员函数getInstance()使用户可以获取到唯一对象。

        单例分类:

        1)饿汉式:无论用不用,程序启动即创建  hungry.cpp (不推荐)

        2)懒汉式:用的时候创建,不用了即销毁  lazy.cpp  (推荐)

// hungry_singleton.cpp
// 单例模式--要求设计一个类型,用户在使用这个类时只能出现一个对象
#include <iostream>
using namespace std;
// 恶汉式单例
class Singleton {
public://4        //5static Singleton& getInstance( ) {return s_instance;}
private:Singleton( ) {} // 1Singleton( const Singleton& that ) {} // 6static Singleton s_instance; // 2 唯一对象
};Singleton Singleton::s_instance; // 3// 以上代码模拟类的设计者
// -----------------------
// 以下代码模拟类的使用者
int main( void ) {Singleton& s1 = Singleton::getInstance( );Singleton& s2 = Singleton::getInstance( );Singleton& s3 = Singleton::getInstance( );cout << "&s1: " << &s1 << ", &s2: " << &s2 << ", &s3: " << &s3 << endl;return 0;
}

// lazy_singleton.cpp
// 单例模式:设计一个类,保证用户在使用这个类时,只能出现一个对象
#include <iostream>
using namespace std;
// 懒汉式单例:单例高级实现手法
class Singleton {
public:static Singleton& getInstance( ) {if( s_instance==NULL ) {s_instance = new Singleton; // 唯一的对象cout << "创建了唯一的对象" << endl;}++s_counter;return *s_instance;}void releaseInstance( ) {if( --s_counter == 0 ) {delete s_instance;s_instance = NULL;cout << "销毁了唯一的对象" << endl;}}
private:Singleton() {} Singleton( const Singleton& that ) {} static Singleton* s_instance; // 并不是唯一对象,仅仅是一个指针而已static int s_counter; // 计数功能
};Singleton* Singleton::s_instance = NULL; // 程序刚刚时,唯一的对象不存在 
int Singleton::s_counter = 0;// 以上的代码模拟类的设计者(例如:类库、被人设计的类、自己的设计的类)
// -------------------------------------
// 以下的代码模拟用户(使用类的人)
int main( void ) {Singleton& s1 = Singleton::getInstance(); // 第一次调用getInstance函数时,创建唯一的对象Singleton& s2 = Singleton::getInstance(); // 以后再调用getInstance函数时,返回第一次调用时创建的对象Singleton& s3 = Singleton::getInstance(); // ...cout << "&s1: " << &s1 << ", &s2: " << &s2 << ", &s3: " << &s3 << endl;s1.releaseInstance( ); //s2.releaseInstance( ); // s3.releaseInstance( ); // 最后一次调用releaseInstance才将对象销毁return 0;
}

相关文章:

cpp_07_类型转换构造_析构函数_深拷贝_静态成员

1 类型转换构造函数 1.1 why? 基本类型之间的转换&#xff0c;编译器内置转换规则&#xff1a;int -> double 类类型之间的转换&#xff0c;编译器不知道转换规则&#xff0c;需要用户提供&#xff1a;Cat -> Dog // consconv_why.cpp 为什么需要自定义转换 #includ…...

Java 已死、前端已凉?

文章目录 Java 的现状前端技术的现状分析结论 关于“Java 已死、前端已凉”的言论&#xff0c;这种说法更多地反映了行业对技术趋势的一种情绪化反应&#xff0c;而不一定是基于事实的判断。下面我来具体分析这个话题。 Java 的现状 Java 的普及与稳定性&#xff1a;Java 作为一…...

Calico IP_AUTODETECTION_METHOD

在 Calico 中&#xff0c;IP_AUTODETECTION_METHOD 的配置项用于指定 Calico 如何检测容器的 IP 地址。 一、kubernetes-internal-ip模式 其中&#xff0c;kubernetes-internal-ip 是一种特殊的模式&#xff0c;用于在 Kubernetes 环境中检测容器的 IP 地址。具体作用如下&…...

百分点科技成为中国“数据要素×”生态合作伙伴

12月24日&#xff0c;由中国经济体制改革研究会、中国电子、郑州市人民政府、中国经济改革研究基金会联合主办的中国“数据要素”生态大会在郑州召开&#xff0c;百分点科技受邀出席&#xff0c;并获颁中国“数据要素x”2024年度生态伙伴合作证书。 大会邀请了国家数据局党组成…...

智能优化算法应用:基于孔雀算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于孔雀算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于孔雀算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.孔雀算法4.实验参数设定5.算法结果6.参考文献7.MA…...

Redis自动部署脚本编写

#!/bin/bash ck_ok() { if [ $? -ne 0 ] then echo "$1 error." exit 1 fi } download_redis() { cd /usr/local/src if [ -f redis-7.0.4.tar.gz ] then echo "当前目录已经存在redis-7.0.4.tar.gz&q…...

Tinker 环境下数据表的用法

如果我们要自己手动创建一个模型文件&#xff0c;最简单的方式是通过 make:model 来创建。 php artisan make:model Article 删除模型文件 rm app/Models/Article.php 创建模型的同时顺便创建数据库迁移 php artisan make:model Article -m Eloquent 表命名约定 在该文件中&am…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Row组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之线性布局容器Row组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Row组件 沿水平方向布局容器。 子组件 可以包含子组件。 接口 Row(…...

JAVA——JDBC学习

视频连接&#xff1a;https://www.bilibili.com/video/BV1sK411B71e/?spm_id_from333.337.search-card.all.click&vd_source619f8ed6df662d99db4b3673d1d3ddcb 《视频讲解很详细&#xff01;&#xff01;推荐》 JDBC&#xff08;Java DataBase Connectivity Java数据库连…...

Flask 用户信息编辑系统

Flask 用户信息编辑系统 web/templates/user/edit.html {% extends "common/layout_main.html" %} {% block content %} {% include "common/tab_user.html" %} <div class"row m-t user_edit_wrap"><div class"col-lg-12"…...

Spring DefaultListableBeanFactory源码分析

目录 一、概述 二、主要功能 三、核心功能解析 Bean定义的存储结构 ConcurrentHashMap的使用和意义 四、总结 一、概述 DefaultListableBeanFactory 是 Spring 框架中的一个核心类&#xff0c;它继承自AbstractAutowireCapableBeanFactory类&#xff0c;实现了 ListableBeanF…...

关于MySQL、分布式系统、SpringCloud面试题

前言 之前为了准备面试&#xff0c;收集整理了一些面试题。 本篇文章更新时间2023年12月27日。 最新的内容可以看我的原文&#xff1a;https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv MySQL 索引 说一下有哪些锁&#xff1f; 行锁有哪些&#xff1f; 性能优化 分库分表…...

2023年中职“网络安全”——B-5:网络安全事件响应(Server2216)

B-5&#xff1a;网络安全事件响应 任务环境说明&#xff1a; 服务器场景&#xff1a;Server2216&#xff08;开放链接&#xff09; 用户名:root密码&#xff1a;123456 1、黑客通过网络攻入本地服务器&#xff0c;通过特殊手段在系统中建立了多个异常进程&#xff0c;找出启…...

【论文解读】Learning based fast H.264 to H.265 transcoding

时间&#xff1a; 2015 年 级别&#xff1a; APSIPA 机构&#xff1a; 上海电力大学 摘要 新提出的视频编码标准HEVC (High Efficiency video coding)以其比H.264/AVC更好的编码效率&#xff0c;被工业界和学术界广泛接受和采用。在HEVC实现了约40%的编码效率提升的同时&…...

[vue]Echart使用手册

[vue]Echart使用手册 使用环境Echart的使用Echart所有组件和图表类型Echart 使用方法 使用环境 之前是在JQuery阶段使用Echart&#xff0c;直接引入Echart的js文件即可&#xff0c;现在是在vue中使用,不仅仅时echarts包&#xff0c;还需要安装vue-echarts&#xff1a; "…...

视频人脸识别马赛克处理

文章目录 前言一、实现思路&#xff1f;二、Coding三、实现效果 前言 前面几篇文章我们尝试了使用opencv完成图像人脸识别以及识别后贴图或者打马赛克的方法。 偶尔我们也会有需求在视频中将人脸马赛克化&#xff0c;opencv也提供了相应的方法来实现这个功能。 一、实现思路&a…...

2023-12-27 Python PC获取鼠标位置,移动鼠标到相应的位置 定时自动模拟鼠标点击,用于简单测试app用

一、核心源码如下&#xff1a; import pyautogui import timepyautogui.moveTo(600, 800) for i in range(20):time.sleep(0.1)x, y pyautogui.position()print("mouse position:", x, y)pyautogui.click()二、定时自动模拟鼠标点击&#xff0c;模拟键盘按键 impo…...

如何解决服务器CA证书过期的问题

一、问题的提出 最近在学习VPS&#xff0c;在Linux系统里给服务器安装某项服务时&#xff0c;在服务的log里看到下面的错误信息&#xff1a; failed to verify certificate: x509: certificate has expired or is not yet valid: current time 2023-12-25T04:42:38-05:00 is a…...

计算机基础面试题总结

47、OSI、TCP/IP、五层协议的体系结构以及各层协议 OSI分层&#xff08;7层&#xff09;&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层&#xff08;4层&#xff09;&#xff1a;网络接口层、网际层、运输层、应用层。 五层协议&…...

【算法练习】leetcode链表算法题合集

链表总结 增加表头元素倒数节点&#xff0c;使用快慢指针环形链表&#xff08;快慢指针&#xff09;合并有序链表&#xff0c;归并排序LRU缓存 算法题 删除链表元素 删除链表中的节点 LeetCode237. 删除链表中的节点 复制后一个节点的值&#xff0c;删除后面的节点&#x…...

2023.12.28每日一题

LeetCode每日一题 2735.收集巧克力 2735. 收集巧克力 - 力扣&#xff08;LeetCode&#xff09; 介绍 看题目看不懂&#xff0c;在评论区看到一个大哥解释&#xff0c;瞬间明白了。 一张桌子上有n件商品围成一圈&#xff0c;每件都有一个价签&#xff0c;它们构成数组nums。…...

231227-9步在RHEL8.8配置本地yum源仓库

Seciton 1&#xff1a;参考视频 RHEL8配置本地yum源仓库-安徽迪浮_哔哩哔哩_bilibili Seciton 2&#xff1a;具体操作 &#x1f3af; 第1步&#xff1a;查看光驱文件/dev/sr0是否已经挂载&#xff1f;此处已挂在 [lgklocalhost ~]$ df -h &#x1f3af; 第1步&#xff1a;查看…...

5. 创建型模式 - 单例模式

亦称&#xff1a; 单件模式、Singleton 意图 单例模式是一种创建型设计模式&#xff0c; 让你能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。 问题 单例模式同时解决了两个问题&#xff0c; 所以违反了单一职责原则&#xff1a; 保证一个类只有一…...

机器学习之人工神经网络(Artificial Neural Networks,ANN)

人工神经网络(Artificial Neural Networks,ANN)是机器学习中的一种模型,灵感来源于人脑的神经网络结构。它由神经元(或称为节点)构成的层级结构组成,每个神经元接收输入并生成输出,这些输入和输出通过权重进行连接。 人工神经网络(ANN)是一种模仿生物神经系统构建的…...

GetLastError()详细介绍

GetLastError() 是 Windows 操作系统提供的一个函数&#xff0c;用于获取调用线程最近一次发生的错误码。这个函数的定义如下&#xff1a; DWORD GetLastError(void); 调用 GetLastError() 函数可以帮助开发人员在发生错误时获取错误的详细信息&#xff0c;从而进行适当的错…...

【unity3D-粒子系统】粒子系统主模块-Particle System篇

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的粒子系统主模块-Particle System 基础知识 Particle System 介绍&#xff1a;粒子系统的主模块&#xff0c;是必需的模块&#x…...

Windows搭建FTP服务器教学以及计算机端口介绍

目录 一. FTP服务器介绍 FTP服务器是什么意思&#xff1f; 二.Windows Service 2012 搭建FTP服务器 1.开启防火墙 2.创建组 ​编辑3.创建用户 4.用户绑定组 5.安装ftp服务器 ​编辑6.配置ftp服务器 7.配置ftp文件夹的权限 8.连接测试 三.计算机端口介绍 什么是网络…...

安防视频监控系统EasyCVR实现H.265视频在3秒内起播的注意事项

可视化云监控平台/安防视频监控系统EasyCVR视频综合管理平台&#xff0c;采用了开放式的网络结构&#xff0c;可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;同时…...

CNN实现对手写字体的迭代

导入库 import torchvision import torch from torchvision.transforms import ToTensor from torch import nn import matplotlib.pyplot as plt 导入手写字体数据 train_dstorchvision.datasets.MNIST(data/,trainTrue,transformToTensor(),downloadTrue) test_dstorchvis…...

docker学习笔记01-安装docker

1.Docker的概述 用Go语言实现的开源应用项目&#xff08;container&#xff09;&#xff1b;克服操作系统的笨重&#xff1b;快速部署&#xff1b;只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统&#xff1b;Docker通过隔离机制&#xff0c;每个容器间是互相隔离…...