C++中的this指针是什么意思?

作者&投稿:温戚 (若有异议请与网页底部的电邮联系)
C++中的"this"指针是什么意思?~

A.静态成员函数没有this指针
B。由友元函数本质上不属于这个类,所以也没有。
C。明显错
D。对的。

A.fun1. 就是上面选择题的知识点

this指针是指一个类,在实例化时,也就是生成对象时。
其实可以生成很多对象,怎么区别是哪个对象要调用共同的成员函数呢。
本对象在调用成员函数,如何让编译器识别出,所以就有必要用一个指针来指向这个对象。
就是指向自己,所以有了this指针。
静态成员函数,是被这个类所有的对象共有的,所有不需要this来区别调用,直接调用就是。
友元函数本质上是不是这个类里的函数,只是有特权的访问而已,不是这个类的东西,没必要给this指针。

this是指向类的一个实例对象的指针,
作用1.在重名时用this->成员变量名
2.成员函数需要返回对象的引用,用return *this;

A.静态成员函数没有this指针
B。由友元函数本质上不属于这个类,所以也没有。
C。明显错
D。对的。

A.fun1. 就是上面选择题的知识点

this指针是指一个类,在实例化时,也就是生成对象时。
其实可以生成很多对象,怎么区别是哪个对象要调用共同的成员函数呢。
本对象在调用成员函数,如何让编译器识别出,所以就有必要用一个指针来指向这个对象。
就是指向自己,所以有了this指针。
静态成员函数,是被这个类所有的对象共有的,所有不需要this来区别调用,直接调用就是。
友元函数本质上是不是这个类里的函数,只是有特权的访问而已,不是这个类的东西,没必要给this指针。

1. this指针的用处:
  一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。   例如,调用date.SetMonth(9) <===> SetMonth(&date, 9),this帮助完成了这一转换 .
2. this指针的使用:
一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。
3. this指针程序示例:
this指针存在于类的成员函数中,指向被调用函数所在的类实例的地址。   根据以下程序来说明this指针   
#include  
class Point   {   int x, y;   
public:   
Point(int a, int b) { x=a; y=b;}   
void MovePoint( int a, int b){ x+=a; y+=b;}   
void print(){ cout<<"x="<<x<<"y="<<y<<endl;}   
};   
void main( )   {   
Point point1( 10,10);   
point1.MovePoint(2,2);   
point1.print( );   
}   
当对象point1调用MovePoint(2,2)函数时,即将point1对象的地址传递给了this指针。   
MovePoint函数的原型应该是 void MovePoint( Point *this, int a, int b);第一个参数是指向该类对象的一个指针,我们在定义成员函数时没看见是因为这个参数在类中是隐含的。这样point1的地址传递给了this,所以在MovePoint函数中便显式的写成:   
void MovePoint(int a, int b) { this->x +=a; this-> y+= b;}   即可以知道,point1调用该函数后,也就是point1的数据成员被调用并更新了值。   即该函数过程可写成 point1.x+= a; point1. y + = b;
4. 关于this指针的一个经典回答:
当你进入一个房子后,   
你可以看见桌子、椅子、地板等,   
但是房子你是看不到全貌了。   
对于一个类的实例来说,   
你可以看到它的成员函数、成员变量,   
但是实例本身呢?   
this是一个指针,它时时刻刻指向你这个实例本身

5. 类的this指针有以下特点:
(1)this只能在成员函数中使用。
全局函数、静态函数都不能使用this.
实际上,成员函数默认第一个参数为T * const this。
如:
class A
{
public:
int func(int p)
{
}
};
其中,func的原型在编译器看来应该是:
int func(A * const this,int p);
(2)由此可见,this在成员函数的开始前构造,在成员函数的结束后清除。
这个生命周期同任何一个函数的参数是一样的,没有任何区别。
当调用一个类的成员函数时,编译器将类的指针作为函数的this参数传递进去。如:
A a;
a.func(10);
此处,编译器将会编译成:
A::func(&a,10);
看起来和静态函数没差别,对吗?不过,区别还是有的。编译器通常会对this指针做一些优化,因此,this指针的传递效率比较高--如VC通常是通过ecx寄存器传递this参数的。
(3)几个this指针的易混问题。
A. this指针是什么时候创建的?
this在成员函数的开始执行前构造,在成员的执行结束后清除。
但是如果class或者struct里面没有方法的话,它们是没有构造函数的,只能当做C的struct使用。采用 TYPE xx的方式定义的话,在栈里分配内存,这时候this指针的值就是这块内存的地址。采用new的方式 创建对象的话,在堆里分配内存,new操作符通过eax返回分配 的地址,然后设置给指针变量。之后去调 用构造函数(如果有构造函数的话),这时将这个内存块的地址传给ecx,之后构造函数里面怎么处理请 看上面的回答。
B. this指针存放在何处?堆、栈、全局变量,还是其他?
this指针会因编译器不同而有不同的放置位置。可能是栈,也可能是寄存器,甚至全局变量。在汇编级 别里面,一个值只会以3种形式出现:立即数、寄存器值和内存变量值。不是存放在寄存器就是存放在内 存中,它们并不是和高级语言变量对应的。
C. this指针是如何传递类中的函数的?绑定?还是在函数参数的首参数就是this指针?那么,this指针 又是如何找到“类实例后函数的”?
大多数编译器通过ecx寄存器传递this指针。事实上,这也是一个潜规则。一般来说,不同编译器都会遵从一致的传参规则,否则不同编译器产生的obj就无法匹配了。
在call之前,编译器会把对应的对象地址放到eax中。this是通过函数参数的首参来传递的。this指针在调用之前生成,至于“类实例后函数”,没有这个说法。类在实例化时,只分配类中的变量空间,并没有为函数分配空间。自从类的函数定义完成后,它就在那儿,不会跑的。
D. this指针是如何访问类中的变量的?
如果不是类,而是结构体的话,那么,如何通过结构指针来访问结构中的变量呢?如果你明白这一点的话,就很容易理解这个问题了。

在C++中 ,类和结构是只有一个区别的:类的成员默认是private,而结构是public。
this是类的指针,如果换成结构,那this就是结构的指针了。

E. 我们只有获得一个对象后,才能通过对象使用this指针。如果我们知道一个对象this指针的位置,可以直接使用吗?
this指针只有在成员函数中才有定义。因此,你获得一个对象后,也不能通过对象使用this指针。所以,我们无法知道一个对象的this指针的位置(只有在成员函数里才有this指针的位置)。当然,在成员函数里,你是可以知道this指针的位置的(可以通过&this获得),也可以直接使用它。
F. 每个类编译后,是否创建一个类中函数表保存函数指针,以便用来调用函数?
普通的类函数(不论是成员函数,还是静态函数)都不会创建一个函数表来保存函数指针。只有虚函数才会被放到函数表中。但是,即使是虚函数,如果编译器能明确知道调用的是哪个函数,编译器就不会通过函数表中的指针来间接调用,而是会直接调用该函数。

1.D 2.B
首先,理解一下这句话“this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象的地址。全局仅有一个this指针,当一个对象被创建时,this指针就指向对象数据的首地址。 ”;
其中有几个关键词,“自动生成”,“自动隐藏”,“存在于类的非静态成员函数中”,“调用函数所在的对象”,重点理解这几个词。
当你创建一个类对象时,就已经隐含生成了一个this指针,它时刻指向你这个实例对象本身。
这里有一个很形象的比喻:
当你进入一个房子后,
你可以看见桌子、椅子、地板等,
但是房子你是看不到全貌了。
对于一个类的实例来说,
你可以看到它的成员函数、成员变量,
但是实例本身呢?
this是一个指针,它时时刻刻指向你这个实例本

B


the和this的区别是什么?
"this"是指示代词,用于指向或引用离说话者较近的人、事或物。"the"是定冠词,用于特指已经提及过或明确的人、事或物。二、用法区别 "this"通常用于单数形式,可作为主语、宾语或定语,并经常在口语和书面语中使用。例句:This is my book.(这是我的书。)"the"可以用于单数或复数形式,可作为...

these, this, that, those, it, they的用法
this用作代词可用以指叙述中的人或事物,即指前面提到过的人或事物或下文提及的事物; this一般作主语时才指人; 在电话用语中, this用来指代自己。I didn't think we'd get this far.我未曾想到我们会走得这么远。3、that that用作关系代词时,指人或事物,同时又在从句中充当句子成分。that偶尔也...

this是什么意思啊?
在JavaScript中,this代表当前执行的函数所在的对象。例如,当我们在一个对象中定义一个方法,这个方法中的this指的是调用该方法的对象。但是在全局作用域中,this指的是window对象。在C++中,this也代表当前对象。和Java中一样,我们可以使用this来访问该对象的成员变量和成员方法。不同的是,在C++中可以...

that和this的区别
2、this:(指较近的人或事物)这,这个,(指已提到过的人或事物)这。二、用法不同 1、that:that用作指示代词的意思是“那,那个”。可指前面提到的那件事,也可指在空间或时间上较另一事物远的事物或人,还可指要表明的或要提及的事物、想法等。2、this:this用作形容词作“这”解时,用于...

this和that有什么区别吗?
1. 距离上的区别:this指的是近处的事物或概念,that指的是远处的事物或概念,而it则指代事物或概念本身。例句:- This book is really interesting.这本书很有趣。- That monument is one of the most famous landmarks in the city.那个纪念碑是城市中最著名的地标之一。- It is raining out...

