C++ 第二弹封装-类和对象
目录
1.类的引入
2.类的定义方式
3.访问权限
4.封装
5.类也是作用域
6.类的实例化
7.如何求一个类的大小
8.this指针
9.默认成员函数
10.构造函数
11.析构函数
12.拷贝构造函数
13.赋值运算符重载
14.const的类成员
15初始化列表
16.static的类成员
17.友元
18.内部类
1.类的引入
C语言结构体中只能定义变量,但是C++可以在结构体中定义变量和定义函数
2.类的定义方式
Class关键字加 类名 Class 类名 {}; 在C++中class和struct都可以定义类 第一种方式 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。 第二种方式 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数前需要加类名
3.访问权限
成员能否在类外或者子类中被使用 private 私有的 protected 保护的 public 公有的 这里struct定义类就是公有的 而class定义的类就是私有的 访问限定符只在编译时有用
4.封装
4.1什么是封装?
将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。说人话就是你给一个实现某一功能的类进行一次封装以后再需要实现某种功能的时候直接调用这个类就行了
4.2C++是如何进行封装的?
通过类将数据与操作数据的方式结合在一起,用来描述对象,更符合人的认知,搭配上访问权限。
5.类也是作用域
5.1为什么说类也是作用域呢?
成员函数在类外定义时,函数名字前需要添加类名::成员函数名字
5.2谈谈作用域
1.函数体内部的局部作用域
在函数内部就是局部作用域,这个代码的名字只在函数的内部起作用,调用函数时创建函数作用域,函数执行完毕之后,函数作用域销毁,每调用一次函数就会创建一个新的函数作用域,它们之间是相互独立的。
2.全局作用域
全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。
3.命名空间
一个命名空间确定一个命名空间作用域,凡是在该命名空间之内声明的,不属于前面所描述的各个作用域的标识符,都属于该命名空间的作用域。在命名空间内部可以直接引用当前命名空间的标识符。作用域关系: 命名空间作用域>类作用域>局部作用域
4.类域
简单来说,类域就是定义在类里面的变量;类方法是定义在类里面的函数。
6.类的实例化
6.1什么是类的实例化?
简单理解,可以把我们生活中的一些模具当作类,那么根据模具制作出来的具体的事物就是对象,模具定义了这类对象的属性和行为,创建对象的过程就叫做类的实例化。
6.2声明、初始化、实例化的区别
声明:只生成对象不赋值的过程 初始化:是给对象赋值的过程 实例化:是使用new给对象分配内存的过程
6.3类和对象的区分
1.类是用来描述对象的
2.对象是真实存在的,里面会放数据,对象类似于用内置类型定义出来的变量,类是一个静态的概念,类本身不携带任何数据。当没有为类创建任何对象时,类本身不存在于内存空间中。
3.类是一个抽象的概念,它不存在于现实中的时间/空间里,类只是为所有的对象定义了抽象的属性与行为。就好像“Person(人)”这个类,它虽然可以包含很多个体,但它本身不存在于现实世界上。
4.对象是一个动态的概念。每一个对象都存在着有别于其它对象的属于自己的独特的属性和行为。对象的属性可以随着它自己的行为而发生改变。
7.如何求一个类的大小
7.1对象模型
有两个概念可以解释C++对象模型: 语言中直接支持面向对象程序设计的部分。 对于各种支持的底层实现机制。比如之后的虚表指针,多继承我们使用对象模型可以便于理解。
7.2对象中包含什么?
对象中只存储非静态的成员变量,成员函数没有存储在对象中,存储在代码段。
7.3计算类(对象)大小
将非静态的成员变量相加;注意内存对齐。注意求类对象的大小和求结构体的大小是类似的。
为什么要内存对齐?
字节对齐主要是为了提高内存的访问效率,比如intel 32位cpu,每个总线周期都是从偶地址开始读取32位的内存数据,如果数据存放地址不是从偶数开始,则可能出现需要两个总线周期才能读取到想要的数据,因此需要在内存中存放数据时进行对齐。
内存对齐规则:
7.4空类
7.4.1什么是空类?
空类是指这个类不带任何数据,即类中没有非静态(non-static)数据成员变量,没有虚函数(virtual function),也没有虚基类(virtual base class)。
7.4.2那空类有没有成员函数呢?
如果你只是声明一个空类,不做任何事情的话,编译器会自动为你生成一个默认构造函数、一个拷贝默认构造函数、一个默认拷贝赋值操作符、一个默认析构函数、取址运算符和一个取址运算符const。这些函数只有在第一次被调用时,才会别编译器创建。所有这些函数都是inline和public的。
7.4.3空类的大小?
空类的大小至少为1字节但是由于内存对齐编译器可能还会增加一些字节。
7.5结构体内存对齐
7.5.1什么是结构体内存对齐?
元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从结构体存储的首地址开始,每个元素放置到内存中时,它都会认为内存是按照自己的大小(通常它为4或8)来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始,这就是所谓的内存对齐。
7.5.2为什么要对齐?
平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。
假如没有内存对齐机制,数据可以任意存放,现在一个int变量存放在从地址1开始的联系四个字节地址中,该处理器去取数据时,要先从0地址开始读取第一个4字节块,剔除不想要的字节(0地址),然后从地址4开始读取下一个4字节块,同样剔除不要的数据(5,6,7地址),最后留下的两块数据合并放入寄存器。这需要做很多工作。
现在有了内存对齐的,int类型数据只能存放在按照对齐规则的内存中,比如说0地址开始的内存。那么现在该处理器在取数据时一次性就能将数据读出来了,而且不需要做额外的操作,提高了效率。
7.5.3怎么求结构体的大小?
1、结构体变量的首地址,必须是结构体变量中的“最大基本数据类型成员所占字节数”的整数倍(对齐)
2、结构体变量中的每个成员相对于结构体首地址的偏移量,都是该成员基本数据类型所占字节的整数倍。(对齐)
3、结构体变量的总大小,为结构体变量中“最大基本数据类型成员所占字节数”的整数倍(补齐)
7.5.4如果指定结构体按照特定的字节数对齐?
手动设置字节数对齐的方式有两种:代码里添加预编译标识# pragma pack():使用__attribute__:
7.5.6结构体可以按照任意字节对齐吗?
不可以。
7.5.7大小端概念
对于一个由2个字节组成的16位整数,在内存中存储这两个字节有两种方法:一种是将低序字节存储在起始地址,这称为小端(little-endian)字节序;另一种方法是将高序字节存储在起始地址,这称为大端(big-endian)字节序。大端是高字节存放到内存的低地址,小端是高字节存放到内存的高地址。
7.5.8如何对大小端来进行测试?
最简单的方法就是定义一个8字节的地址 强转成char 输出 看看输出的是八字节地址的前两位还是后两位 如果是前两位就是大端模式,如果是后两位就是小端模式。
7.5.9那些场景下需要考虑大小端的问题?
比如通讯发报文,如果报文数据是大端模式但是接收他的缓冲区是小端模式,如果不进行数据转换直接发送,此时就会发生灾难性的错误。
7.5.10那么我们如何进行大小端转换呢?
可以翻转字符串 位操作
8.this指针
8.1什么是this指针?
C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),里面放置的是当前对象的地址,在函数体中所有“成员变量” 的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。在类的非静态成员函数中返回对象本身,可使用return *this。
8.2this指针的特性
8.3this指针存储在哪里?
其实编译器在生成程序时加入了获取对象首地址的相关代码。并把获取的首地址存放在了寄存器ECX中(VC++编译器是放在ECX中,其它编译器有可能不同)。也就是成员函数的其它参数正常都是存放在栈中。而this指针参数则是存放在寄存器中。
8.4this指针可以为空吗?
可以是空
当通过对象调用非静态成员函数时候,this指针一定不会为空
当通过指针调用时,this可能会为空 this为空,但是本次调用的成员函数的内部没有访问任何成员变量,则代码一定不会崩溃 this为空,但是本次调用的成员函数内部访问了非静态的成员变量,则代码一定会崩溃--因为:在成员函数中,所有非静态的成员的成员变量都是通过this指针访问的
两种理解:
1.this指针本身就是一个参数 参数当然可以传空
2.静态绑定可以为空,动态绑定不能为空
8.5类的编译过程
1.识别类名 2.识别类中成员变量 3.识别类中成员函数,并对成员函数进行修改
8.5.1怎么对成员函数进行修改?
1.还原this指针 2.成员变量访问前加this
9.默认成员
9.1在类中,用户没有显式实现,则编译器会生成一份成员函数
语法说没有定义则生成,实际情况却不一定,因为编译器要考虑程序运行效率问题,因此对于没有意义的默认成员函数则不生成,什么情况下会生成,取决于编译器是否需要,如果编译器感觉到自己需要则生成,自己不需要则不生成,
9.2默认成员函数有哪些?
9.2.1C++98:构造函数,拷贝构造函数,复制运算符重载,析构函数,T* operator&*(),const T* operator&*()const。
9.2.2C++11:移动构造: T(T&&),移动赋值:T& operator=(T&&)
10.构造函数
10.1什么是构造函数
构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。
10.2构造函数的特性
10.3构造函数的使用场景
创建类类型对象时,由编译器自动调用,给对象设置初始值。
10.4关于编译器生成的默认构造函数
A类中包含B类的对象,B类定义了默认构造函数(无参构造函数 或 全缺省构造函数)如果被包含类对象的类中没有定义默认构造函数,则编译器不会生成默认构造函数
基类带有默认构造函数(无参构造函数 或 全缺省构造函数),创建派生类对象时(类A是基类,类B是派生类,类B继承自类A,类A中带有默认构造函数)。
类中含有虚函数,编译器一定会给该类生成默认的构造函数。
在虚拟继承中,编译器一定会给子类生成构造函数。
11.析构函数
11.1什么是析构函数
11.2析构函数的特性
11.3析构函数的使用场景
在对象被销毁时由编译器自动调用,作用:将对象中的资源清理干净
栈上的对象,在函数结束时候被销毁会自动调用析构函数
堆上的对象,delete 或者 delete[]
11.4关于编译器生成的默认析构函数
类中如果没有涉及到资源管理时,析构函数是否给出无所谓;但是如果涉及到资源管理,用户必须要显式给出析构函数,在析构函数中清理对象的资源。
12.拷贝构造函数
12.1什么是拷贝构造函数
12.2拷贝构造函数的特性
12.3拷贝构造函数的使用场景
当使用类类型对象创建新对象时候1.使用已存在对象创建新对象 2.函数参数类型为类类型对象 3.函数返回值类型为类类型对象 以值的方式传参 以值的方式返回
12.4关于编译器生成的默认拷贝构造函数
浅拷贝 如果发生浅拷贝多个对象用一个地址空间就会发生写时拷贝
当类中涉及到资源管理时,必须要自己实现拷贝构造函数 深拷贝
13.赋值运算符重载
13.1运算符重载
13.1.1什么是运算符重载
13.1.2语法格式
返回值类型 operator运算符(参数列表){...}
13.1.3注意事项
13.2赋值运算符重载
13.2.1语法格式
Date& operator=(const Date& d)
{if(this != &d){_year = d._year;_month = d._month;_day = d._day;}return *this;
}
1.为什么要加&
2.为什么要加const
加const是为了能让参数也可以接收右值,也就是说假如不加const,实参如果是.const类型的,就调用不了(权限放大),const引用传参,这实际上是一个万能引用,能接收左值和右值
3.为什么要有返回值
为了支持连续赋值
4.为什么要以引用的方式返回
引用返回值,是为了实现连续赋值,同时传引用返回减少调用拷贝构造。一定程度上提高性能。
5.为什么要检测this!=&d
检测是否自己给自己赋值
6.为什么要返回*this
13.2.2关于编译器生成的默认赋值运算符重载
如果类设计到资源管理时,需要用户显式实现 ,深拷贝
14.const的类成员
在C语言中:const只能修饰变量,表明该变量是一个不可以被修改的变量
在C++中,修饰普通变量:已经是常量,而且具有宏替换效果,发生在编译时
在C++中,修饰类成员,成员变量,该成员变量必须在初始化列表的位置进行初始化---类的构造函数必须给出;成员函数,实际是在修饰this,在该成员函数中不能对非静态成员变量进行修改,如果一定要修改,则该成员变量必须被mutable修饰。
15初始化列表
15.1在哪能用到 他的作用是什么?
是构造函数||拷贝构造函数||移动构造才有的
作用是对类中的非静态成员变量进行初始化,因为成员函数体内部是赋值。
15.2语法格式
16.static的类成员
16.1什么是static类成员?
本质:该静态成员函数没有this指针。内部不能访问非静态成员变量,内部不能调用非静态成员函数,不能是const成员函数,不能是虚函数。
如果类的成员函数想作为回调函数来使用,一般情况下只能将它定义为静态成员才行。
普通成员函数可以访问所有成员变量,而静态成员函数只能访问静态成员变量。
调用一个对象的非静态成员函数时,系统会把当前对象的起始地址赋给 this 指针。而静态成员函数并不属于某一对象,它与任何对象都无关,因此静态成员函数没有 this 指针。
17.友元
17.1什么是友元
友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。 友元不是成员函数,但是它可以访问类中的私有成员。 友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。
17.2友元的分类
17.2.1友元函数
声明格式
friend 类型 函数名(形参);
friend class 类名;
17.3注意事项
利用 friend 修饰符,可以让一些普通函数 或 另一个类的成员函数 直接对某个类的保护成员和私有成员进行操作,提高了程序的运行效率;同时避免把类的成员都声明为public,最大限度地保护数据成员的安全。但是,即使是最大限度地保护数据成员,友元也破坏了类的封装性。如果将类的封装比喻成一堵墙的话,那么友元机制就像墙上开了一个门。所以使用友元时一定要慎重。
18.内部类
18.1什么是内部类
18.2语法格式
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}};
};
18.3内部类特性
19.匿名对象
19.1什么是匿名对象?
匿名对象可以理解为是一个临时对象,一般系统自动生成的,如你的函数返回一个对象,这个对象在返回时会生成一个临时对象。
19.2注意事项
如果生成的匿名对象在外部有对象等待被其实例化,此匿名对象的生命周期就变成了外部对象的生命周期;如果生成的匿名对象在外面没有对象等待被其实例化,此匿名对象将会生成之后,立马被析构。
20.拷贝对象时的一些编译器优化
连续构造+拷贝构造->优化为直接构造
连续构造+拷贝构造->优化为一个构造
对象返回总结:接收返回值对象,尽量拷贝构造方式接收,不要赋值接收,函数中返回对象时,尽量返回匿名对象
函数传参总结:尽量使用const
+ &
传参,减少拷贝的同时防止权限放大
21.再次理解类和对象
相关文章:
C++ 第二弹封装-类和对象
目录 1.类的引入 2.类的定义方式 3.访问权限 4.封装 5.类也是作用域 6.类的实例化 7.如何求一个类的大小 8.this指针 9.默认成员函数 10.构造函数 11.析构函数 12.拷贝构造函数 13.赋值运算符重载 14.const的类成员 15初始化列表 16.static的类成员 17.友元 …...
浅析 GeoServer CVE-2023-25157 SQL注入
原创稿件征集 邮箱:eduantvsion.com QQ:3200599554 黑客与极客相关,互联网安全领域里 的热点话题 漏洞、技术相关的调查或分析 稿件通过并发布还能收获 200-800元不等的稿酬 更多详情,点我查看! 简介 GeoServer是一个开…...
1001router6-react
文章目录 1 一级路由2 Navigate3 NavLink 自定义高亮样式4 useRoutes()5 嵌套路由6 路由传参6.1 传递params参数6.2 传递search参数6.3 传递state参数 7 编程式导航7.1 路由跳转7.2 前进、后退 8 钩子函数8.1 useInRouterContext()8.2 useNavigationType()8.3 useOutlet()8.4 u…...
前端Vue自定义支付密码输入键盘Keyboard和支付设置输入框Input
前端Vue自定义支付密码输入键盘Keyboard和支付设置输入框Input, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id13166 效果图如下: # cc-defineKeyboard #### 使用方法 使用方法 <!-- ref:唯一ref pas…...
VB+ACCESS超市管理系统设计(源代码+系统)
超市管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。经过分析,我们使用 MICROSOFT公司的 VISUAL BASI…...
【机器学习】十大算法之一 “神经网络”
作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…...
【MarkDown】CSDN Markdown之流程图graphflowchart详解
基本语法 flowchart/graph 流程图(Flowcharts/Graphs)是由节点 (几何形状) 和连接线 (箭头或线条)组成的. Mermaid代码定义了节点和连线的编码方式,并支持不同的箭头类型、多向箭头以及子图之间的任意链接。 警告 如果在流程图的节点使用e…...
Git下:Git命令使用-详细解读
目录 一、Git 安装 二、Git 配置 三、Git 工作流程 四、Git 工作区、暂存区和版本库 五、常用 Git 命令清单 1. 创建仓库 2. 增加/删除文件 3. 代码提交 4. 分支管理 5. 标签 6. 查看历史提交 7. 远程仓库同步 8. 撤销操作 六、Git 常用命令速查表 七、Git 电子…...
一条SQL语句的前世今生
文章目录 MySQL 基础架构分析语句分析查询语句更新语句 总结 本篇文章会分析下一个 SQL 语句在 MySQL 中的执行流程,包括 SQL 的查询在 MySQL 内部会怎么流转,SQL 语句的更新是怎么完成的。 MySQL 基础架构分析 下图是 MySQL 的一个简要架构图ÿ…...
各种架构比较
架构特点适用领域x86- 市场份额大,广泛支持和应用<br>- 成熟稳定,软件生态丰富<br>- 相对较低的功耗<br>- 适用于桌面、服务器和嵌入式系统等桌面应用、服务器、嵌入式系统x86-64- 支持 64 位操作系统和应用程序<br>- 更大的内存…...
scapy定制数据包探测主机
kali 输入scapy 进入界面 scapy定制ARP协议 输入ARP().display()显示ARP包的详细信息 输入sr1(ARP(pdst"192.168.133.2")),向网关发送arp请求数据包 scapy定制PING包 输入IP().display()显示IP包的详细信息 输入ICMP().display()显示ICMP包的详细信息…...
【Java】Java核心要点总结70
文章目录 1. volatile 如何保证变量的可⻅性?2. volatile 可以保证原⼦性么?3. synchronized 关键字4. synchronized 和 volatile 的区别5. synchronized 和 ReentrantLock 的区别 1. volatile 如何保证变量的可⻅性? 在Java中,使…...
如何把一个 Git 仓库的分支加入另一个无关的 Git 仓库
文章目录 笔者需要将两个无关的 Git 仓库合并,也就是把一个 Git 仓库的分支加入另一个无关的 Git 仓库。笔者琢磨了一下之后就实现了。方法如下。 笔者的运行环境: git version 2.37.0.windows.1 TortoiseGit 2.11.0.0 IntelliJ IDEA 2023.1.1 (Ultima…...
深蓝学院C++基础与深度解析笔记 第 4 章 表达式
第 4 章 表达式 一、表达式基础 A、表达式: 由一到多个操作数组成,可以求值并 ( 通常会 ) 返回求值结果: #include <iostream> int main(){int x;x 3; }最基本的表达式:变量、字面值通常来说,表达式会包含操作符(运算符…...
CLION开发STM32之W5500系列(一)
开篇说明 本系列适用于需要使单片机通过网口进行通信的开发。针对的是刚入门的同学们,也是个人的经验分享。本次使用到的芯片为stm32f103vet6(其他的也可以)本次使用的网口模块为W5500,其网关有示例程序均可以参考.本次使用Clion+OpenOCD+ARM-GCC 进行开发、烧录、编译.建议熟…...
Web3通过ganache运行起一个本地虚拟区块链
通过文章 Web3开发准备工作 手把手带你创建自己的 MetaMask 账号大家简单的对网络 有了个比较模糊的概念 不同的网络连接这不同的区块链 那么 我们就要搞清楚 我们切换不同的网络 我们的数字资产是不一样的 在这里 我们需要先安装一个插件工具 ganache 我们先在本地创建一个文…...
01 背包问题解析与代码 python 实现
01 背包问题解析与代码 问题定义 给定一堆具有不同重量 { w 1 , w 2 , ⋯ , w n } \{ w_1,w_2, \cdots,w_n \} {w1,w2,⋯,wn}与价值 { v 1 , v 2 , ⋯ , v n } \{ v_1,v_2, \cdots,v_n \} {v1,v2,⋯,vn}的背包(knapsack),在总重…...
Vue实现前端视频展示列表及特征提取、笔记、删除、文件夹组织功能
Vue实现前端视频展示列表及特征提取、笔记、删除、文件夹组织功能 在前端展示上传的视频列表时,我们可以使用Element-UI中的Card组件来实现。同时,我们还可以添加一些功能,如缓存播放的视频、选择视频文本特征提取处理、写笔记、删除视频、组…...
多传感器时频信号处理:多通道非平稳数据的分析工具(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
数据结构算法 -分而治之算法
引言 坤坤是一个养鸡场的员工,他非常热爱他的工作,并且总是努力提高他的专业技能。有一天,养鸡场接到了一项任务:在短时间内处理一批大量的鸡。 这批鸡数量非常大,比普通的数量要多得多,坤坤意识到他们需…...
涉密信息系统口令管理制度
第一条 口令是涉密信息系统身份认证的基本防护措施,为保障 涉密信息系统的安全运行,规范网络用户及系统口令,特制定本制度。 第二条 具有口令功能的计算机、网络设备等计算机信息系统设 备,必须使用口令对用户的身份进行验证…...
UML与流程图
UML简介 UML(Unified Modeling Language,统一建模语言)是一种用于软件系统分析与设计的标准化建模语言。它提供了一套丰富的图形符号和规则,可用于描述系统的结构、行为和交互,帮助开发人员、设计师和利益相关者之间进…...
音视频开发Level0: 入门级20~25k的工作
今天给大家分享一个音视频开发领域,入门级别的工作,要求不高。 主要做什么呢,行车记录仪,运动相机,各种拍摄器材包括医疗领域的喉镜啊,等等。 这种产品,招人的公司深圳最多,因为深…...
Git第一章、Git的原理与使用
目录 一、Git安装 1.1Linux Centos安装 二、Git基本操作 2.1创建 Git 本地仓库 2.2配置Git 三、认识工作区、暂存区、版本库 3.1添加文件(场景一) 3.2修改文件 3.3版本回退 四、撤销修改 4.1情况一:对于工作区的代码,还…...
软件开发流程
目录 软件软件开发流程的演变 瀑布模型敏捷模型 XPSCRUMDevOps 1.软件 与计算机系统操作有关的计算机程序、可能有的文件、文档及数据。 软件可以分为两种主要类型: 独立软件:独立软件是一种完整的应用程序,可以直接在计算机或移动设备上…...
编程语言的优劣评选标准与未来发展趋势——探索最佳编程语言选择
编程语言的优劣评选标准与未来发展趋势——探索最佳编程语言选择 评判标准不同编程语言的优点与缺点分析对编程语言未来发展的猜测和未来趋势 💕 💕 💕 博主个人主页: 汴京城下君–野生程序员💕 💕 &#x…...
axios 发送请求请求头信息不包含Cookie信息
问题 axios 发送请求请求头信息不包含Cookie信息 详细问题 使用VueSpringBoot进行项目开发,axios进行网络请求,发送请求,请求头信息不包含Cookie信息 具体如下 实际效果 预期效果 解决方案 作用域 Vue项目全局配置 打开Vue项目的入口…...
正则表达式笔记
/你的正则表达式写在这里/ 1? 1出现0次或1次 1* 1出现0次或多次 1 1出现1次或多次 1{2} 1出现了2次 1{2,3} 1出现了2到3次 1{2,} 1出现了2次及以上 (5555){1} 5555出现了1次 (dog|cat) dog或者cat [a-zA-Z] a…...
数据结构链表(C语言实现)
绪论 机遇对于有准备的头脑有特别的亲和力。本章将讲写到链表其中主要将写到单链表和带头双向循环链表的如何实现。 话不多说安全带系好,发车啦(建议电脑观看)。 附:红色,部分为重点部分;蓝颜色为需要记忆的…...
Springboot实现接口传输加解密
前言 先给大家看下效果,原本我们的请求是这样子的 加密后的数据传输是这样子的 加解密步骤: 1.前端请求前进行加密,然后发送到后端 2.后端收到请求后解密 3.后端返回数据前进行加密 4.前端拿到加密串后,解密数据 加解密算法&…...
怎么做网站维护/百度推广多少钱一天
转自:http://www.cnblogs.com/shangdawei/p/4760933.html 彩色阴极射线管的剖面图: 1. 电子QIANG Three Electron guns (for red, green, and blue phosphor dots)2. 电子束 Electron beams3. 聚焦线圈 Focusing coils4. 偏向线圈 Deflection coils5. 阳极接点 Anod…...
wordpress可以上传文件吗/汕头网站优化
目录 Python中一切皆对象 类的定义 类对象及其类属性 类实例化,和slef 类的特殊属性及实例变量、 类变量 类方法和静态方法 装饰一个类 访问控制:私有(Private)属性 保护变量 私有方法 私有成员的总结 补丁 属性装…...
网上商城系统软件/seo快速排名百度首页
指定用户名,拿最小session,实现和用户ui交互。 这样,搞windows的自动化部署,就可以向前一大步啦。 比以前用psexec要用户名密码,指定session要先进多啦。 安全保密性也提高了。。 #include <windows.h> #include <stdio.…...
沈阳开发网站公司/域名购买平台
1、场景:当一个查询需要多个排序规则时怎么做? 2、desc 降序,asc 升序,默认升序 3、select * from t_test oreder by createtime ,cuorder desc 查询结果:首先时间排序优先,默认升序,然后按照cu…...
宝塔wordpress搭建/百度知道免费提问
手机服务器超时 内容精选换一换本章节介绍如何通过控制台重启服务器。重启服务器时,可以批量更换云手机镜像。重启服务器会造成云手机断开连接,请提前保存数据。登录管理控制台。在管理控制台左上角,选择待操作服务器所在的区域。在服务列表页…...
标签式网站内容管理/济南优化网络营销
本文译自:Pngquant – A Command-line Utility To Compress PNG Images On Linux译者:EmuLab校对:OpenView原文及本文遵循:[CC -BY-NC协议]Pngquant是一个自由、开源的跨平台命令行PNG无损压缩工具。其基于一个由C99编写的可移植l…...