this指针_C++ 自引用指针this

作者:鲸90830 

链接:https://www.cnblogs.com/whale90830/p/10532844.html

自引用指针this

例 3.1 this指针的引例
#include
class A{
public:
    A(int x1){ x=x1; }
    void disp(){ cout<<"x= "<private:
    int x;
};
main()
{
    A a(1),b(2);
    cout<<" a: "; a.disp();
    cout<<" b: "; b.disp();
    return 0;
}

程序运行的结果:

a: x=1
b: x=2

理解this

  • 每一个类的成员函数都有一个隐藏定义的常量指针,我们把它称为this指针。

  • this指针的类型就是成员函数所属的类的类型。

  • 每当调用成员函数时,它被初始化为被调函数所在类的对象的地址。也就是自动地将对象的指针传给它。不同的对象调用同一个成员函数时,编译器将根据成员函数的this指针所指向的对象来确定应该引用哪一个对象的数据成员。

  • 在通常情况下,this指针在系统中是隐含地存在的。也可以将其显式地表示出来。

  • cout<x<

例3.2 显示this指针的值。 (显式)
#include
class A{
public:
    A(int x1){ x=x1;}
    void disp(){cout<<"\nthis="<<this<<"when x="<<this->x;}
private:
    int x;
};
main()
{
    A a(1),b(2),c(3);
    a.disp();
    b.disp();
    c.disp();
    return 0;
}
this=0x0065FDF4 when x=1
this=0x0065FDF0 when x=2
this=0x0065FDEC when x=3

【例3.3】 分析下列程序的运行结果,说明程序中this和*this的用法

#include
class Sample{
private:
    int x,y;
public:
    Sample(int i=0,int j=0)
    { x=i; y=j; }
    void copy(Sample& xy);
    void print(){ cout<","<endl; }
};void Sample::copy(Sample& xy)
{if (this==&xy) return;
    *this=xy;
}void main(){
    Sample p1,p2(5,6);
    p1.copy(p2);
    p1.print();
}

运行结果:

5,6
例.一个使用this的类
class Circle{
private:
    double radius;
public:
    Circle(double radius) // 参数与数据成员同名时
    {
        this->radius = radius; // 去掉 this 如何理解?
    } // P272.例9.5中形式参数为何取 nam ?
    double get_area(){
        return 3.14 * radius * radius;
    }
};
int main(){
    Circle c = Circle(1);
    double a = c.get_area();
    cout <endl;
    return 0;
}

说明:

  • this指针是一个const指针,不能在程序中修改它或给它赋值。

  • this指针是一个局部数据,它的作用域仅在一个对象的内部。

(1) 隐式存在

this指针是隐式使用的,它是作为参数被传递给成员函数的。

(2)自动实现

是编译系统自动实现的,程序设计者不必人为地在形参中增加this指针,也不必将对象a的地址传给this指针。

(3) *this
表示对象当前对象本身

例如,计算Box体积的函数可以改写为return((*this).height * (*this).width * (*this).length);


●编号470,输入编号直达本文

●输入m获取文章目录

C语言与C++编程

ffa25573fc3e19ed5a73a2d709bd8ac0.png

分享C/C++技术文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值