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

C++-类和对象(下)

C++-类和对象(下)

  • 一,const成员函数
  • 二,再谈构造函数
    • 1,初始化列表
    • 2,explicit关键字
  • 三,static成员
  • 四,友元(friend)
    • 1,全局函数做友元
    • 2,类做友元
    • 3,成员函数做友元
  • 五,内部类
  • 六,匿名对象
  • 七,拷贝对象时编译器的优化
  • 八,再次理解类和对象

一,const成员函数

一般自定类型的对象传参时,都是传引用这样可以减少一次拷贝构造,同时前面加const进行修饰,以免通过引用来改变实体。

class A
{
public:A(int x = 0): _a(x){}void Print(){cout << _a << endl;}private:int _a;
};
void func(const A &a)
{a.Print();
}
int main()
{A a1;return 0;
}

这种情况下,我们通过形参a来调用Print()函数,会发生报错。原因是因为这里发生了权限的放大,由于在调用成员函数时有一个默认的形参就是this指针,但a的this指针是被const修饰的,也就是说将 const *this 传给了 *this,这是一个明显的权限放大问题, 为了解决这一问题就要引出const成员函数这一概念。

将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。并且const是加在成员函数的形参列表的后面。

class A
{
public:A(int x = 0): _a(x){}void Print() const{cout << _a << endl;}private:int _a;
};

思考下面的四个问题:

  • const对象可以调用非const成员函数吗?
    答案是不可以。
    const *this 传给 *this 会发生权限的放大。
  • 非const对象可以调用const成员函数吗?
    答案是可以。
    *this 是可以传给 const *this 的,这里是权限的缩小。
  • const成员函数内可以调用其它的非const成员函数吗?
    答案是不可以。
    const成员函数中,const修饰的是*this ,如果其调用其他非const成员函数,会发生权限的放大。
  • 非const成员函数内可以调用其它的const成员函数吗?
    答案是可以。
    *this 传给 const *this 是允许的,这里是权限的缩小。

二,再谈构造函数

1,初始化列表

之前提到类的实例化是对象定义的时候,但对象内部的成员变量是何时被定义的呢?
因为有些变量是要在定义时必须初始化的,比如 const int p;int& a;
初始化列表就是每个成员变量定义的地方 ,初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。例如下面这样:

class A
{
public:A(int a = 0, int b = 0, int c = 0): _a(a), _b(b), _c(c){}void Print() const{cout << _a << endl;}private:int _a;int _b;int _c;
};

在调用构造函数的时候,会先进行初始化列表中的内容,在进行构造函数{ } 内部的内容,{ }里的内容实际上是对定义出来的对象进行赋值,而初始化列表是成员变量定义初始化的地方。
注意:

  • 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
  • 引用成员变量const成员变量,自定义类型成员变量且没有默认构造函数时,必须使用初始化列表进行初始化。
  • 无论你有没有显示的写出初始化列表,编译器都先使用初始化列表进行初始化。如果没有显示写,那么编译器会去看有没有为成员变量提供缺省值。
  • 成员变量在类中的声明次序,就是其在初始化列表中的初始化次序
class A
{
public:A(int a): _a1(a), _a2(_a1){}void Print(){cout << _a1 << " " << _a2 << endl;}private:int _a2;int _a1;
};
int main() {A aa(1);aa.Print();
}

由于_a2定义在_a1之前,所以在初始化列表中会先对_a2初始化,所以会被初始化成随机值,_a1会被初始化成1.

2,explicit关键字

构造函数不仅可以构造与初始化对象,对于单个参数或者除第一个参数无默认值其余均有默认值的构造函数,还具有类型转换的作用。

class A
{
public:A(int a): _a(a){}private:int _a;
};
int main()
{A a1 = 8;return 0;
}

这里的8会调用A类的构造函数,隐式类型转换成A类型,接着通过拷贝构造初始化a1,这里编译器会优化成一个构造函数(后面会讲到)。

class Date
{
public:Date(int year, int month = 1, int day = 1): _year(year), _month(month), _day(day){}private:int _year;int _month;int _day;
};
int main()
{Date d1 = 2023;return 0;
}

