#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是能为空的。