第四章 基于对象的编程风格(什么是this指针)

来源:互联网 发布:网络上的怼是什么意思 编辑:程序博客网 时间:2024/06/03 21:34

this 指针的作用:

 

我们得设计一个copy()成员函数,才能够以triangular class object作为另一个triangular class object的初值。假设有以下两个对象:
triangular tr1(8);
triangular tr2(8,9);
调用
tr1.copy(tr2);
会将tr2的长度以及起始位置赋值给tr1.copy()必须返回被复制出来的对象。本例中,tr1不仅是复制的目标,也用来接收复制的结果。这该如何完成了?以下是一份copy的实现:

trangular&trangular::
copy(const triangular&rhs)
{
_length=rhs.length;
_beg_pos=rhs._beg_pos;
_next=rhs._beg_pos-1;
return ???//应该返回什么
};
其中rhs(right hand side)的缩写被绑定到tr2.以下这个赋值操作:
_length=rhs._length;
_length指向tr1内的成员,我们还需要一个指向整个tr1对象的方法。所谓this指针扮演了这个角色。

 

this指针系在member function内用来指向其调用者(一个对象)本例中,this指向tr1这是怎样办到的呢?内部工作过程是:编译器自动将每一个this指针加到每一个member fuction的参数列表,于是copy()被转换成以下形式:
//伪码(pseudo code):member function被转换后的结果

triangular&triangular::
copy(triangular*this,const triangular &rhs)
{
this->_length=rhs._length;
this->_beg_pos=rhs._beg_pos;
this->_next=rhs._beg_pos-1
};
整个转换过程还需要另一个配合:每次调用copy()都需要提供两个参数。为此,原始调用方式tr1.copy(tr2)会被转换为
//内部的程序代码转换
//tr1变成this指针所指的对象
return *this;
欲以一个对象复制出另一个对象,先确定两个对象是否相同是个好习惯。这必须再次运用this指针:
triangular& triangular::
copy(const triangular &rhs)
{
//检查两个对象是否相同
if(this!=&rhs)
{
_length=rhs._length;
_beg_pos=rhs._beg_pos;
_next=_rhs._beg_pos-1;
}
return*this;
}

0 0
原创粉丝点击