this指针

#include <iostream>
using namespace std;

class A
{
public:
    int getnum(){ return i; }
    void setnum(int x){ i = x; cout << "this指针保存的内存地址为:" << this << endl; }
    //void setnum(int x){this-> i = x; cout << "this指针保存的内存地址为:" << this << endl; }
private:
    int i;
};

int main()
{
    A a;
    a.setnum(9);
    cout << "对象a的地址为:" << &a << endl;
    cout << "对象a所的值为:" << a.getnum() << endl;
    cout << 类的大小=<<sizeof(a)endl;
    A b;
    b.setnum(999);
    cout << "对象b的地址为:" << &b << endl;
    cout << "对象b的值为:" << b.getnum() << endl;
    cout << 类的大小=<<sizeof(b)endl;
    return 0;
}

这里写图片描述

这里写图片描述

从图中对比可以看出

1.this指针所存放的类容和类对象地址是一样的,所以this指针指向类对象。

2.类的大小不受this指针的影响,说明this指针不是类对象本身的一部分。
this指针是一个隐式参数但是可以显示表示

我们在原函数中添加一个test函数

void test()
{
    cout << "this的内容为" << this << endl;
}

这里写图片描述

从中我们可以得知,

3.this指针的作用域就在类的成员函数内部,

4.this指针只能在非静态成员函数中才能使用,

``` 
 class A
{
public:
    int getnum(){ return i; }
    void setnum(int x)
    {
        this->i = x; cout << "this指针保存的内存地址为:" << this << endl; int a = this;   }
private:
    int i;
};

结果如图
这里写图片描述
由图可以得知

5.this指针的类型为 类类型*const,

#include<iostream>
using namespace std;
class student
{
public:
void SetStuInfo(...);
private:
char _name[4];
char _gender[2];
int _number;
};
int main()
{
student s1;
s1.SetStuInfo("张三", "男", 20);
system("pause");
return 0;
}

这里写图片描述
函数名称修饰之后得到 ?SetStuInfo@student@AAXZZ

__thiscall调用约定:
1. 参数压入堆栈从右往左。
2. this指针([s1]表示s1的地址)通过寄存器ecx传递
3. __thiscall只能够用在类的成员函数上
4. 如果参数个数确定,this指针通过ecx传递给被调用者;如
果参数不确定(_cdecl),this指针在所有参数被压入栈堆

#include<iostream>
using namespace std;
class student
{

public:
    void test1()
    {
        cout << this << endl;
    }
private:
    char _name[4];
    char _gender[2];
    int _number;
};
void test2()
{
    student* s1 = NULL;
    s1->test1();
}
int main()
{
    test2();
    system("pause");
    return 0;
}

这里写图片描述
这说明了,this是能为空的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值