This, that, these, those, there是指示代词吗?
"this"常用于指示离说话者较近的单数人或物。"that"常用于指示离说话者较远的单数人或物。"these"常用于指示离说话者较近的复数人或物。"those"常用于指示离说话者较远的复数人或物。"there"常用于指示某个地方或引出某个存在。指示代词可以在句子中起到具体化、引用或强调的作用,帮助我们更清晰...

js中this是什么意思?
js中this指的是什么?在JavaScript中,this是一个关键字,可以认为是一个指向当前作用域中对象或函数的指针。在不同的上下文环境中,this指向的对象是不同的,可以是全局对象、函数的局部对象或者是被调用的对象本身。它的值是在函数被调用时确定的,而不是在函数定义时确定的。this的作用在于发挥上下文...

this和that指代上下文的区别
this和that在指代上下文中的事物时,有以下几个主要区别:1、距离感:this通常指代较近的人或物,而that指代较远的人或物。2、回指:两者都可以用来回指上文提到的事物。例如,在叙述中,如果提到过某个人或物,可以使用this或that来指代它。3、下文指代:当指代下文将要提到的事物时,通常使用this。

that.this.these.those的区别
this翻译为这个(距离比较近)。these翻译为这些,是this的复数形式(距离也较进)。those翻译为那些,是that的复数形式(距离比较远)。this和that都是指物体单数,these和those是指物体复数。例如:This(That) is my book. 这是(那是)我的书。These(Those) books are mine.这些(那些)书是我...

this和the的区别是什么?
区别一:词性不同 this是指示代词,用于指代近处的人或物,而the是冠词,用于特指某个已知的人或物。例句:①This is my book. 这是我的书。②The book is on the table. 书在桌子上。区别二:使用场景不同 this通常用于指代说话人正在提到或者即将提到的事物,而the则用于指代听话人已知或者容易...

旬邑县13737973449: C++中的this表示什么意思? -
邢邓乐孚: this是指向类或者结构体本身的指针,并且不可以改变. *this就是指向本身的类或结构体的变量. 如 class A { void Fun(int a) {cout<<this->a<<endl;cout<<(*this).a<<endl; } int a; }这样显示的就是类的成员变量a,而不是传入的参数a

旬邑县13737973449: 求C++this指针详细解释 -
邢邓乐孚:[答案] this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数...

旬邑县13737973449: c++this指针详解 -
邢邓乐孚: this指针只能在一个类的成员函数中调用,它表示当前对象的地址.下面是一个例子:void Date::setMonth( int mn ){month = mn; // 这三句是等价的this->month = mn;(*this).month = mn;}1. this只能在成员函数中使用. 全局函数,静态函数...

旬邑县13737973449: C++中this是什么意思? -
邢邓乐孚: this指代的是当前上下文,this表示的对象,是这个方法活动的"上下文".所谓的"上下文",也就是表示当前的这些代码的活动范围,当前的活动(代码的执行)在那个对象上的发生的意思. 吃饭这个活动,是在张三这个对象上发生的,则张...

旬邑县13737973449: c++中什么是this指针
邢邓乐孚: 就是表示类成员的函数时候要用this,当然别的用法还挺多,就给你举一个例子吧:class b{public: void a(Int c){this->c = c} // 在这里,this表示是这个类声明的int类型的c .private: int c;}当然这个知识this的一个用法.具体你可以去 http://baike.baidu.com/view/626297.htm?fr=ala0_1.这里比较详细.其实我还是建议认真看看c++的书,一般都有很详细的介绍.

旬邑县13737973449: 谁能详细的解释一下c++类中的的this指针的详细内容!主要是用this返回对象的引用? -
邢邓乐孚: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数.也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行. this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象的地址.全局仅有一个this指针,当一个对象被创建时,this指针就指向对象数据的首地址.

旬邑县13737973449: C++里的this指针 -
邢邓乐孚: this就是一个语法而已,表示对象的指针.就比如某人叫做张三和李四都没啥区别吧,只有知道是某个人而已.严格来说既不是类,也不是对象成员,也不属于成员函数.this指针就是this指针.只是写法和那些有点相似而已.知道它哪些地方有...

旬邑县13737973449: 在C++中,什么是this指针? -
邢邓乐孚: this是一个指针,它时时刻刻指向类的实例本身.

旬邑县13737973449: c++中this箭头是什么意思 -
邢邓乐孚: this是类的成员函数中,指向 调用该函数 对象的指针.

旬邑县13737973449: this指针指的是什么? -
邢邓乐孚: this指针是一个隐含于每一个成员函数中的特殊指针.它是一个指向正在被该成员函数操作的对象,也就是要操作该成员函数的对象.当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网