这里也会发生隐式类型转换,为了防止这种类型转换可以用explicit 修饰成员函数,来禁止构造函数的隐式类型转换。

class Date
{
public:explicit Date(int year, int month = 1, int day = 1): _year(year), _month(month), _day(day){}private:int _year;int _month;int _day;
};

三,static成员

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。

特性:

  • 静态成员变量必须在类外定义初始化,定义时不添加static关键字,类内只是声明。
class A
{
public:A(int a = 1): _a(a){}private:int _a;static int _b;
};
int A::_b = 1;
  • 静态成员为所有类对象共享,不属于某个具体对象存放在静态区。
  • 类的静态成员可以通过类名::静态成员(前提是public作用域下) 或者对象.静态成员。
  • 静态成员函数没有隐藏的this指针,不能访问任何非静态成员。
  • 静态成员也是类的成员,受public、protected、private 访问限定符的限制。

思考:

  • 实现一个类,计算程序中创建出了多少对象?

分析:由于创建对象时都会调用构造函数或者是拷贝构造,所以在这两个函数上动手脚就可以了。可以定义一个计数器,每次调用这两个函数计数器加1,有人会想到用全局变量做计数器,但是这种做法不是很安全,因为全局函数谁都可以更改。
所以我们采用静态的成员变量充当这个计数器,静态的成语变量不被某个对象所拥有,而是属于整个类的。

class A
{
public:A(){_count++;}A(const A &a){_count++;}private:static int _count;
};
void func()
{A a1;A a2(a1);A a3;
}
int main()
{func();return 0;
}

上面这种情况,我们是调用了一个函数,在函数内部创建了许多对象,而出了这个函数我们无法去访问_count,除非我们再创建一个对象,用其去访问_count,最终将_count的值减1。
其实大可不必这样,我们只需再类中publi作用域下定义一个静态的成员函数,起作用就是返回_count的值,这样我们就可以指明类的作用域直接访问这个成员函数,不再需要创建一个新的对象。

class A
{
public:A(){_count++;}A(const A &a){_count++;}static int sum(){return _count;}private:static int _count;
};
void func()
{A a1;A a2(a1);A a3;
}
int main()
{func();cout << A::sum() << endl;return 0;
}
  • 静态成员函数可以调用非静态成员函数吗?

由于静态成员函数中没有this指针这一默认参数,所以其无法去调用非静态成员函数。

  • 非静态成员函数可以调用类的静态成员函数吗?

静态成员函数是属于整个类的,可以通过非静态成员函数去访问。

四,友元(friend)

友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。
友元分为:友元函数和友元类

1,全局函数做友元

我们之前讲述过运算符重载,但是我们在用成员函数重载<<运算符的时候,会出现问题,因为流插入(<<)操作符有两个操作数,而采用成员函数重载它的时候,this指针充当了第一个操作数,第二个操作数是ostream类的对象,所以使用时会出现下面的情况:
a1 << cout

  • ostream类
    在这里插入图片描述

cout实际上是ostream类的一个对象,之所以他能使用cout << 这种形式打印数据,实际上他做了运算符重载+函数重载。

为了解决上述情况,我们用全局函数进行运算符重载:

class A
{
public:A(int a = 0): _a(a){}private:int _a;
};
ostream &operator<<(ostream &_cout, const A &a)
{cout << a._a << endl;
}

但是这种写法是不对的,无法在类外直接访问类的私有成员,所以我们要将这个函数作为A类的友元函数。

class A
{friend ostream &operator<<(ostream &_cout, const A &a);public:A(int a = 0): _a(a){}private:int _a;
};
ostream &operator<<(ostream &_cout, const A &a)
{cout << a._a << endl;
}

说明:

  • 友元函数可访问类的私有和保护成员,但不是类的成员函数
  • 友元函数不能用const修饰(其没有this指针)
  • 友元函数可以在类定义的任何地方声明,不受类访问限定符限制
  • 一个函数可以是多个类的友元函数
  • 友元函数的调用与普通函数的调用原理相同

2,类做友元

友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。

  • 友元关系是单向的,不具有交换性。
class B;
class A
{friend class B;friend ostream &operator<<(ostream &_cout, const A &a);public:A(int a = 0): _a(a){}private:int _a;
};
class B
{
public:B(){}private:int _b;
};

B是A的友元类,B类的所有成员函数都可以访问A类的私有成员,但是A类不是B的友元类,A的成员函数无法访问B的私有成员。

  • 友元关系不能传递
    如果C是B的友元, B是A的友元,则不能说明C时A的友元。
  • 友元关系不能继承。

3,成员函数做友元

class B;
class A
{friend void B::func(const A &a);friend ostream &operator<<(ostream &_cout, const A &a);public:A(int a = 0): _a(a){}private:int _a;
};
class B
{
public:B(){}void func(const A &a){cout << a._a << endl;}private:int _b;
};

注意:这样写是会编译不通过的,编译器在编译的时候只会向上去找,不会向下去找,编译器到达 friend void B::func(const A &a);这一行的时候,它并不知道有这个函数,所以要在这之前前先声明一下这个函数,但是成员函数实在类内声明的,所以B类的定义要放在A类的上面。

class A;
class B
{
public:B(){}void func(const A &a){cout << a._a << endl;}private:int _b;
};class A
{friend void B::func(const A &a);friend ostream &operator<<(ostream &_cout, const A &a);public:A(int a = 0): _a(a){}private:int _a;
};

五,内部类

==概念:==如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。
==注意:==内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所有成员。但是外部类不是内部类的友元。
特性:

  • 内部类可以定义在外部类的public、protected、private都是可以的。
  • 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。
class A
{
private:static int k;int h;public:class B // B天生就是A的友元{public:void foo(const A &a){cout << k << endl;   // OKcout << a.h << endl; // OK}};
};
int A::k = 1;
int main()
{A::B b;b.foo(A());return 0;
}
  • sizeof(外部类)=外部类,和内部类没有任何关系。
cout << sizeof(A) << endl;

在这里插入图片描述
属于A类内部的只有h这一变量。

六,匿名对象

匿名对象就是在类的实例化定义对象的时候,不用写对象的名字。

class A
{
public:A(int a = 0): _a(a){}private:int _a;
};int main()
{A a1();return 0;
}

之前说过这样定义a1的对象使用全缺省的构造函数,是错误的,他会和函数的声明冲突(函数名 a1,返回值A类型,参数为空)。
但可以这样来创建匿名对象。

class A
{
public:A(int a = 0): _a(a){}private:int _a;
};int main()
{A();return 0;
}

==注意:==匿名对象的声明周期就在这一行,过了这一行就会调用析构函数。
在这里插入图片描述

七,拷贝对象时编译器的优化

在传参和传返回值的过程中,一般编译器会做一些优化,减少对象的拷贝,这个在一些场景下还是非常有用的。

class A
{
public:A(int a = 0): _a(a){cout << "A(int a)" << endl;}A(const A &aa): _a(aa._a){cout << "A(const A& aa)" << endl;}A &operator=(const A &aa){cout << "A& operator=(const A& aa)" << endl;if (this != &aa){_a = aa._a;}return *this;}~A(){cout << "~A()" << endl;}private:int _a;
};
void f1(A aa)
{
}
A f2()
{A aa;return aa;
}
  • 传值传参
int main()
{A aa1;f1(aa1);cout << endl;return 0;
}

在这里插入图片描述

在创建aa1时发生一次构造,传值传参发生一次拷贝构造。

int main()
{f1(1);f1(A(2));return 0;
}

第一种方式:1首先会发生隐式类型转换,调用一次构造函数,隐式类型转换出来的对象传递给形参发生一次拷贝构造,但是由于发生在一行中,所以编译器会优化成一次构造。
第二种方式:创建一个匿名对象直接传参,首先会一次构造函数,接着一次拷贝构造,但编译器会优化成为一个构造。
在这里插入图片描述

  • 传值返回
A f2()
{A aa;return aa;
}
int main()
{A aa2 = f2();return 0;
}

aa对象创建一次构造,传值返回一次拷贝构造,用返回值初始化aa2又一次拷贝构造,但编译器会优化成一次构造+一次拷贝构造。

A f2()
{return A();
}
int main()
{A aa2 = f2();return 0;
}

