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

与有权重网站做友链/热搜排行榜今日排名

与有权重网站做友链,热搜排行榜今日排名,有做兼职赚钱的网站吗,网站建设开发制作一、类的默认成员函数 默认成员函数从名字就告诉我们何为默认成员函数,即:用户没有实现,编译器默认自动实现的函数。 这时你不禁一喜,还有这好事,编译器给我打工,那么,我们今天都来了解一下都有…

一、类的默认成员函数

        默认成员函数从名字就告诉我们何为默认成员函数,即:用户没有实现,编译器默认自动实现的函数。

        这时你不禁一喜,还有这好事,编译器给我打工,那么,我们今天都来了解一下都有哪些牛马函数,但是提醒一下,有的函数在某些情况下需要手动实现!

        1.1 构造函数

                构造函数是啥?顾名思义把该函数成员变量构造出来?不不不!虽然他叫构造,但它和各位一样有一颗叛逆的心,它的实际作用是实例化对象,也就是初始化对象,各位记住:创建对象是栈帧开启时就创建好了。就好比我们之前写过的数据结构,构造函数的作用就是Init函数。

                函数特点:

                1. 函数名与类名相同。

                2. ⽆返回值。 (返回值啥都不需要给,也不需要写void,不要纠结,C++规定如此)

                3. 对象实例化时系统会⾃动调⽤对应的构造函数。

                4. 构造函数可以重载。

                5. 如果类中没有显式定义构造函数,则C++编译器会⾃动⽣成⼀个⽆参的默认构造函数,⼀旦⽤户显 式定义编译器将不再⽣成。

                6. ⽆参构造函数、全缺省构造函数、我们不写构造时编译器默认⽣成的构造函数,都叫做默认构造函 数。但是这三个函数有且只有⼀个存在,不能同时存在。⽆参构造函数和全缺省构造函数虽然构成 函数重载,但是调⽤时会存在歧义。要注意很多人会认为默认构造函数是编译器默认⽣成那个叫 默认构造,实际上⽆参构造函数、全缺省构造函数也是默认构造,总结⼀下就是不传实参就可以调 ⽤的构造就叫默认构造。

                一下便是咱们手动实现的构造函数:

class Data
{
public:Data()								//无参构造{_year = 1;_month = 1;_day = 1;}Data(int year, int month, int day)	//带参构造{_year = year;_month = month;_day = day;}//Data(int year = 1, int month = 1, int day = 1) //全缺省构造//{//	_year = year;//	_month = month;//	_day = day;//}void Print(){cout << _year << "/" << _month << "/" << _day << endl;}
private:int _year;int _month;int _day;
};int main()
{Data d1;           // 调用默认构造Data d2(2024, 7, 1);d1.Print();d2.Print();return 0;
}

                 咱们注意一下:全缺省构造与无参构造不能同时出现,这样会引起编译器报错。为啥:因为都不用传参数,如果你是编译器,你会调哪个,掉这个,那个不满,调那个,这个又不满。所以,只能禁止这种行为了,不然会有以下报错:

                咱们现在想:我之前不是说过函数会自动调用吗?是的,演示代码如下:

class Data
{
private:int _year;int _month;int _day;
};int main()
{Data d;return 0;
}

                 咱们调式来看:

                我们可以看到生成是生成了,不过都是随机值,那有什么处理办法吗?还真有,如下:

