虚析构和纯虚析构函数(我是新手,问C++的析构函数,或者虚析构函数,不知它是什么意思呀)

:暂无数据 2026-09-24 02:10:02 :3

虚析构和纯虚析构函数(我是新手,问C++的析构函数,或者虚析构函数,不知它是什么意思呀)

其实虚析构和纯虚析构函数的问题并不复杂,但是又很多的朋友都不太了解我是新手,问C++的析构函数,或者虚析构函数,不知它是什么意思呀,因此呢,今天小编就来为大家分享虚析构和纯虚析构函数的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

我是新手,问C++的析构函数,或者虚析构函数,不知它是什么意思呀

对的,析构函数前面有一个~,设计成这样主要是为了区别构造函数吧,如果没有这个~,那岂不是和构造函数一样了。析构函数是在对象被销毁的时候被调用的,主要做一些清理的工作,要不要实现就看你的类里面有没有东西需要清理的。
class
MyClass
{
public:
MyClass();
~MyClass();
private:
int*
m_p;
};
MyClass::MyClass()
{
m_p
=
new
int(1);
}
MyClass::~MyClass()
{
delete
m_p;
//释放动态分配的内存
m_p
=
NULL;
}
void
test()
{
MyClass
*pClass
=
new
MyClass;
//构造函数被调用
delete
pClass;
//这里析构函数就被调用了
pClass
=
NULL;
}
其实你也就可以把析构函数看成一个普通函数,只是他是在对象被销毁的时候被调用的,然后名字前面加个~,同时没有返回值.
为什么加的是~这个符号,那是因为C++设计者认为析构函数是与构造函数相对的,所以就加了个~符号,表示取反的意思。至于里面有没有东西,那就要看你的类里有没有东西需要在对象被销毁时清理,比如说有动态分配的内存,那就需要在析构函数里面delete它了。

C++中,什么是纯虚函数,什么是抽象类,什么是虚析构函数

纯虚函数:当一个类被定义后,有一些函数往往还不能确定,这个时候为了访止乱写一个制成错误,就要用纯虚函数。没有函数体的函数。
抽象类:一个类中如果存在了纯虚函数,那么这个类只是为了描述一个大的概念,世界上不会存在真的它。
一个小例子,你不知道水果是要切开吃还是真接吃。世界上也没有水果这种东西。
但是桔子是有的,可以剥开吃,你也可以买到一个。
放在程序中的用处是:你可以用一个含有代码的函数去调用一个纯虚函数,因为它是一定会存在的。
·纯虚函数是一个模糊的类内部的约定,它需要用子类来实现。
虚析构函数:在子类中建了一些对象一般是不能被父类预知的,所以常常要在子类中建立新的析构函数覆盖父类的析构函数。

虚析构函数的问题

www.bysj580.cn
QQ:820332620
简单的说。意思就是说:如果你不声明为virtual的话,而你又声明为mml*类型指针,那么,delete 的时候,只能delete掉mml类型所拥有的对象部分,而你实际new 出来的对象就delete不掉了。这样就会出现对象切割。
如果声明为virtual的,就可以认识到是个nnl类型。

虚析构函数的介绍

虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象。如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个虚函数表,使得对象的体积翻倍,还有可能降低其可移植性。所以基本的一条是:无故的声明虚析构函数和永远不去声明一样是错误的。实际上,很多人这样总结:当且仅当类里包含至少一个虚函数的时候才去声明虚析构函数。抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。

详细的解释下类的封装性,抽象性,继承性和多态性