如果传一个匿名对象做返回,那么编译器会优化为一次构造。

在这里插入图片描述
总结

  • 接收返回值对象,尽量拷贝构造接收不要赋值接收
  • 函数中返回对象时,尽量返回匿名对象
  • 尽量使用const& 传参
    注意
    编译器不同所作出的优化也可能不太一样,越新的编译器做出的优化越大。如果你的编译器做出的优化和我举例中的优化不太一样,也是正常的。

八,再次理解类和对象

现实生活中的实体计算机并不认识,计算机只认识二进制格式的数据。如果想要让计算机认识现
实生活中的实体,用户必须通过某种面向对象的语言,对实体进行描述,然后通过编写程序,创
建对象后计算机才可以认识。比如想要让计算机认识洗衣机,就需要:

  1. 用户先要对现实中洗衣机实体进行抽象—即在人为思想层面对洗衣机进行认识,洗衣机有什么属性,有那些功能,即对洗衣机进行抽象认知的一个过程
  2. 经过1之后,在人的头脑中已经对洗衣机有了一个清醒的认识,只不过此时计算机还不清楚,想要让计算机识别人想象中的洗衣机,就需要人通过某种面相对象的语言(比如:C++、Java、Python等)将洗衣机用类来进行描述,并输入到计算机中
  3. 经过2之后,在计算机中就有了一个洗衣机类,但是洗衣机类只是站在计算机的角度对洗衣机对象进行描述的,通过洗衣机类,可以实例化出一个个具体的洗衣机对象,此时计算机才能洗衣机是什么东西。
  4. 用户就可以借助计算机中洗衣机对象,来模拟现实中的洗衣机实体了。
    在类和对象阶段,大家一定要体会到,类是对某一类实体(对象)来进行描述的,描述该对象具有那些属性,那些方法,描述完成后就形成了一种新的自定义类型,才用该自定义类型就可以实例化具体的对象

在这里插入图片描述

相关文章:

C++-类和对象(下)

C-类和对象&#xff08;下&#xff09;一&#xff0c;const成员函数二&#xff0c;再谈构造函数1&#xff0c;初始化列表2&#xff0c;explicit关键字三&#xff0c;static成员四&#xff0c;友元&#xff08;friend&#xff09;1&#xff0c;全局函数做友元2&#xff0c;类做友…...

什么是仓库管理?

仓库管理包括仓库日常运营所触及的准绳和流程。从较高的层次上讲&#xff0c;这包括接纳和组织仓库空间、布置劳动力、管理库存和完成订单。放大来看&#xff0c;你会发现有效的仓库管理触及到优化和集成这些过程中的每一个&#xff0c;以确保仓库操作的一切方面协同工作&#…...

对话系统学习概述(仅够参考)

对话系统&#xff08;仅够参考&#xff09; 目录对话系统&#xff08;仅够参考&#xff09;背景类人对话系统的关键特征1、知识运用2、个性体现3、情感识别与表达数据集评价方式评价的一些指标训练模型需要的资源任务型对话系统预训练最新研究进展参考文献背景 对话系统一般包括…...

免费CRM客户管理系统真的存在吗?不仅有,还有5个!

免费CRM客户管理系统真的存在吗&#xff1f;当然有&#xff01; 说到CRM客户管理系统&#xff0c;相信很多企业并不陌生&#xff0c;是因为CRM客户管理系统已经成为大多数企业最不可或缺的工具。但是对于很多小微企业和个人用户来说&#xff0c;购买和实施CRM的成本仍然难以承…...

C#开发的OpenRA使用自定义字典的比较函数

C#开发的OpenRA使用自定义字典的比较函数 字典是一个常用的数据结构, 因为它采用键值对的方式来保存数据, 这样非常方便程序里进行数据一对一的映射。 比如通过文件名称查找到文件对象,又者通过socket对象找到缓冲区对象。 由于字典是采用HASH算法,所以它的查找时间是非常快…...

DHCP协议

DHCP协议 文章目录DHCP协议DHCP作用及特点DHCP服务IP分配的三种方式DHCP协议中的报文类型DHCP服务工作流程抓包参考动态主机配置协议 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;&#xff0c;提供了一种 插网即用的技术。DHCP是一个应用层协议。当我们将…...