class Data
{
private:int _year = 1;int _month = 1;int _day = 1;
};

                 这样处理即可,咱们调试来看。

                果然如咱们所愿。构造函数咱们先了解到这,我们随后再行探讨。

        1.2 析构函数 

                析构函数功能与构造函数功能相反,构造是初始化,析构就是完成对对象的资源整理工作。比如C语言中的malloc、calloc、realloc等资源释放工作。

                析构函数特点如下:

                1. 析构函数名是在类名前加上字符 ~。

                2. ⽆参数⽆返回值。 (这⾥跟构造类似,也不需要加void)

                3. ⼀个类只能有⼀个析构函数。若未显式定义,系统会⾃动⽣成默认的析构函数。

                4. 对象⽣命周期结束时,系统会⾃动调⽤析构函数。

                5. 跟构造函数类似,我们不写编译器⾃动⽣成的析构函数对内置类型成员不做处理,⾃定类型成员会 调⽤他的析构函数。

                6. 还需要注意的是我们显⽰写析构函数,对于⾃定义类型成员也会调⽤他的析构,也就是说⾃定义类 型成员⽆论什么情况都会⾃动调⽤析构函数。 

                7. 如果类中没有申请资源时,析构函数可以不写,直接使⽤编译器⽣成的默认析构函数,但是有资源申请时,⼀定要 ⾃⼰写析构,否则会造成资源泄漏。

                8. ⼀个局部域的多个对象,C++规定后定义的先析构。

                

class Stack
{
public:Stack(int n = 4){int* tmp = (int*)malloc(sizeof(int) * 4);if (tmp == nullptr){perror("malloc fail");return;}_a = tmp;_capacity = n;_size = 0;}~Stack(){cout << "~Stack()" << endl;free(_a);_a = nullptr;_capacity = 0;_size = 0;}
private:int* _a;int _capacity;int _size;
};

                 以上是一个简单的结构,我们可通过其析构打印来判断是否调用析构。大家可自行下去检验。

                对于其特点,大家可着重注意以下最后一点,析构是执照定义先后顺序来经行析构的。

class Test
{
public:Test(int vale){_vale = vale;}~Test(){cout << _vale << "~Test()" << endl;}
private:int _vale;
};int main()
{Test T1(1);Test T2(2);return 0;
}

                以上代码析构顺序是什么样呢?答案为:先二后一。

        1.3 拷⻉构造函数

                拷贝构造函数是啥?既然有构造二字莫非是构造函数的一个子集?是的,拷贝构造是一种特殊的构造函数。

          如果⼀个构造函数的第⼀个参数是⾃⾝类类型的引⽤,且任何额外的参数都有默认值,则此构造函数 也叫做拷⻉构造函数,也就是说拷⻉构造是⼀个特殊的构造函数。

                函数特点如下:

                1. 拷⻉构造函数是构造函数的⼀个重载。

                2. 拷⻉构造函数的参数只有⼀个且必须是类类型对象的引⽤,使⽤传值⽅式编译器直接报错,因为语 法逻辑上会引发⽆穷递归调⽤。

                3. C++规定⾃定义类型对象进⾏拷⻉⾏为必须调⽤拷⻉构造,所以这⾥⾃定义类型传值传参和传值返 回都会调⽤拷⻉构造完成。

                4. 若未显式定义拷⻉构造,编译器会⽣成⾃动⽣成拷⻉构造函数。⾃动⽣成的拷⻉构造对内置类型成 员变量会完成值拷⻉/浅拷⻉(⼀个字节⼀个字节的拷⻉),对⾃定义类型成员变量会调⽤他的拷⻉构 造。

               5.如果浅拷贝不符合我们的要求我们就要手动实现拷贝构造。⼩技巧:如果⼀个类显⽰实现了析构并释放资源,那么他就 需要显⽰写拷⻉构造,否则就不需要。

                6. 传值返回会产⽣⼀个临时对象调⽤拷⻉构造,传值引⽤返回,返回的是返回对象的别名(引⽤),没 有产⽣拷⻉。但是如果返回对象是⼀个当前函数局部域的局部对象,函数结束就销毁了,那么使⽤ 引⽤返回是有问题的,这时的引⽤相当于⼀个野引⽤,类似⼀个野指针⼀样。传引⽤返回可以减少 拷⻉,但是⼀定要确保返回对象,在当前函数结束后还在,才能⽤引⽤返回。 

                这里解释一下第六条: 

                

