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

C++类和对象补充

目录

前言:

1. 构造函数->初始化列表

1.1 初始化列表出现原因

1.2 初始化列表写法

2. explicit关键字

2.1 explict的出现

2.2 explict的写法

3. static成员

4. 友元

4.1 友元函数

4.2 友元类 

5. 内部类和匿名对象

5.1 内部类

5.2 匿名对象


前言:

        本篇讲解的内容是类和对象的补充知识,也就是类和对象当中平时不太注意,但是有比较重要的知识。其中包括构造函数中的初始化列表、static成员、友元、内部类、匿名对象,以及部分小知识。如果小伙伴们有需要请向下查看咯。

1. 构造函数->初始化列表

1.1 初始化列表出现原因

        朋友们,还记得我上篇讲的,当我们在实例化一个对象的时候,编辑器会干嘛?会调用类里的构造函数,对类里面的成员变量作合适的初始化。如下:

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

        但是朋友们,有没有想过一个问题?那就是虽然我们在实例化的时候传入了一个参数,但是那真的算是初始化吗?可能有的小伙伴没有理解我的话。那我换一个说法,我们传入一个值用于初始化,并且将这个值赋值给了一个变量,那么这一步算是初始化吗?

        答案是否,这一个过程并不能说是初始化,我可以举一个例子:

    int a = 0;        //初始化a为0

    int b;              //创建了一个变量b
    b = 0;             //赋值b为0

         大家可以看出这两者的区别了吗?我相信是能的,那么再回到我们的构造函数,这个时候我们再看它,他是初始化还是赋值操作?相信大家心里有数了吧。

        不过话又说回来,这个初始化和赋值有什么影响吗?这么看起来好像没有区别啊?确实,如果是这种类型的变量赋值和直接初始化没有区别,但是大家可能忘了某些东西:引用、const成员变量。想到了吗?

    int& c;                        //引用不初始化
    const int d;                //  const成员变量不初始化      
    d = 10;                      //const成员变量重新赋值

         这几个写法很明显是错误的,相信大家也能够分辨出来,那么我们将这两个类型写在类里,此时我们的写法还正确吗?肯定是错误的。

        所以,C++祖师爷基于这个点,为我们的构造函数多添加了一个功能——初始化列表。

1.2 初始化列表写法

        先看一下代码是如何写的:

class A
{
public:A(int a)			:_a(a)			//初始化列表{}
private:int _a;
};
class B
{
public:B(int a, int ref):_aobj(a)		//初始化列表, _ref(ref), _n(10){}
private:A _aobj; // 没有默认构造函数int& _ref; // 引用const int _n; // const
};

        大家看看我定义的两个类,有没有发现它里面的构造函数多了个东西?那就是以冒号开始,用逗号分隔每一个变量,每个变量加上括号和初始值。

        用上述的B类构造函数为例子:

:_aobj(a)       
, _ref(ref)
 , _n(10)

         这就是初始化列表写法,当然,如果我们初始化有特殊的需求,还是可以将功能写在初始化列表下方的花括号中,例如条件判断、申请堆上的空间之类的。

        编辑器有一个对于初始化列表的规定,那就是不管我们写不写,它都会自己去运行一遍,不过它却不会对这些变量做任何的处理,只有我们写了,他才会为其赋初值。

        还有一点需要我们注意,请先看下方代码,并计算_a1和_a2的初始值。

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();
}

选项: 

A. 输出1 1
B.程序崩溃
C.编译不通过
D.输出1 随机值

         答案是D,与大家计算的是否有出入了?相信多数朋友会选择a吧?因为我就是其中之一。

        其实初始化列表的初始化顺序不是我们眼睛看到的那样,它的初始化顺序是变量定义的顺序,看下代码:

private:int _a2;int _a1;

        也就是说,_a2先用_a1的初始值也就是随机值赋值了,然后_a1再通过1赋值,这也就造成了我们之前产生的小bug。

2. explicit关键字

2.1 explict的出现

        在讲解这个关键字的之前,我想问一个问题,大家知道下面的两种实例化对象的方式有什么不同吗?(不是说写法)。

Date d1(2023,2,17);

Date d2 = {2023,2,17};

         这样问估计有些难为人,我就直接讲了,第一种会直接用这些初始值通过构造函数实例化

        但是第二种不同,第二种通过这些初始值,调用构造函数实例化之后,然后通过赋值的方式将其转换给d2。大家看出区别了吗?也就是说第一种实例化只有构造函数参与,但是第二种不仅有构造函数,还有拷贝构造参与。不过对于现在的编辑器来说已经被优化了,二者都只有构造函数参与,如果按照刚出现的那段时间,用第二种在构造一个对象的时候产生两个变量大小的空间,这务必会影响我们程序运行的效率。

        那我问大家,为什么会出现这个过程呢?先看下方的代码:

    int a = 10;
    double b = (double)a;

         问:我们将a强制类型转换成double类型,int a是否还存在。

        答案是当然存在,强制类型转换只会新开辟一个临时空间存储,然后赋值给b,其中a的参与只有提供10这个数的价值。通过等效的理解方式,大家再去看上面的Date d2 = {2023,2,17};是不是瞬间就明白了?只不过该操作是隐式类型转换

        explict的出现就是为了禁止这种强制类型转换的。

2.2 explict的写法

class Date
{
public:explicit Date(int year):_year(year){}Date& operator=(const Date& d){if (this != &d){_year = d._year;_month = d._month;_day = d._day;}return *this;}
private:int _year;int _month;int _day;
};
void Test()
{Date d1(2022);d1 = 2023;            //错误}

        大家可以看到,如果我们不添加explict,d1 = 2023这种写法是正确的,但是大家可以赋值这段代码进入你的编辑器看一看,这个操作是否还正确?

        所以explict的功能是:用explicit修饰构造函数,将会禁止构造函数的隐式转换。

3. static成员

        对于static关键字,想必大家还是很了解的,但是当他出现在类里面还清楚吗?

        我们都知道static描述的变量,这个变量的生命周期会到程序结束才会停止,而不是局限于函数结束就被销毁。这个特性static也延续到类当中,当用static去修饰类里面的变量,那么这个变量的生命周期就被提升,并且它并不单独属于某个实例化的类对象,而是属于整个类。

        大伙看到这估计有些疑问,他既然写在了类里面,又不属于这个类的对象,那么它在哪?答案是它被存在了静态区。也就是计算类的大小也不会将他算入其中。

class Date
{
public:static int a;
private:int _year;int _month;int _day;
};int main()
{Date d1;cout << sizeof(d1) << endl;return 0;
}

         正常来说,这个类的大小应该是16对吧,因为又4个整型变量嘛,但是其中有一个变量是static修饰的,所以它的大小不计入其中。

        因为这个static修饰的变量不属于某一个变量,所以说,没有任何一个对象想能对其进行初始化,只能有一个操作,那就是类外定义。

int Date::a = 0;

        至于为什么要这样做?想一想,要是每一个对象都能够对static初始化,那么static修饰这个变量有什么意义呢?

        并且static不只是可以修饰变量,还可以修饰成员函数,将这个成员函数变为静态成员函数。

以下几个特性需要大家知道:

1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区
2. 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问
4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员
5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制

         知道了这些特点,下面两个问题相信大家也能够回答了。

        1. 静态成员函数可以调用非静态成员函数吗?
        2. 非静态成员函数可以调用类的静态成员函数吗?

4. 友元

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

4.1 友元函数

        一般来说友元用到的场景不会太多,但是有一个东西如果不用友元那么它的操作方式会变得十分奇怪,那就是重定义<<和>>这两个操作符。

class Date
{
public:Date(int year, int month, int day): _year(year), _month(month), _day(day){}ostream& operator<<(ostream& _cout){_cout << _year << "-" << _month << "-" << _day << endl;return _cout;}
private:int _year;int _month;int _day;
};int main()
{Date d1(1, 2, 3);d1 << cout;//cout << d1;   //错误return 0;
}

        d1 << cout; -> d1.operator<<(&d1, cout); 不符合常规调用,因为成员函数第一个参数一定是隐藏的this,所以d1必须放在<<的左侧。

        还记得我上一篇讲的吗?因为cout的输出流对象和隐含的this指针在抢占第一个参数的位置。this指针默认是第一个参数也就是左操作数了。但是实际使用中cout需要是第一个形参对象,才能正常使用。所以要将operator<<重载成全局函数。但又会导致类外没办法访问成员,此时就需要友元来解决。operator>>同理。

        这个时候友元函数的出现就显得十分重要了:

class Date
{friend ostream& operator<<(ostream& _cout, const Date& d);friend istream& operator>>(istream& _cin, Date& d);
public:Date(int year = 1900, int month = 1, int day = 1): _year(year), _month(month), _day(day){}
private:int _year;int _month;int _day;
};
ostream& operator<<(ostream& _cout, const Date& d)
{_cout << d._year << "-" << d._month << "-" << d._day;return _cout;
}
istream& operator>>(istream& _cin, Date& d)
{_cin >> d._year;_cin >> d._month;_cin >> d._day;return _cin;
}
int main()
{Date d;cin >> d;cout << d << endl;return 0;
}

        可以看到我们的友元函数的写法就是将函数定义在类外面,然后在类里面写下声明并在前面添加上friend关键字。声明的位置可以是任意位置,但是我们习惯将其写在类最上方,而且友元函数突破了public、protected、private的限制。也就是友元函数能够直接访问类里面的私有成员。

friend ostream& operator<<(ostream& _cout, const Date& d);
friend istream& operator>>(istream& _cin, Date& d);

 特性:

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

4.2 友元类 

特性:

1. 友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。
2. 友元关系是单向的,不具有交换性。比如上述Time类和Date类,在Time类中声明Date类为其友元类,那么可以在Date类中直接访问Time类的私有成员变量,但想在Time类中访问Date类中私有的成员变量则不行。
3. 友元关系不能传递,如果C是B的友元, B是A的友元,则不能说明C时A的友元。
4. 友元关系不能继承,在继承位置再给大家详细介绍。

class Time
{friend class Date; // 声明日期类为时间类的友元类,则在日期类中就直接访问Time类//中的私有成员变量
public:Time(int hour = 0, int minute = 0, int second = 0): _hour(hour), _minute(minute), _second(second){}
private:int _hour;int _minute;int _second;
};
class Date
{
public:Date(int year = 1900, int month = 1, int day = 1): _year(year), _month(month), _day(day){}void SetTimeOfDate(int hour, int minute, int second){// 直接访问时间类私有的成员变量_t._hour = hour;_t._minute = minute;_t._second = second;}
private:int _year;int _month;int _day;Time _t;
};

5. 内部类和匿名对象

5.1 内部类

概念:

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

特性:

1. 内部类可以定义在外部类的public、protected、private都是可以的。
2. 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。
3. sizeof(外部类)=外部类,和内部类没有任何关系。

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;
}

5.2 匿名对象

class A
{
public:A(int a = 0):_a(a){cout << "A(int a)" << endl;}~A(){cout << "~A()" << endl;}
private:int _a;
};
class Solution {
public:int Sum_Solution(int n) {return n;}
};

int main()
{
    A aa1;
    // 不能这么定义对象,因为编译器无法识别下面是一个函数声明,还是对象定义
    //A aa1();
    // 但是我们可以这么定义匿名对象,匿名对象的特点不用取名字,
    // 但是他的生命周期只有这一行,我们可以看到下一行他就会自动调用析构函数
    A();
    A aa2(2);
    // 匿名对象在这样场景下就很好用,当然还有一些其他使用场景,这个我们以后遇到了再说
    Solution().Sum_Solution(10);
    return 0;
}


         以上就是我对类于对象的全部补充啦,还请大家多多支持咯!

相关文章:

C++类和对象补充

目录 前言&#xff1a; 1. 构造函数->初始化列表 1.1 初始化列表出现原因 1.2 初始化列表写法 2. explicit关键字 2.1 explict的出现 2.2 explict的写法 3. static成员 4. 友元 4.1 友元函数 4.2 友元类 5. 内部类和匿名对象 5.1 内部类 5.2 匿名对象 前言&a…...

08 SpringCloud 微服务网关Gateway组件

网关简介 大家都都知道在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢&#xff1f; 如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去用。 这样的架构&#xff0c;会存…...

极验3代 加密分析

目标链接 aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9zbGlkZS1mbG9hdC5odG1s接口分析 极验参数重要信息 gt和challenge&#xff1b;gt是固定的&#xff0c;但是challenge每次请求会产生不同的&#xff0c;这里的请求的并没有什么加密参数。 下一个请求 gettype.php&#xff0c…...

python 数据分析可视化实战 超全 附完整代码数据

代码数据&#xff1a;https://download.csdn.net/download/qq_38735017/873799141.1 数据预处理1.1.1 异常值检测①将支付时间转为标准时间的过程中发生错误&#xff0c;经排查错误数据为‘2017/2/29’,后将其修改为‘2017/2/27’。②经检测发现部分订单应付金额与实付金额都为…...

有趣的HTML实例(十三) 咖啡选择(css+js)

一个人追求目标的路途是孤单的&#xff0c;一个人独品辛酸的时候是寂寥的&#xff0c;一个人马不停蹄的追赶着&#xff0c;狂奔着&#xff0c;相信前方是一片光明&#xff0c;我从不放弃希望&#xff0c;就像我对生活的信念&#xff0c;没有人可以动摇。 ——《北京青年》 目录…...

【力扣-LeetCode】1139. 最大的以 1 为边界的正方形 C++题解

1139. 最大的以 1 为边界的正方形难度中等137收藏分享切换为英文接收动态反馈给你一个由若干 0 和 1 组成的二维网格 grid&#xff0c;请你找出边界全部由 1 组成的最大 正方形 子网格&#xff0c;并返回该子网格中的元素数量。如果不存在&#xff0c;则返回 0。示例 1&#xf…...

【JavaGuide面试总结】Redis篇·下

【JavaGuide面试总结】Redis篇下1.如何使用 Redis 事务&#xff1f;2.如何解决 Redis 事务的缺陷&#xff1f;3.说说Redis bigkey吧4.大量 key 集中过期问题怎么解决的5.如何保证缓存和数据库数据的一致性&#xff1f;6.缓存穿透有哪些解决办法&#xff1f;7.缓存击穿有哪些解决…...

ForkJoinPool原理

1、概述 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架。ForkJoinPool是Java中提供了一个线程池&#xff0c;特点是用来执行分治任务。主题思想是将大任务分解为小任务&#xff0c;然后继续将小任务分解&#xff0c;直至能够直接解决为止&#xff0c;然后再依次将任…...

02 python基本语法和数据类型

基本语法 python脚本可以在python交互式shell或者代码编辑器中编写与运行。python文件的扩展名一般为.py python使用缩进来区分不同的代码块,此特性有利于提高代码可读性。 下面是一个简单的python条件语句代码: 小明=矮穷错 小红=白富美 小华=高富帅 小李=程序员某人 = &quo…...

【办公类-16-09】“2022下学期 大班运动场地分配表-跳过节日循环排序”(python 排班表系列)

样例展示&#xff1a;跳过节日的运动场地循环排序表&#xff08;8个班级8组内容 下学期一共20周&#xff09;背景需求&#xff1a;上学期做过一次大班运动场地安排&#xff0c;跳过节日。2023.2下学期运动场地排班&#xff08;跳过节日&#xff09;又来了。一、场地器械微调二、…...

全网多种方法分析解决HTTP Status 404资源未找到的错误,TCP的3次握手,dns域名解析,发起http请求以及cookie和session的区别

文章目录1. 文章引言2. 简述URL3. http完整请求3.1 DNS域名解析3.2 TCP的3次握手3.3 发起http请求3.4 浏览器解析html代码3.5 浏览器对页面进行渲染呈现给用户4. 解决404错误的方法5. 补充知识点5.1 cookie和session的区别5.2 ChatGPT的介绍1. 文章引言 正赶上最近ChatGPT很火…...

Django图书商场购物系统python毕业设计项目推荐

mysql数据库进行开发&#xff0c;实现了首页、个人中心、用户管理、卖家管理、图书类型管理、图书信息管理、订单管理、系统管理等内容进行管理&#xff0c;本系统具有良好的兼容性和适应性&#xff0c;为用户提供更多的网上图书商城信息&#xff0c;也提供了良好的平台&#x…...

基于模型预测控制(MPC)的悬架系统仿真分析

目录 前言 1.悬架系统 2.基于MPC的悬架系统仿真分析 2.1 simulink模型 2.2仿真结果 2.3 结论 3 总结 前言 模型预测控制是无人驾驶中较为热门的控制算法&#xff0c;但是对于悬架等这类系统的控制同样适用。 我们知道模型预测控制主要可以划分为三个部分&#xff1a; …...

Word处理控件Aspose.Words功能演示:使用 Java 拆分 MS Word 文档

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c;API支持所有流行的Word处理文件…...

图扑数字孪生智慧机场,助推民航“四型机场“建设

前言 民航局印发的《智慧民航建设路线图》文件中&#xff0c;明确提出智慧机场是智慧民航的四个核心抓手之一。并从机场全域协同运行、作业与服务智能化、智慧建造与运维方面&#xff0c;为智慧机场的发展绘制了清晰的蓝图。 效果展示 图扑软件应用自主研发核心产品 HT for …...

内网安装管家婆软件如何实现外网访问?内网穿透的几种方案教程

管家婆软件从网络架构上分两种版本&#xff1a;web&#xff08;浏览器http端口&#xff09;访问的版本和客户端&#xff08;211固定端口sqlserver数据库&#xff09;访问的版本。公司库管经常用仓库登录管家婆&#xff0c;一旦需要在公司外部登陆访问管家婆客户端&#xff0c;就…...

CCNP350-401学习笔记(1-50题)

1、Which function does a fabric edge node perform in an SD-Access deployment?A. Connects endpoints to the fabric and forwards their traffic. B. Encapsulates end-user data traffic into LISP. C. Connects the SD-Access fabric to another fabric or external La…...

基于微信小程序的新冠肺炎服务预约小程序

文末联系获取源码 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏览器…...

网站项目部署在k8s案例与Jenkins自动化发布项目(CI/CD)

在K8s平台部署项目流程 在K8s平台部署Java网站项目 制作镜像流程 第一步&#xff1a;制作镜像 使用镜像仓库&#xff08;私有仓库、公共仓库&#xff09;&#xff1a; 1、配置可信任&#xff08;如果仓库是HTTPS访问不用配置&#xff09; # vi /etc/docker/daemon.json { "…...

网络原理 (1)

网络原理 文章目录1. 前言&#xff1a; 2. 应用层2.1 XML2.2 json2.3 protobuffer3. 传输层3.1 UDP3.1 TCP4. TCP 内部的工作机制 &#xff08;重点&#xff09;1. 确认应答 2.超时重传3. 连接管理3.1 建立联系 &#xff1a;三次握手3.2 断开连接 : 四次挥手4. 滑动窗口5. 流量…...

LeetCode-1139. 最大的以 1 为边界的正方形【前缀和,矩阵】

LeetCode-1139. 最大的以 1 为边界的正方形【前缀和&#xff0c;矩阵】题目描述&#xff1a;解题思路一&#xff1a;前缀和。前缀和来记录边长。解题思路二&#xff1a;0解题思路三&#xff1a;0题目描述&#xff1a; 给你一个由若干 0 和 1 组成的二维网格 grid&#xff0c;请…...

windows10/11,傻瓜式安装pytorch(gpu),在虚拟环境anaconda

安装anaconda地址 &#xff1a;Anaconda | The Worlds Most Popular Data Science Platform安装选项全默认点击next就行。查看支持cuda版本cmd命令行输入nvidia-smi。下图右上角显示11.6为支持的cuda版本。要是显示没有nvidia-smi命令。得安装nvidia驱动&#xff0c;一般情况都…...

Revit导出PDF格式图纸流程及“批量导出图纸”

一、Revit导出PDF格式图纸流程 1、点击左上方“应用程序菜单”即“R”图标&#xff0c;进择“打印”选项。 2、在弹出的对话框中&#xff0c;需要设置图纸“打印范围”&#xff0c;选择“所选的视图/图纸选项”&#xff0c;点击“选择”&#xff0c;按钮&#xff0c;选择我们需…...

【自学Linux】 Linux文件目录结构

Linux文件目录结构 Linux文件目录结构教程 在 Linux 中&#xff0c;有一个很经典的说法&#xff0c;叫做一切皆文件&#xff0c;因此&#xff0c;我们在系统学习 Linux 之前&#xff0c;首先要了解 Linux 的文件目录结构。Linux 主要的目录有三大类&#xff0c;即根目录(/)&a…...

如何让APP在Google Play中成为特色

Google Play覆盖了 190 多个地区&#xff0c;数十亿的用户&#xff0c;所以开发者都会希望APP在应用商店中获得推荐位。 Google Play 上的精选热门应用类型&#xff1a;热门游戏或应用&#xff0c;畅销应用&#xff0c;安装量增长的应用&#xff0c;产生最多收入的应用。 那么…...

【C++】cin的处理过程

使用cin进行输入时&#xff0c;程序将输入视为一系列的字节&#xff0c;其中每个字节都被解释为字符编码。不管目标数据 类型是什么&#xff0c;输入一开始都是字符数据——文本数据。然后&#xff0c;cin对象负责将文本转换为其他类型。 为说明这是如何完成的&#xff0c;来看…...

读取Sentinel和Landsat 压缩包数据,直接进行波段重组、影像裁剪或者匀色镶嵌处理

波段重组在软件中查找&#xff1a;菜单栏-》影像基本处理-》波段处理-》波段重组&#xff0c;弹出如下对话框&#xff1a;根据对话框中的提示&#xff0c;输入需要处理的数据。注意&#xff1a;1、输入数据添加之后&#xff0c;需要点击其中任意一条数据&#xff0c;获取数据波…...

Yakit Web Fuzzer 终极能力强化:热加载 Fuzz

Background 在 HTB&#xff1a;BountyHunter 中&#xff0c;我们发现 Web Fuzzer 在使用中可以 “更强”&#xff0c;我们需要编写 Yak 脚本的事情&#xff0c;如果可以经过某些 Web Fuzzer 的优化&#xff0c;可以达到同样的效果。 在一个标签中&#xff0c;我们实现{{base6…...

Qt新手入门指南 - 如何创建模型/视图(三)

每个UI开发人员都应该了解ModelView编程&#xff0c;本教程的目标是为大家提供一个简单易懂的介绍。Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff…...

【Spring】手动实现简易AOP和IOC

前言 XML&#xff1a;通过Dom4j对XML进行解析和验证。 IOC&#xff1a;通过获取要创建对象的Class类型、构造函数后&#xff0c;通过反射来实现。 AOP&#xff1a;通过使用JDK动态代理和Cglib动态代理实现。 一、解析XML 1.1、解析bean标签 /*** 解析bean标签* param xmlBean…...

微信做自己网站/品牌营销咨询公司

Windows下安装配置Redis数据库 Redis是有名的NoSql数据库&#xff0c;一般Linux都会默认支持。但在Windows环境中&#xff0c;可能需要手动安装设置才能有效使用。这里就简单介绍一下Windows下Redis服务的安装方法&#xff0c;希望能够帮到你。 1、要安装Redis&#xff0c;首…...

成都的网站建设开发公司哪家好/如何注册网站平台

防伪码&#xff1a;老骥伏枥&#xff0c;志在千里。7.1 grep过滤来自一个文件或标准输入匹配模式内容。除了 grep 外&#xff0c;还有 egrep、fgrep。egrep 是 grep 的扩展&#xff0c;相当于 grep -E。fgrep 相当于 grep -f&#xff0c;用的少。Usage: grep [OPTION]... PATTE…...

网络服务费会计分录/国外网站seo免费

和删除标记内部有些相似&#xff0c;但目的不同。命令如下&#xff1a; dt[标记] 会删除所有光标和标记之间的内容&#xff08;保持标记不动&#xff09;&#xff0c;如果在同一行有这个标记的话。例如 dt. 会删除至句子的末尾&#xff0c;但保持 ‘.’ 不动。 转载于:https://…...

网站开始怎么做的/怎么建立企业网站

前言 前面文章介绍了【gophish搭建教程及演示】&#xff0c;今天这篇文章将详细的介绍gophish的使用&#xff0c;包括如何配置邮箱发送、配置钓鱼邮件模板、伪造钓鱼界面、建立用户和用户组等&#xff1b;废话不多少&#xff0c;直接开始吧&#xff1b; 注意&#xff1a;本篇文…...

wordpress淘宝客模板修改教程/谷歌广告优化

SQL分类 DDL&#xff08;Data Definition Languages&#xff09; 数据定义语言&#xff0c;这些语句定义了不同的数据字段、数据库、表、列、索引等数据。 常用的语句关键字主要包括 create(添加)&#xff0c;drop&#xff08;删除&#xff09;&#xff0c;alter&#xff08;修…...

广西网站建设培训/无锡网站seo顾问

随着移动互联网的高速发展&#xff0c;移动端IM以移动网络作为物理通信载体早已深入人心&#xff0c;这其中的成功者就包括微信、手机QQ、支付宝&#xff08;从即时通讯产品的角度来看&#xff0c;支付宝已经算的上是半个IM了&#xff09;等等&#xff0c;也为移动端即时通讯开…...