C语言进阶——自定义类型:枚举、联合

&#x1f307;个人主页&#xff1a;_麦麦_ &#x1f4da;今日名言&#xff1a;如果不去遍历世界&#xff0c;我们就不知道什么是我们精神和情感的寄托&#xff0c;但我们一旦遍历了世界&#xff0c;却发现我们再也无法回到那美好的地方去了。当我们开始寻求&#xff0c;我们就已…...

背景透明(opacity vs background)

最近在做项目的时候&#xff0c;遇到透明度的相关设置。 常用的背景透明设置可分为两种&#xff0c;分别是&#xff1a; 一是给background设置透明度。二是利用opacity属性。 在跳了一些坑之后&#xff0c;本人更推荐给background设置透明度&#xff0c;为什么呢&#xff1f;…...

华为OD机试 - 最小施肥机能效(Python)| 真题+思路+考点+代码+岗位

最小施肥机能效 题目 某农场主管理了一大片果园,fields[i]表示不同果林的面积,单位:( m 2 m^2 m2),现在要为所有的果林施肥且必须在 n 天之内完成,否则影响收成。 小布是果林的工作人员,他每次选择一片果林进行施肥,且一片果林施肥完...

vue2 使用 cesium 篇

vue2 使用 cesium 篇 今天好好写一篇哈&#xff0c;之前写的半死不活的。首先说明&#xff1a;这篇博文是我边做边写的&#xff0c;小白也是&#xff0c;实现效果会同时发布截图&#xff0c;如果没有实现也会说明&#xff0c;仅仅作为技术积累&#xff0c;选择性分享&#xff0…...

2023预测:PKI将受到企业重点关注

2023年&#xff0c;PKI作为关键业务将继续被主流企业关注&#xff0c;根据Keyfactor发布的报告显示&#xff0c;很多企业正努力实施PKI&#xff0c;而以下因素是影响企业决策的主要原因&#xff1a;1、66% 的企业正在其IT环境中部署更多的密钥和证书&#xff0c;而70%的企业表示…...

linux基本功系列之grep命令

文章目录前言一. grep命令介绍二. 语法格式及常用选项三. 参考案例3.1 搜索文件中以root开头的文件3.2 搜索文件中出现的root3.3 搜索除了匹配行之外的行3.4 匹配的部分使用颜色显示3.5 只输出文件中匹配到的地方3.6 输出包含匹配字符串的行&#xff0c;并显示所在的行数3.7 统…...

硬件设计——DDR

一、DDR简介 &#xff08;1&#xff09;DDRDouble Data Rate双倍速率同步动态随机存储器。严格的说DDR应该叫DDR SDRAM&#xff0c;人们习惯称为DDR&#xff0c;其中&#xff0c;SDRAM 是Synchronous Dynamic Random Access Memory的缩写&#xff0c;即同步动态随机存取存储器。…...

最近你提前还贷了吗

最近你有想过提前还贷吗&#xff1f;以前&#xff0c;欠别人的是大爷&#xff0c;借别人钱的是孙子。现在好像反过来了呀&#xff0c;想还钱成了孙子。现在&#xff0c;各种银行以各种方式增加你提前还贷的难度。比如第一步&#xff0c;关闭app线上还款入口第二步&#xff0c;需…...

关于STM32常用的8种GPIO输入输出模式的理解

目录 GPIO共有8中输入输出模式&#xff0c;分别是&#xff1a;上拉输入、下拉输入、浮空输入、模拟输入、开漏输出、推挽输出、开漏复用输出、推挽复用输出 &#xff0c;下面我们详细介绍以下上面的八种输入输出模式。 一、输入模式 &#xff08;1&#xff09;上拉输入&#x…...

vue - vue项目中解决 IOS + H5 滑动边界橡皮筋弹性效果

问题: 最近遇到一个问题&#xff0c;我们在企业微信中的 H5 项目中需要用到table表格&#xff08;支持懒加载 上划加载数据&#xff09;。但是他们在锁头、锁列的情况下&#xff0c;依旧会出现边界橡皮筋效果。就会显示的很奇怪。 什么是ios橡皮筋效果&#xff1a; 我们知道元素…...

webpack(高级)--创建自己的loader 同步loader 异步loader loader参数校验

webpack 创建自己的loader loader是用于对模块的源代码进行转换&#xff08;处理&#xff09; 我们使用过很多loader 比如css-loader style-loader babel-loader 我么如果想要自己创建一个loader 首先创建webpack环境 pnpm add webpack webpack-cli -D 之后创建loader模块…...

Assignment写作各个部分怎么衔接完美?

Assignment格式很简单&#xff0c;就只有四个部分&#xff0c;按着通用的套路来&#xff0c;发现也没什么难度。不过这4个部分自己需要衔接完美&#xff0c;下面就给大家分享一下写Assignment最简单的方法。 如果没有目录可以放在第一页的开头&#xff0c;用“标题字体”加重显…...

医疗器械实验室设计规划全了SICOLAB

一、通用型实验室医疗器械物理性能能检测中&#xff0c;有部分通用型试验&#xff0c;可覆盖不同产品检测&#xff0c;这些实验室需要重点考虑、设计。1、微粒检测室微粒检测室用于医疗器械产品微粒检测&#xff0c;包括微粒、落絮、药液滤除率等项目。微粒检测室要求为洁净室&…...

2023年浙江建筑施工物料提升(建筑特种作业)模拟试题及答案

百分百题库提供特种工&#xff08;物料提升机&#xff09;考试试题、特种工&#xff08;物料提升机&#xff09;考试预测题、特种工&#xff08;物料提升机&#xff09;考试真题、特种工&#xff08;物料提升机&#xff09;证考试题库等,提供在线做题刷题&#xff0c;在线模拟考…...

shell编程经典案例,建议收藏

1、编写hello world脚本 #!/bin/bash# 编写hello world脚本echo "Hello World!"2、通过位置变量创建 Linux 系统账户及密码 #!/bin/bash# 通过位置变量创建 Linux 系统账户及密码#$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数 useradd "$1" …...

C++通用容器

容器简介1.1 容器的分类序列容器 vector, list, deque容器适配器 queue, stack, priority_queue关联容器 set, map, multiset, multimap序列容器是提供一组线性储存的容器&#xff0c;而容器适配器负责将它们按照数据结构的方式组织起来&#xff0c;关联容器提供关键字与值之间…...

字符串的特殊读取——基于蓝桥杯两道题目(C/C++)

目录 1 例题 1.1 卡片换位 1.2 人物相关性分析 2 字符串的读取 2.1 综述 2.2 scanf 2.3 getline/getchar/get 2.4 注意 2.5 说明 先看例题 1 例题 1.1 卡片换位 问题描述 你玩过华容道的游戏吗&#xff1f; 这是个类似的&#xff0c;但更简单的游戏。 看…...

[足式机器人]Part3机构运动微分几何学分析与综合Ch01-4 平面运动微分几何学——【读书笔记】

本文仅供学习使用 本文参考&#xff1a; 《机构运动微分几何学分析与综合》-王德伦、汪伟 《微分几何》吴大任 Ch01-4 平面运动微分几何学1.2.3-2 点轨迹的Euler-Savary公式1.2.4 高阶曲率理论1.2.3-2 点轨迹的Euler-Savary公式 例1-7&#xff1a; 平面曲柄摇杆机构的 Euler-Sa…...

【每日一题Day120】LC2341数组能形成多少数对 | 哈希表 排序

数组能形成多少数对【LC2341】 给你一个下标从 0 开始的整数数组 nums 。在一步操作中&#xff0c;你可以执行以下步骤&#xff1a; 从 nums 选出 两个 相等的 整数从 nums 中 移除这两个整数&#xff0c;形成一个 数对 请你在 nums 上多次执行此操作直到无法继续执行。 返回一…...

win11/10+opencv3.x/4.x配置 VS2019方法(简单使用,亲测)

首先下载 opencv&#xff0c;去官网下载百度》输入opencv&#xff0c;点击opencv|home&#xff0c;进入官网。点击 “Library”---->Release点击 对应版本下的 window版本&#xff0c;点击 --安装--extract---》设置路径。这个就是把库文件扩展到指定的路径下&#xff0c;扩…...