学妹!其实书上就有,百度也有C++特性:抽象和封装,继承和派生,多态性多态性: 一种事物,多种形态;一个接口,多个方法C+++中指由于继承产生的相关的不同的类,对同一消息作出不同的处理即通过虚函数实现静态多态性:函数重载,运算符重载动态多态性:虚函数,通过基类的指针或引用实现 虚析构函数 纯虚函数 虚函数抽象类:包含一个或多个纯虚函数的类,不可实例化虚基类:多重继承时使用虚拟继承以防止继承同一基类的多份数据1.抽象性   把众多的事物进行归纳、分类是人们在认识客观世界时经常采用的思维方法,“物以类聚,人以群分”就是分类的意思,分类所依据的原则是抽象。抽象(Abstract)就是忽略事物中与当前目标无关的非本质特征,更充分地注意与当前目标有关的本质特征。从而找出事物的共性,并把具有共性的事物划为一类,得到一个抽象的概念。例如,在设计一个学生成绩管理系统的过程中,考察学生张华这个对象时,就只关心他的班级、学号、成绩等,而忽略他的身高、体重等信息。因此,抽象性是对事物的抽象概括描述,实现了客观世界向计算机世界的转化。将客观事物抽象成对象及类是比较难的过程,也是面向对象方法的第一步。例如,将学生抽象成对象及类的过程如图1-1所示。2.封装性   封装(Encapsulation)就是把对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。图1-1中的学生类也反映了封装性。封装有两个含义:一是把对象的全部属性和行为结合在一起,形成一个不可分割的独立单位。对象的属性值(除了公有的属性值)只能由这个对象的行为来读取和修改;二是尽可能隐蔽对象的内部细节,对外形成一道屏障,与外部的联系只能通过外部接口实现。  封装的信息隐蔽作用反映了事物的相对独立性,可以只关心它对外所提供的接口,即能做什么,而不注意其内部细节,即怎么提供这些服务。例如,用陶瓷封装起来的一块集成电路芯片,其内部电路是不可见的,而且使用者也不关心它的内部结构,只关心芯片引脚的个数、引脚的电气参数及引脚提供的功能,利用这些引脚,使用者将各种不同的芯片连接起来,就能组装成具有一定功能的模块。  封装的结果使对象以外的部分不能随意存取对象的内部属性,从而有效地避免了外部错误对它的影响,大大减小了查错和排错的难度。另一方面,当对象内部进行修改时,由于它只通过少量的外部接口对外提供服务,因此同样减小了内部的修改对外部的影响。同时,如果一味地强调封装,则对象的任何属性都不允许外部直接存取,要增加许多没有其他意义,只负责读或写的行为。这为编程工作增加了负担,增加了运行开销,并且使得程序显得臃肿。为了避免这一点,在语言的具体实现过程中应使对象有不同程度的可见性,进而与客观世界的具体情况相符合。  封装机制将对象的使用者与设计者分开,使用者不必知道对象行为实现的细节,只需要用设计者提供的外部接口让对象去做。封装的结果实际上隐蔽了复杂性,并提供了代码重用性,从而降低了软件开发的难度。3. 继承性   客观事物既有共性,也有特性。如果只考虑事物的共性,而不考虑事物的特性,就不能反映出客观世界中事物之间的层次关系,不能完整地、正确地对客观世界进行抽象描述。运用抽象的原则就是舍弃对象的特性,提取其共性,从而得到适合一个对象集的类。如果在这个类的基础上,再考虑抽象过程中各对象被舍弃的那部分特性,则可形成一个新的类,这个类具有前一个类的全部特征,是前一个类的子集,形成一种层次结构,即继承结构。  继承(Inheritance)是一种联结类与类的层次模型。继承性是指特殊类的对象拥有其一般类的属性和行为。继承意味着“自动地拥有”,即特殊类中不必重新定义已在一般类中定义过的属性和行为,而它却自动地、隐含地拥有其一般类的属性与行为。继承允许和鼓励类的重用,提供了一种明确表述共性的方法。一个特殊类既有自己新定义的属性和行为,又有继承下来的属性和行为。尽管继承下来的属性和行为是隐式的,但无论在概念上还是在实际效果上,都是这个类的属性和行为。当这个特殊类又被它更下层的特殊类继承时,它继承来的和自己定义的属性和行为又被下一层的特殊类继承下去。因此,继承是传递的,体现了大自然中特殊与一般的关系。  在软件开发过程中,继承性实现了软件模块的可重用性、独立性,缩短了开发周期,提高了软件开发的效率,同时使软件易于维护和修改。这是因为要修改或增加某一属性或行为,只需在相应的类中进行改动,而它派生的所有类都自动地、隐含地作了相应的改动。  由此可见,继承是对客观世界的直接反映,通过类的继承,能够实现对问题的深入抽象描述,反映出人类认识问题的发展过程。4.多态性   面向对象设计借鉴了客观世界的多态性,体现在不同的对象收到相同的消息时产生多种不同的行为方式。例如,在一般类“几何图形”中定义了一个行为“绘图”,但并不确定执行时到底画一个什么图形。特殊类“椭圆”和“多边形”都继承了几何图形类的绘图行为,但其功能却不同,一个是要画出一个椭圆,另一个是要画出一个多边形。这样一个绘图的消息发出后,椭圆、多边形等类的对象接收到这个消息后各自执行不同的绘图函数。如图1-3所示,这就是多态性的表现。  具体来说,多态性(Polymorphism)是指类中同一函数名对应多个具有相似功能的不同函数,可以使用相同的调用方式来调用这些具有不同功能的同名函数。  继承性和多态性的结合,可以生成一系列虽类似但独一无二的对象。由于继承性,这些对象共享许多相似的特征;由于多态性,针对相同的消息,不同对象可以有独特的表现方式,实现特性化的设计。  面向对象技术使软件的开发超越了过程式编程,而进入了简化应用程序开发的可重用编程世界。不象旧的编程方式,当程序的体积增长时,程序维护和调试并不变得更复杂。对象技术在两个级别发挥作用:  在数据级别,对象技术可以集成一个机构中的许多不同类型的信息,过去的信息已经不再兼容了。  在程序开发级别,对象技术提供模块化程序构造,这时,程序员在现有对象的基础之上进行开发。对象可以被其他对象再使用,以利用它们的过程,从而消除了当再次需要它们的时候,必须每次都重写这些代码。  由于无需改变或分解整个系统,所以再设计或扩展系统是很容易的。实际上,是放弃或修改这些模块,并且增加新的模块以提供增强的功能。  一个对象是一个完整的数据分组,它包括对数据进行处理的功能。在一个面向对象的环境,对象的数目是数不清的。它们可能包括一个数据库的记录、一个文件、一个物理资源、甚至是一个用户(它是用户的登录帐户)。为了使开发人员使用面向对象编程语言工作,对象是一个自满足模块,它包含数据、以及数据的结构、和处理数据的功能。  对象可以是下面情况的任何之一:  在一个面向对象操作系统中实现一个进程的代码,例如验证安全权限。  程序员和开发人员用于汇编程序的预定义代码模块。  来自一个应用程序的数据块,如一个绘图程序、电子表格或多媒体工具。  在一个数据库中的对象,例如库存条目或顾客。  在一个面向对象的数据库中,对象可以代表跟踪的商务中的实际实体,例如生产的产品、库存、顾客和厂商。相应地,在面向对象的操作系统中,对象也是一些实体,如文件、设备和用户,或构成一个复合文档的实体数据块。在面向对象的环境,首先定义基本的对象,然后围绕这些对象建造系统。  有许多潜在对象,并且它们可以归化到定义不同类型对象的层次化类(hierarchical classes)。父类可以对子类传递特性。让我们来考虑一个类“people”,它拥有两个子类“male”和“female”。这些子类又可以拥有它们自己的子类,如图O-3所示。每个子类都有从它的父亲处继承来的综合特征,以及它们自己的专有特征。另外,一些继承来的特征由于它们对子类不合适,而会被阻挡。  这和计算机如何关联昵?记住,现在我们在讨论存储许多不同数据类型,和访问许多不同类型应用程序数据的途径。通过按这种方式对数据分类,我们可以在一个对象内,直接包括进行抽取、显示、合并和打印的过程数据。如果需要,对数据进行分类,可以简化构造过程和改造(revision)过程。例如,一个数据块对象可能包括一个对这些数据按特定的方式进行排序的过程,它可以被许多不同的使用这个数据的应用程序所激活。《/SPAN》《/SPAN》《/p》

虚拟析构函数的作用,虚拟析构函数与虚构函数说的是一个意思吗

虚析构函数的目的,建立虚函数表,进而允许使用基类指针来释放派生类的析构函数
如
class A
{
public:
~A(){}
};
class B:public A
{
public:
~B(){}
};
A * p = new B;
如果delete p; 只会调用基类A的析构函数,但是其实p指向的是B类型的对象,显然不对
在基类声明虚析构,就可以通过虚函数表,找到派生类B的析构函数调用
这个区别

c++为何基类的析构函数要么定义为保护的公有成员函数,要么定义为虚函数,或是纯虚函数

虚拟析构函数
在下面的函数中我们如下应用delete 表达式
void doit_and_bedone ( vector《 Query* 》 *pvec )
{
// ...
for ( ; it != end_it; ++it )
{
Query *pq = *it;
// ...
delete pq;
}
}
为了使函数能够正确执行,在应用delete 表达式时,必须调用pq 指向的动态类型的析构函数。为此,必须把Query 类析构函数声明为虚拟的。
class Query {
public:
virtual ~Query() { delete _solution; }
// ...
};
现在,每个后来派生的类的析构函数都被自动调用,doit_and_bedone()正确执行。
在继承机制下的析构函数的行为如下:派生类的析构函数先被调用。在pq 的情况下,它是一个虚拟函数调用。完成之后,直接基类的析构函数被静态调用——如果被声明为inline,则被内联展开。例如,如果pq 指向一个AndQuery 对象:
delete pq;
则通过虚拟机制调用AndQuery 析构函数。然后再静态调用BinaryQuery 析构函数。而这之后Query 析构函数也被静态调用。
已知下列类层次结构
class Query {
public: // ...
protected:
virtual ~Query();
// ...
};
class NotQuery : public Query {
public:
~NotQuery();
// ...
};
当通过NotQuery 对象调用NotQuery 析构函数时,它的访问级别是public,但是,当通过Query 指针或引用来调用析构函数时,它是protected。即虚拟函数承接了“调用者所属类类型”的访问级别。因此:
int main()
{
Query *pq = new NotQuery;
// 非法: 析构函数是 protected
delete pq;
}
作为一般规则,我们建议将类层次结构的根基类(声明了一个或多个虚拟函数)的析构函数声明为虚拟的。但是,不像基类的构造函数,一般地,基类的析构函数不应该是protected。

在c++中有没有纯虚构造函数在c++中纯虚析构函数的作用是什么

可以有。
在某些类里声明纯虚析构函数很方便。纯虚函数将产生抽象类——不能实例化的类(即不能创建此类型的对象)。有些时候,你想使一个类成为抽象类,但刚好又没有任何纯虚函数。怎么办?方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。
这里是一个例子:
class awov {
public:
virtual ~awov() = 0; // 声明一个纯虚析构函数
};
这个类有一个纯虚函数,所以它是抽象的,而且它有一个虚析构函数,所以不会产生析构函数问题。但这里还有一件事:必须提供纯虚析构函数的定义:
awov::~awov() {} // 纯虚析构函数的定义
这个定义是必需的,因为虚析构函数工作的方式是:最底层的派生类的析构函数最先被调用,然后各个基类的析构函数被调用。这就是说,即使是抽象类,编译器也要产生对~awov的调用,所以要保证为它提供函数体。如果不这么做,链接器就会检测出来,最后还是得回去把它添上。

关于虚析构和纯虚析构函数到此分享完毕,希望能帮助到您。

虚析构和纯虚析构函数(我是新手,问C++的析构函数,或者虚析构函数,不知它是什么意思呀)

本文编辑:admin

本文相关文章:


excel怎么用vlookup函数(如何在Excel中使用VLOOKUP函数)

excel怎么用vlookup函数(如何在Excel中使用VLOOKUP函数)

今天给各位分享如何在Excel中使用VLOOKUP函数的知识,其中也会对如何在Excel中使用VLOOKUP函数进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年8月29日 11:50

数组函数的调用(参数为数组的函数该怎么调用)

数组函数的调用(参数为数组的函数该怎么调用)

大家好,关于数组函数的调用很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于参数为数组的函数该怎么调用的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年10月12日 19:40

round求和函数怎么用(round函数如果要取几个单元格相加后的取整怎么操作,例如:算1+2+3+8+9这个数相加起来的取整)

round求和函数怎么用(round函数如果要取几个单元格相加后的取整怎么操作,例如:算1+2+3+8+9这个数相加起来的取整)

“round求和函数怎么用”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看round求和函数怎么用(round函数如果要取几个单元格相加后的取整怎么操作,例如:算1+2+3+8+9这个数相加起来的取整)!

2026年10月8日 05:30

matlabfopen函数的用法(matlab fopen函数能打开excel数据吗)

matlabfopen函数的用法(matlab fopen函数能打开excel数据吗)

本篇文章给大家谈谈matlabfopen函数的用法,以及matlab fopen函数能打开excel数据吗对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本

2026年9月25日 22:20

random函数matlab(如何用matlab生成随机数函数)

random函数matlab(如何用matlab生成随机数函数)

大家好,关于random函数matlab很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于如何用matlab生成随机数函数的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有

2026年9月18日 01:40

bool函数默认返回值(c语言 如果要定义函数的返回类型为布尔类型,怎么定义)

bool函数默认返回值(c语言 如果要定义函数的返回类型为布尔类型,怎么定义)

各位老铁们好,相信很多人对bool函数默认返回值都不是特别的了解,因此呢,今天就来为大家分享下关于bool函数默认返回值以及c语言 如果要定义函数的返回类型为布尔类型,怎么定义的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看

2026年9月17日 17:20

counta函数用法(excel中的counta函数怎么用)

counta函数用法(excel中的counta函数怎么用)

其实counta函数用法的问题并不复杂,但是又很多的朋友都不太了解excel中的counta函数怎么用,因此呢,今天小编就来为大家分享counta函数用法的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年9月13日 13:10

matlab meshgrid用法(MATLAB中mesh函数的用法是怎样的)

matlab meshgrid用法(MATLAB中mesh函数的用法是怎样的)