class Data
{
public:Data(int year, int month, int day){_year = year;_month = month;_day = day;}Data(const Data& d)				//这里我们不希望修改该值,为了避免出错放前置const即可{_year = d._year;_month = d._month;_day = d._day;}
private:int _year;int _month;int _day;
};int main()
{Data d1(2020, 1, 1);Data d2(d1);Data d4 = d1;		//该方式为拷贝构造//赋值为两个初始化好的两个对象//这里的d4还未初始化,故为拷贝构造return 0;
}

二、运算符重载

        2.1 取地址运算符重载

                取地址运算符重载就是对&这个符号就行重新实现,在日常当我们不想叫别人用我们的地址时,便可用其运算符重载。为了实现该目的,我们要用到该函数名:operator和该符号组成。

class Data
{
public:Data* operator&(){return this;//此处放回值由你来决定}
private:int _year;int _month;int _day;
};

        2.2 运算符重载

                从上述例子我们可以看出,C++允许我们对运算符进行重载,把它变为以operator开头和符号名开头的函数。以下爱上运算符重载的特点:

        重载运算符函数的参数个数和该运算符作⽤的运算对象数量⼀样多。⼀元运算符有⼀个参数,⼆元运算符有两个参数,⼆元运算符的左侧运算对象传给第⼀个参数,右侧运算对象传给第⼆个参数。

         如果⼀个重载运算符函数是成员函数,则它的第⼀个运算对象默认传给隐式的this指针,因此运算 符重载作为成员函数时,参数⽐运算对象少⼀个。

        运算符重载以后,其优先级和结合性与对应的内置类型运算符保持⼀致。

        不能通过连接语法中没有的符号来创建新的操作符:⽐如operator@

        .*         ::         sizeof         ?:         . 注意以上5个运算符不能重载。

        重载操作符⾄少有⼀个类类型参数,不能通过运算符重载改变内置类型对象的含义。

        个类需要重载哪些运算符,是看哪些运算符重载后有意义。

        重载++运算符时,有前置++和后置++,运算符重载函数名都是operator++,⽆法很好的区分。 C++规定,后置++重载时,增加⼀个int形参,跟前置++构成函数重载,⽅便区分。

        重载>>和<<时,需要重载为全局函数,因为重载为成员函数,this指针默认抢占了第⼀ 个形参位 置,第⼀个形参位置是左侧运算对象,调⽤时就变成了对象<<cout,不符合使⽤习惯和可读性。 

class Data
{
public:void func(){cout << _year << "/" << _month << "/" << _day << endl;}bool operator==(Data& d){return _year == d._year&& _month == d._month&& _day == d._day;}Data& operator++()			//前置++{_day++;return *this;}Data& operator++(int)		//后置++  里面int可理解为区分符,不用过多关注{Data tmp(*this);_day++;return tmp;}friend ostream& operator<<(ostream& out, const Data& d);friend istream& operator>>( istream& in, Data& d);			// 此处为友元函数,后续会进行讲解
private:int _year;int _month;int _day;
};//<< 与 >> 运算符重载
ostream& operator<<(ostream& out, const Data& d)				//此处+const保证输出不进行改变
{out << d._year << d._month << d._day << endl;return out;
}
istream& operator>>( istream& in, Data& d)
{in >> d._year >> d._month >> d._day;return in;
}

三、在探构造函数

        经过以上的学习,相信大家对于类和对象已经有了一定的掌握,接下来,来了解一下更深层次的构造函数。

        之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种⽅式,就是初始化列表,初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成 员列表,每个"成员变量"后⾯跟⼀个放在括号中的初始值或表达式。

        每个成员变量在初始化列表中只能出现⼀次,语法理解上初始化列表可以认为是每个成员变量定义 初始化的地⽅。

        引⽤成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进⾏初始化,否则会编译报错。

        C++11⽀持在成员变量声明的位置给缺省值,这个缺省值主要是给没有显⽰在初始化列表初始化的 成员使⽤的。

         尽量使⽤初始化列表初始化,因为那些你不在初始化列表初始化的成员也会⾛初始化列表,如果这 个成员在声明位置给了缺省值,初始化列表会⽤这个缺省值初始化。如果你没有给缺省值,对于没 有显⽰在初始化列表初始化的内置类型成员是否初始化取决于编译器,C++并没有规定。对于没有 显⽰在初始化列表初始化的⾃定义类型成员会调⽤这个成员类型的默认构造函数,如果没有默认构 造会编译错误。

         初始化列表中按照成员变量在类中声明顺序进⾏初始化,跟成员在初始化列表出现的的先后顺序⽆关。建议声明顺序和初始化列表顺序保持⼀致。

class Data
{
public:Data():_year(1),_month(1),_day(1){cout << _year << _month << _day;}
private:int _year;int _month;int _day;
};

        明白了这些,来出一道题来考一考大家:

        下⾯程序的运⾏结果是什么()

        A. 输出 1 1         B. 输出 2 2         C. 编译报错        D. 输出 1 随机值         E. 输出 1 2         F. 输出 2 1

#include<iostream>
using namespace std;
class A
{
public:A(int a):_a1(a), _a2(_a1){}void Print() {cout << _a1 << " " << _a2 << endl;}
private:int _a2 = 2;int _a1 = 2;
};
int main()
{A aa(1);aa.Print();
}

           答案为:D。为何?上面我们说过:初始化我们会按照声明的顺序进行初始化声明_a2靠前,所以,先对_a2进行初始化,但此时,_a1还未完成初始化,所以为随机值。_a1大家应该能明白,便不在赘述。

四、static成员

        static成员注意以下几点即可:

        ⽤static修饰的成员变量,称之为静态成员变量,静态成员变量⼀定要在类外进⾏初始化。

        静态成员变量为所有类对象所共享,不属于某个具体的对象,不存在对象中,存放在静态区。

        ⽤static修饰的成员函数,称之为静态成员函数,静态成员函数没有this指针。

        静态成员函数中可以访问其他的静态成员,但是不能访问⾮静态的,因为没有this指针。

        ⾮静态的成员函数,可以访问任意的静态成员变量和静态成员函数。

         突破类域就可以访问静态成员,可以通过类名::静态成员 或者 对象.静态成员 来访问静态成员变量 和静态成员函数。静态成员也是类的成员,受public、protected、private 访问限定符的限制。

        静态成员变量不能在声明位置给缺省值初始化,因为缺省值是个构造函数初始化列表的,静态成员 变量不属于某个对象,不⾛构造函数初始化列表。

class A
{
public:A(){++_scount;}A(const A& t){++_scount;}~A(){--_scount;}static int GetACount(){return _scount;}
private:// 类⾥⾯声明static int _scount;
};
// 类外⾯初始化
int A::_scount = 0;
int main()
{cout << A::GetACount() << endl;A a1, a2;A a3(a1);cout << A::GetACount() << endl;cout << a1.GetACount() << endl;return 0;
}

         大家可自行验证一下输出结果,这里说明一下_scount为静态的不在类中存储。

五、友元

        友元分为:友元类和友元函数。友元友元顾名思义就可以想成朋友,我是你的朋友,所以,我可以访问你里面的对象,对吧?其访问方式简单,即:在类和函数前面+friend即可访问。有以下注意点:

        外部友元函数可访问类的私有和保护成员,友元函数仅仅是⼀种声明,他不是类的成员函数。

        友元函数可以在类定义的任何地⽅声明,不受类访问限定符限制。

        ⼀个函数可以是多个类的友元函数。

        友元类中的成员函数都可以是另⼀个类的友元函数,都可以访问另⼀个类中的私有和保护成员。

         友元类的关系是单向的,不具有交换性,⽐如A类是B类的友元,但是B类不是A类的友元。

        友元类关系不能传递,如果A是B的友元, B是C的友元,但是A不是B的友元。

