📄 subject_23971.htm
字号:
<p>
序号:23971 发表者:提刀入人间 发表日期:2002-12-08 11:19:26
<br>主题:this指针是怎么回是,大家详细介绍一些好么??
<br>内容:头疼啊 !!!!!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:雷神 回复日期:2002-12-09 12:57:15
<br>内容: 当引用一个类的数据成员其引用代码又在类外时,在表达式中总要指明该类一个具体实例,编译器才能知道要访问哪一个数据成员.例如,以下代码首先打印属于对象test1的数据成员n,然后打印属于对象*ptest2的n,CTest是一个类:<BR> CTest test1;<BR> CTest *ptest2=new CTest;<BR> //...<BR> cout<<test1.n<<'\n';<BR> cout<<ptest2->n<<'\n';<BR>然而,在一个类的成员函数内部引用一个数据成员却不能指明一个类的具体实例:<BR> class CTest<BR> {<BR> public:<BR> int n;<BR> int getn()<BR> {<BR> return n;<BR> }<BR> };<BR>那么,编译器怎样决定引用哪一个实例对象的n拷贝呢?为了分辨,编译器实际上给成员函数传递一个隐藏的对象指针.此指针指向函数调用所要引用的对象.该函数隐式的使用这个指针,例如,在以下调用:<BR> CTest test;<BR> test.getn();<BR>中,编译器传给getn一个隐藏的指向test对象的指针,getn隐式的使用这个指针,访问属于对象test的成员n.<BR> 利用C++的关键字this可以直接访问这个隐藏的指针.事实上,对于类X,它的每一成员函数中都隐式的声明了this指针:<BR> X * const this;<BR>此指针指向该成员函数所在的对象的地址(即函数"当前"引用的对象).在test.getn()调用中,getn()中的this指针指向的就是test对象.而对于<BR> CTest test1;<BR> test1.getn();<BR>getn()中的this指针,指向的是test1对象.<BR> 由于this指针被声明为* const,它是一个指针常量,因此不能改变它的值(在低版本的C++中,修改this指针是可以的),但可以改变它所指对象的值.例如:<BR> int CTest::chargethis() //假定changethis在CTest中已有声明<BR> {<BR> CTest temp;<BR> this=temp; //非法<BR> //...<BR> }<BR>利用this指针,getn可重写如下:<BR> int CTest::getn()<BR> { <BR> return this->n; //等价于return n;<BR> }<BR>在数据成员的名字前加上表达式this->是合法的但没有什么效果,因为this指针的使用本来就是隐式的,它只引用数据成员.<BR> 如果需要访问全局数据或函数,而它们的名字又和数据成员或成员函数的名字相同,则必须在名字前面加上作用域分辨符" :: ".例如:<BR> int n=0; //全局n<BR> class CTest<BR> {<BR> int n; //数据成员n<BR> int demo()<BR> {<BR> cout<<::n<<'\n'; //打印全局n<BR> cout<<n<<'\n'; //用this访问数据成员n<BR> }<BR> };<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -