this指针的主要作用,求Cthis指针详细解释

1,求Cthis指针详细解释this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果 。this作用域是在类内部 , 当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数 。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参 , 对各成员的访问均通过this进行 。例如,调用date.SetMonth(9) <===> SetMonth(&date, 9),this帮助完成了这一转换 .this指针的使用: 一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n) 。
2,this指针指的是什么this指针是一个隐含于每一个成员函数中的特殊指针 。它是一个指向正在被该成员函数操作的对象,也就是要操作该成员函数的对象 。当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含作用this指针 。而通常不去显式地使用this指针来引用数据成员 。同样也可以使用*this来标识调用该成员函数的对象 。下面举一例子说明this指针的应用 。#include<iostream.h>classApublic:A()A(inta,intb)voidcopy(A&aa);//对象引用作函数参数voidprint()private:inta,b;};voidA::copy(A&aa)if(this==&aa)return;//这个this是操作该成员函数的对象的地址 , 在这里是对象a1的地址*this=aa;//*this是操作该成员函数的对象,在这里是对象a1 。//此语句是对象aa赋给a1,也就是aa具有的数据成员的值赋给a1的数据成员}voidmain()Aa1,a2(3,4);a1.copy(a2);a1.print();}运行结果:3,4【this指针的主要作用,求Cthis指针详细解释】
3,this指针到底有什么用 说的通俗点this指针在运行时指向当前对象 。this指针只在类函数内可用 。对下面这个类来说,this的类型就是 (A*) 。class A private: int value; public: int getValue() return value; // 等同于 return this->value. } int setValue(int value) this->value = http://www.lisdn.com/mnsj/hhzs/value; // 因为形参value和成员变量的名字相同,因此不能直接写 value = value 。// 在这种情况下必须写成带有this指针的上述形式 。return value; } int need_help() return fun_A(this); //可直接将this用作参数调用其它函数 。} A& operator ++() ++value; return *this; // 将当前对象的引用作为函数返回值时 , 需要返回 *this // 这样我们才能如下调用: // A a; ++(++a); }};int fun_A(A* pa){ ... }指针是存储内存地址的变量,只是一种变量而已就像int的变量存储整形就像float的变量存储浮点形就像char的变量存储字符形就像double的变量存储高精度浮点形char *,int *,float* 定义的指针都是一样的,用来存放内存地址.一般来说可以存储2^32次方那么大的内存地址.之所以有那么多类型的指针是方便写代码,同时支持指针的自我加减操作.最终的操作都是转化成void*的指针来操作假设你要读取内存地址为0x5201314的那块内存 void *p = 0x5201314;cout<<(int)*p;//读取4个字节cout<<(char)*p;//读取1个字节 。。。。。。
4,this指针存在的目的是哎,这些东西如果一说就复杂了 。是这样的 , 其实不管c语言还是c++语言,最后编译成机器码并没有什么本质的区别 , 所谓类,虽然在语言这个层面有了一个概念性的解释(相同属性相同操作的集合的抽象化) , 但是实际上在二进制的表示和结构上没有什么本质的区别,都是一个内存区域保存了一些值 。那这样一来 , 就可能使得程序员跨过一个类的限制(比如应该只能访问自己的成员,但是你想办法访问了其他对象的成员) 。所以c++在设计的时候就隐含了一个this指针,这个指针主要是用于保证你的访问不能跨界和用于区分不同的对象 。举个例子 , 你的任何一个函数的申明实际隐含了一个this指针参数,这个参数你不可见,也不可编辑 , 是编译器自动添加上去的,为什么要这样?实际上对象在实例化的时候 , 体积是非常小的,并没有每一个对象都保存函数 , 同一个类的对象的函数实际上只有一份副本(二进制层面),那如何来区分到底是谁调用了函数?就是这个this指针 。this指针实际是指向了对象的内存地址起始值,所以通过一个偏移量,就知道了对象的各种属性(变量),也就确定了一个绝对的对象 。当然在对象的函数操作里我们可以显示的用this->的方式来引用变量,但是你也发现你即使不加上this指针,它依然知道你引用了谁,其实就是隐含了一个参数this指针 。为了进一步理解,想一下static修饰的函数有什么区别,为什么static函数只能访问static修饰的属性?因为static修饰的函数就没有传递这个this指针,所以它不知道你指的是哪一个对象 。而实际上,static修饰的符号就和c语言的全局变量和函数无区别了 。this指针存在的目的是(B、保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码)一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果 。this作用域是在类内部 , 当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数 。扩展资料:一个对象的this指针并不是对象本身的一部分 , 不会影响sizeof(对象)的结果 。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候 , 编译器会自动将对象本身的地址作为一个隐含参数传递给函数 。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行 。B , this与基类子类的问题没有关系 。只是一个指向自己的指针,访问自己的数据成员 。5,谁能详细的解释一下c类中的的this指针的详细内容主要是用this返一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果 。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候 , 编译器会自动将对象本身的地址作为一个隐含参数传递给函数 。也就是说,即使你没有写上this指针 , 编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行 。this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象的地址 。全局仅有一个this指针 , 当一个对象被创建时,this指针就指向对象数据的首地址 。1、其实在编译器内部,成员函数和非成员函数的调用是一样的 。你定义了一个类的成员函数,编译器会把它变成一个普通函数 , 为了知道哪一个对象调用了该函数,它会插入一个参数,比如class test……void fun(int i)……};针对fun编译器生成的的全局函数是void fun(test* this,int i)如果有这样的应用test t1;t1.fun(2);//case 1对于case 1编译器生成的代码是fun(&t1,2);2、如果成员函数是const修饰的class test……void fun(int i) const……}; 那么编译器的处理是void fun(const test* this,int i)也就是说 , 你不能改变this指向的对象3、至于static修饰的函数,它不属于任何类,因此编译器不会插入this指针 。4、若是要返回对象的引用的话,可以这样class test……test& fun(int i) const……};每一个非静态成员函数里面都有一个隐式的this指针,它指向当前调用函数的对象 。比如stu.Output();this 指向stu的首地址 。问题在这一句*max(array,(sizeof(array)/sizeof(int)))这一句,只要把前面的*号去掉就是指针了,加*号就是对指针取指向的内容,不加星就是指针本身,举个例子吧 , int a=10,int *p=&a, cout<<p<<endl,打印的指针,就是指针存储的内存地址,cout<<*p<<endl,打印的是指针指向的内容,其实就是变量a的值,对于函数也是这样的 , 你的函数是返回指针,但是你加了*号就是取内容了

    推荐阅读