首页 > 编程知识 正文

在c语言中,this指针是指向对象的指针

时间:2023-05-04 17:57:55 阅读:41139 作者:296

每个对象中的成员函数占用存储空间,如果一个类定义了n个对象,则有n个大小相同的区域来存储n个对象的数据成员,但不同的对象调用相同的代码段

那么,当不同对象的成员函数引用数据成员时,如何确保引用指定对象的数据成员呢?

例如,设计长方体类

# includeiostreamusingnamespacestd; classbox { public : box (int length=0,int width=0,int height=0) :_length ),_width ),} private 3360 int int _width; int _height; (; int main () boxa (3,2,4 ); boxb (4,5,7 ); boxc(7、8、9; a.volume (; b .卷(; c .卷(; 返回0; }

*该程序定义了三个长方体对象a、b、c,调用volume是求出长方体的体积。 a.volume ()引用a的数据成员_length、_width和_height的b.volume ()引用b的数据成员_length、_width和_height

*因此,所有对象都调用相同的函数volume。 那么,系统如何让卷分别引用a、b或c数据成员呢? ** 因为在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,this指针。它是指向本类对象的一个指针,它的值是当前被调用的成员函数所在的对象的起始地址。当调用a.volume()时编译器就把对象a的起始地址传递给this指针。于是在成员函数引用成员变量时,就按照this的指向地址找到a的成员变量。

若要为volume计算_length*_width*_height的值,实际上是(this-_length ) (* (this-_width ) ) *(this-height ) 现在this指的是

this指针式是隐式调用的,它作为参数被传递给类的成员函数。本来成员函数volum的定义如下:

int volume () {return _length*_width*_height; } 在c++内部会被处理成

intvolum(box*this ) return (this-_ length ) ) *(this-_width ) *(this-_height ) } 类内部处理会在成员函数的形参列表中增加一个this指针,在调用成员函数时实际上是a.volume(a).即:将a的地址赋给this指针,然后按照this指针的指向去引用指定成员。

注意:

this指针是隐式的,由编译系统自动实现,不需要在不能显示的波形参数中添加this指针,也不需要将a的地址传递给this。 您可以在重新成员函数中显示this指针。 http://www.Sina.com/http://www.Sina.com /

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。