HTTP协议---详细讲解

目录 一、HTTP协议 1.http 2.url url的组成&#xff1a; url的保留字符&#xff1a; 3.http协议格式​编辑 ①http request ②http response 4.对request做出响应 5.GET与POST方法 ①GET ②POST 7.HTTP常见Header ①Content-Type:: 数据类型(text/html等)在上文…...

Syntax-Aware Aspect-Level Sentiment Classification with PWCN 论文阅读笔记

一、作者 Chen Zhang, Qiuchi Li, and Dawei Song. 2019. Syntax-Aware Aspect-Level Sentiment Classification with Proximity-Weighted Convolution Network. In Proceedings of the 42nd International ACM SIGIR Conference on Research and Development in Information …...

hadoop考试应急

概述 四大特点&#xff1a;大量化、快速化、多元化、价值化 关键技术&#xff1a;采集、存储管理、处理分析、隐私和安全 计算模式&#xff1a;批处理、流、图、查询分析计算 Hadoop处理架构 了解就好 2007年&#xff0c;雅虎在Sunnyvale总部建立了M45——一个包含了4000…...

【React】Hooks

&#x1f6a9;&#x1f6a9;&#x1f6a9; &#x1f48e;个人主页: 阿选不出来 &#x1f4a8;&#x1f4a8;&#x1f4a8; &#x1f48e;个人简介: 一名大二在校生,学习方向前端,不定时更新自己学习道路上的一些笔记. &#x1f4a8;&#x1f4a8;&#x1f4a8; &#x1f48e;目…...

网站建设待遇怎样/企业推广方案

今天遇到一个有趣的问题&#xff0c;公司让平安做一个上传文件夹的功能&#xff0c;这个任务具有一定的挑战性哦。上传文件夹&#xff0c;我第一次看到有人这样做&#xff0c;以前都是上传压缩文件&#xff0c;从来就没有见人上传过文件夹&#xff0c;我也从来就没有尝试过。先…...

网站建设合同 费用/百度宁波营销中心

如何通过计算机的命令提示符(cmd.exe)连接 Oracle 数据库?DOS命令行连接oracle数据库假设有一个 Oracle 数据库信息如下&#xff1a;IP:192.168.0.1SID:orcl端口号&#xff1a;1521用户名&#xff1a;testuser密码&#xff1a;123456在本地客户端中配置的服务名为&#xff1a;…...

如何制作自己的网址链接/手机优化是什么意思

题目背景 盛况空前的足球赛即将举行。球赛门票售票处排起了球迷购票长龙。 按售票处规定&#xff0c;每位购票者限购一张门票&#xff0c;且每张票售价为50元。在排成长龙的球迷中有N个人手持面值50元的钱币&#xff0c;另有N个人手持面值100元的钱币。假设售票处在开始售票时…...

新开传奇网站999新服网/百度应用商店官网

2019独角兽企业重金招聘Python工程师标准>>> 常量指针&#xff0c;表述为“是常量的指针”&#xff0c;就是指向常量的指针&#xff0c;关键字 const 出现在 * 左边&#xff0c;表示指针所指向的地址的内容是不可修改的&#xff0c;但指针自身可变。 指针常量&#…...

网站验证码 出不来/网络营销软件大全

作者简介&#xff1a;成锁元&#xff0c;Westar实验室技术专家。Westar实验室&#xff08;westar.io&#xff09;&#xff0c;成立于 2018 年&#xff0c;关注于区块链及分布式前沿技术&#xff0c;包括区块链分层架构、二层路由&#xff0c;网络性能、智能合约、PoW 优化等。 …...

国外开源网站建设软件/seo服务商技术好的公司

这两天在捣鼓ListView widget&#xff0c;为了在ListView中加入Button这类的有 “点击” 事件的widget&#xff0c;请教了不少高手&#xff0c;感谢LandMark对我的认真讲解&#xff0c;下面把解决过程描述一下。ListView 和 其它能触发点击事件的widget无法一起正常工作的原因是…...