this指针的简单见解

首先,this指针一般存在于class之中,我们都知道class里有着成员变量还有成员函数,其实每个类成员都有着一个this指针,包括构造函数和析构函数。

简单地说,this指针就是一个指向自身的指针。那么它有什么用呢?

通常在class定义时要用到类型变量自身时,因为这时候还不知道变量名(为了通用也不可能固定实际的变量名),就用this这样的指针来使用变量自身。

实际上任何对类成员的直接访问都可以看做this指针的隐式使用,可以看下下面的代码:

class A{
private:
    int a;
public:
    A(int x) { a = x; }
}

实际上在调用A的构造函数的时候是这样的:

class A{
private:
  int a;
public:
    A(int x) { this->a = x;}
}

那么我们怎么知道this指向这个调用对象本身呢?have a try:

class A{
private:
    int a;
public:
    A(int x) { a = x; }
    int getaddr() { cout << this; }
}
int main(){
    A aa;
    aa.getaddr();
    cout << endl << &aa;
    return 0;
}

可能还是有人不太明白为什么要用这个this指针,通过下面这个程序你可以明白一点(C++Primier上的)

其实就是上面那句话:

通常在class定义时要用到类型变量自身时,因为这时候还不知道变量名(为了通用也不可能固定实际的变量名),就用this这样的指针来使用变量自身。

如果我们要在上述的class A中添加一个成员函数,需要比较a的大小,并返回a值较大的那个类对象,那我们应该怎么做呢?考虑到该方法要比较两个对象的a的值,所以必须将第二个对象当做参数传递给它,我们可以使用引用来传递它,其次还需要返回一个结果,就是返回一个引用,指向a值较大的那个对象,因此函数原型可以是这样:

const A& comp_a(const A& aa) const;

括号内的const代表着该函数不会修改被显式地访问的对象,括号后面的const表明不会修改被隐式地访问的对象,而该函数返回了两个const引用之一,所以返回类型也需要const修饰。

让我们来看一下什么是显式访问什么是隐式访问:

A1.comp_a(A2);    //显式访问了A2,隐式访问了A1
A2.comp_a(A1);    //显式访问了A1,隐式访问了A2

好,我们接下来实现这个函数:

const A& A::comp_a(const A& aa) const
{
    if(aa.a > a)
        return aa;
    else
        return ???;
}

很尴尬,我们在这里并不知道称呼这个调用comp_6()方法的对象...

其实this指针就是指向用来调用成员函数的对象,就是它的称呼啦:

const A& A::comp_a(const A& aa) const
{
    if(aa.a > this->a)
        return aa;
    else
        return *this;
}

其中还有一个变化,相比你们都能看出来,我把if判断语句中省略的一个this指正给写出来了,其实你不写也没有问题,但是编译的时候,它还是会自动给我们添加的啦

为什么返回的是*this呢?因为我们要返回的是对象而不是地址哦~




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值