各位老铁们好,相信很多人对matlab meshgrid用法都不是特别的了解,因此呢,今天就来为大家分享下关于matlab meshgrid用法以及MATLAB中mesh函数的用法是怎样的的问题知识,还望可以帮助大家,解决大家的一些困惑,下

2026年8月27日 10:20

substr函数的头文件(c中sprintf函数)

substr函数的头文件(c中sprintf函数)

大家好,如果您还对substr函数的头文件不太了解,没有关系,今天就由本站为大家分享substr函数的头文件的知识,包括c中sprintf函数的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年8月24日 03:30

条件语句if(逻辑函数if的条件语句是什么)

条件语句if(逻辑函数if的条件语句是什么)

各位老铁们,大家好,今天由我来为大家分享条件语句if,以及逻辑函数if的条件语句是什么的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年8月23日 07:30

更多文章:


1bar等于多少mpa(mpa与bar的换算公式)

1bar等于多少mpa(mpa与bar的换算公式)

“1bar等于多少mpa”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看1bar等于多少mpa(mpa与bar的换算公式)!

2026年10月22日 12:50

多线程模式怎么没了(如何开启CPU 多线程模式)

多线程模式怎么没了(如何开启CPU 多线程模式)

其实多线程模式怎么没了的问题并不复杂,但是又很多的朋友都不太了解如何开启CPU 多线程模式,因此呢,今天小编就来为大家分享多线程模式怎么没了的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月22日 12:40

数字华容道游戏(数字华容道解法)

数字华容道游戏(数字华容道解法)

其实数字华容道游戏的问题并不复杂,但是又很多的朋友都不太了解数字华容道解法,因此呢,今天小编就来为大家分享数字华容道游戏的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月22日 11:10

lineheight和height一致(为什么设置height 和 line height的高度一样时,文字不垂直居中当把line-height去掉后,却居中了呢)

lineheight和height一致(为什么设置height 和 line height的高度一样时,文字不垂直居中当把line-height去掉后,却居中了呢)

本篇文章给大家谈谈lineheight和height一致,以及为什么设置height 和 line height的高度一样时,文字不垂直居中当把line-height去掉后,却居中了呢对应的知识点,文章可能有点长,但是希望大家可以阅读完,增

2026年10月22日 06:20

struts作用(请简单谈一下spring,struts,hibernate的作用;)

struts作用(请简单谈一下spring,struts,hibernate的作用;)

各位老铁们,大家好,今天由我来为大家分享struts作用,以及请简单谈一下spring,struts,hibernate的作用;的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了

2026年10月22日 05:20

low power是什么意思(MP3打开以后提示Low power!是什么意思啊)

low power是什么意思(MP3打开以后提示Low power!是什么意思啊)

各位老铁们,大家好,今天由我来为大家分享low power是什么意思,以及MP3打开以后提示Low power!是什么意思啊的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,

2026年10月22日 03:50

律师资格证报考条件非法律专业(不是法学专业的可以考律师证吗)

律师资格证报考条件非法律专业(不是法学专业的可以考律师证吗)

各位老铁们,大家好,今天由我来为大家分享律师资格证报考条件非法律专业,以及不是法学专业的可以考律师证吗的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年10月22日 02:40

paints怎么读(pαint英语怎么说读)

paints怎么读(pαint英语怎么说读)

本篇文章给大家谈谈paints怎么读,以及pαint英语怎么说读对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月22日 02:20

字符串截取方式(字符串截取的几种基本方法)

字符串截取方式(字符串截取的几种基本方法)

大家好,如果您还对字符串截取方式不太了解,没有关系,今天就由本站为大家分享字符串截取方式的知识,包括字符串截取的几种基本方法的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月22日 01:50

变量名可以是汉字吗(c++变量可以是中文吗,我大一刚学c++,这个不是太懂)

变量名可以是汉字吗(c++变量可以是中文吗,我大一刚学c++,这个不是太懂)

大家好,变量名可以是汉字吗相信很多的网友都不是很明白,包括c++变量可以是中文吗,我大一刚学c++,这个不是太懂也是一样,不过没有关系,接下来就来为大家分享关于变量名可以是汉字吗和c++变量可以是中文吗,我大一刚学c++,这个不是太懂的一些

2026年10月22日 00:50

最近更新

湘乡旅游网站建设,怎么选最合适?
2026-10-22 14:28:18 浏览:0
热门文章

wait for you杨和苏(大家听下(wait for you)这首英文歌的开头那段音乐)
2026-06-13 16:20:04 浏览:26
刷关键字排名怎么操作最有效?
2026-09-14 20:02:13 浏览:19
标签列表