        有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多⽤。

class B;						//此处为类的声明
class A
{friend void func(A a, B b);
private:int _a;
};
class B
{friend void func(A a, B b);
private:int _b;
};
void func(A a, B b)
{cout << a._a << endl;cout << b._b << endl;
}

 

完!

相关文章:

类和对象【下】

一、类的默认成员函数 默认成员函数从名字就告诉我们何为默认成员函数&#xff0c;即&#xff1a;用户没有实现&#xff0c;编译器默认自动实现的函数。 这时你不禁一喜&#xff0c;还有这好事&#xff0c;编译器给我打工&#xff0c;那么&#xff0c;我们今天都来了解一下都有…...

面向未来的S2B2C电商供应链系统发展趋势与创新探索

S2B2C电商供应链系统的发展趋势及创新方向。首先分析当前市场环境和消费者需求的变化&#xff0c;如个性化消费、即时配送、绿色环保等趋势对供应链系统的影响。随后&#xff0c;预测并讨论未来供应链系统可能的技术革新&#xff0c;如物联网&#xff08;IoT&#xff09;在物流…...

【C++】哈希容器

unordered系列关联式容器 在之前的博文中介绍过关联式容器中的map与set&#xff0c;同map与set一样&#xff0c;unordered_set与unordered_set也是关联式容器。 在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;查询效率可以达到logN&#xff1b;在…...

milvus - VectorDBBench benchmaker 性能测试工具使用经验

IVF_FLAT (Inverted File with Flat Indexing) 优点: 在数据量适中且维度不是非常高的情况下&#xff0c;IVF_FLAT能提供精确的最近邻搜索结果。 相对简单&#xff0c;易于理解和实现。 缺点: 当数据集非常大时&#xff0c;IVF_FLAT需要大量的内存来存储整个数据集&#xff0c;…...

Linux上如何分析进程内存分配,优化进程内存占用大小

云计算场景下,服务器上内存宝贵,只有尽可能让服务器上服务进程占用更少的内存,方才可以提供更多的内存给虚拟机,卖给云客户。 虚拟化三大件:libvirt、qemu、kvm内存开销不小,可以优化占用更少的内存。如何找到进程内存开销的地方直观重要,以qemu为例说明。 一、查看进…...

C语言笔记(第n版):知识清单

注&#xff1a;本文参考自【C reference - cppreference.com】和【C 语言参考 | Microsoft Learn】&#xff0c;颇有点借花献佛的意味…… C 程序是一系列包含声明的文本文件&#xff08;通常为头文件和源文件&#xff09;的序列。它们经过转换成为可执行程序&#xff0c;当操作…...

【香橙派系列教程】(四)基于ARM-Linux架构的语音控制刷抖音项目

【四】基于ARM-Linux架构的语音控制刷抖音项目 文章目录 【四】基于ARM-Linux架构的语音控制刷抖音项目1.语音模块配置1.创建产品2.引脚配置3.词条定义4.添加控制5.发布版本6.烧录固件 2.编程实现语音和开发板通信3.手机接入Linux热拔插1.dmesg命令2.adb调试踩坑问题 3.总结 4.…...

Java----反射

什么是反射&#xff1f; 反射就是允许对成员变量、成员方法和构造方法的信息进行编程访问。换句话来讲&#xff0c;就是通过反射&#xff0c;我们可以在不需要创建其对象的情况下就可以获取其定义的各种属性值以及方法。常见的应用就是IDEA中的提示功能&#xff0c;当我…...

相似度计算方法

一、相似度计算方法 相似度算法是计算两个或多个对象之间相似程度的方法&#xff0c;这些对象可以是文本、图像、音频等不同类型的数据。在计算机科学、信息检索、推荐系统、数据挖掘等领域中&#xff0c;相似度算法具有广泛的应用。 二、应用场景 搜索引擎&#xff1a;用于文…...

Vue 点击markdown页内链接,路由设置不跳转

在路由index.js里添加路由守卫&#xff1a; router.beforeEach((to,from,next)>{//如果是md页内链接“#xxx”&#xff0c;则不跳转const hash window.location.hash;if(hash.startsWith(#)) {next(false);}else{...其他控制代码next();} });当markdown用[标题链接](#标题名…...

IOday4

一、思维导图 二、练习 1、使用父子进程完成两个文件的拷贝&#xff0c;父进程拷贝前一半内容&#xff0c;子进程拷贝后一半内容&#xff0c;子进程结束后退出&#xff0c;父进程回收子进程的资源 #include<myhead.h> int main(int argc, const char *argv[]) {//判断终…...

智能座舱背后主流车机平台(SA8155/SA8295)的高通Hexagon DSP是什么?

智能座舱背后主流车机平台(SA8155/SA8295)的高通Hexagon DSP是什么&#xff1f; 一、高通Hexagon DSP的辉煌发展历程 高通&#xff0c;作为全球领先的无线通信技术创新者&#xff0c;其处理器技术一直走在行业前列。随着智能手机和物联网设备的普及&#xff0c;对处理器性能的…...

linux进程控制——进程等待——wait、waitpid

前言&#xff1a;本节内容仍然是进程的控制&#xff0c;上一节博主讲解的是进程控制里面的进程创建、进程退出、终止。本节内容将讲到进程的等待——等待是为了能够将子进程的资源回收&#xff0c;是父进程等待子进程。 我们前面的章节也提到过等待&#xff0c; 那里的等待是进…...

Shell脚本的进程管理

进程管理是系统管理的重要方面&#xff0c;通过对进程的监控、启动、停止和重启&#xff0c;可以保证系统的稳定运行。Shell脚本是一种强大的工具&#xff0c;可以对进程进行自动化管理&#xff0c;提高效率和准确性。 参考&#xff1a;shell脚本进程管理 - CSDN文库 shell脚本…...

JLink烧录失败

1. 现象&#xff1a; 这个位置是灰色的&#xff0c;没有SW Device信息。 MDK下面的打印&#xff1a; J-Flash的打印&#xff1a; windows上面的弹框的现象没有截屏。 2. 解决办法&#xff1a; 1.打开J-Link Commander,输入unlock kinetis&#xff0c;看现象不起作用,网…...

Monorepo简介

Monorepo 第一章&#xff1a;与Monorepo的邂逅第二章&#xff1a;Multirepo的困境第三章&#xff1a;Monorepo的魔力 - 不可思议的解决问题能力第四章&#xff1a;Monorepo的挑战与应对策略第五章&#xff1a;总结第六章&#xff1a;参考 第一章&#xff1a;与Monorepo的邂逅 …...

SpringBoot打包为jar包,打包前注意事项及打包教程

在打包 Spring Boot 项目为 JAR 包之前&#xff0c;有一些重要的注意事项和步骤&#xff0c;以确保打包过程顺利并生成一个可正常运行的 JAR 包&#xff1a; 1. 检查依赖和版本 确保所有依赖项和插件版本是最新且兼容的&#xff0c;特别是 Spring Boot 版本和其相关依赖的版本…...

B端系统UI个性化设计:感受定制之美

B端系统UI个性化设计&#xff1a;感受定制之美 引言 艾斯视觉作为ui设计和前端开发从业者&#xff0c;其观点始终认为&#xff1a;在当今竞争激烈的商业环境中&#xff0c;B端&#xff08;Business-to-Business&#xff09;系统的设计不再仅仅是功能性的堆砌&#xff0c;而是…...

前端常用 utils 工具封装

// 函数防抖 export function debounce(fn, interval) {let timerreturn function (this, ...args) {clearTimeout(timer)const context thislet params [...args]timer setTimeout(() > {fn.call(context, ...params)}, interval || 1000)} }// 函数节流 export functio…...

项目都做完了,领导要求国际化????--JAVA后端篇

springboot项目国际化相信各位小伙伴都会&#xff0c;很简单&#xff0c;但是怎么项目都做完了&#xff0c;领导却要求国际化文件就很头疼了 国际化的SpringBoot代码&#xff1a; 第一步&#xff1a;创建工具类 /*** 获取i18n资源文件** author bims*/ public class Message…...

国内备受好评PostgreSQL数据库性能如何?

为什么国内很多数据库采用PostgreSQL数据库作为基础&#xff0c;再次开发自己的产品呢?不仅仅是因为PostgreSQL数据库开源免费、PostgreSQL 数据库的性能也是相当出色的&#xff0c;具有以下几个方面的特点&#xff1a; 1. 处理大规模数据&#xff1a; - 能够有效地管理和处…...

彻底搞懂前端跨域解决方案

一、浏览器的同源策略 1、同源策略概述 同源策略是浏览器为确保资料安全&#xff0c;而遵循的一种策略&#xff0c;该策略对访问资源进行了一些限制。 2、什么是源&#xff08;origin&#xff09;&#xff1f; 3、示例 4、同源请求 5、非同源请求 二、跨域会受到哪些限制 1…...

Kafka基础概念

MQ消息中间件 1&#xff09;总览&#xff1a; 消息中间件 这里我们主要学习的是kafka的基础概念 具体参考黑马头条&#xff1a;https://www.bilibili.com/video/BV1Qs4y1v7x4/?spm_id_from333.337.search-card.all.click 2&#xff09;消息中间件对比 3&#xff09;Kafka介…...

【论文阅读笔记】DeepCAD: A Deep Generative Network for Computer-Aided Design Models

1 引言 现有3D生成模型&#xff1a; 3D点云&#xff1a;大量离散的3D点组成的数据表示形式&#xff1b; 多边形网格&#xff1a;一系列相连的多边形组成的3D模型&#xff1b; 水平集场&#xff1a;使用数值函数来表示物体的边界&#xff0c;并根据函数值的正负来确定物体内部…...

《如鸢》开通官号,女性向游戏爆款预定

今天&#xff0c;备受瞩目的沉浸式剧情卡牌手游《如鸢》正式开通了官方社媒账号并发布了玩家信。 《如鸢》由灵犀互娱倾力打造&#xff0c;游戏不仅拥有跌宕起伏的权谋剧情&#xff0c;更采用Live2D技术&#xff0c;为玩家带来沉浸式的游戏体验&#xff0c;吸引了众多玩家关注。…...

OpenAI再下一城:发布Voice Engine,可使用文本和参考语音合成说话者的新语音!

转自 机器学习算法工程师 OpenAI又发布了一个最新的工作&#xff1a;Voice Engine。Voice Engine可以使用文本输入和单个 15 秒音频样本生成听起来自然且与原始说话者非常相似的语音。而且&#xff0c;一个小型模型仅通过一个 15 秒的样本就能创造出富有情感且逼真的语音。Voi…...

KVM高级功能部署

一、概述 KVM&#xff08;Kernel-based Virtual Machine&#xff09;是一种基于内核的虚拟化技术&#xff0c;它依赖于CPU的虚拟化扩展&#xff08;如Intel VT和AMD-V&#xff09;来实现虚拟机的创建、管理和调度。KVM虚拟化技术因其高效、稳定的特点&#xff0c;在云计算和企…...

【C语言】柔性数组(打开前所未见的大门)

文章目录 前言柔性数组1.1 概念1.2 柔性数组的特点1.3 柔性数组的使用1.4 柔性数组的优势 总结 前言 说到柔性数组&#xff0c;相信有很多学过C语言的读者都不知道这是个什么东西。不过没有关系&#xff0c;相信本章能够带你从到认识到掌握柔性数组&#xff0c;做一个充满知识…...

设计模式17-适配模式

设计模式17-适配模式 动机定义与结构C代码推导总结应用具体应用示例 动机 在软件系统中由于应用环境的变化常常需要将一些现存的对象。放到新的环境中去应用。但是新环境要求的接口是这些现存对象所不满足的。那么这种情况下如何应对这种迁移的变化&#xff1f;如何既能利用现…...

react ant Input defaultValue={value}设置了value值以后,但是defalult没有赋值上,输入框也没有显示

在 React 中&#xff0c;defaultValue 是一个非受控属性&#xff0c;而 value 是一个受控属性。这两个属性都可以用于设置 Input 组件的值&#xff0c;但是它们的工作方式有所不同。 value&#xff1a;这是一个受控属性&#xff0c;意味着输入框的值由 React 状态控制。每当状态…...