概述
先来看一个简单的程序:
#include <iostream>
using namespace std;
class Human
{
private:
int age;
public:
void setAge(int a)
{
age = a;
}
int getAge()
{
return age;
}
};
int main()
{
Human h;
h.setAge(10);
cout << h.getAge() << endl; // 10
return 0;
}
稍微改动上述程序,得到:
#include <iostream>
using namespace std;
class Human
{
private:
int age;
public:
void setAge(int age)
{
age = age; // 真正的字段age被形参age屏蔽
}
int getAge()
{
return age;
}
};
int main()
{
Human h;
h.setAge(10);
cout << h.getAge() << endl; // -858993460
return 0;
}
那怎么办呢?用this指针吧:
#include <iostream>
using namespace std;
class Human
{
private:
int age;
public:
void setAge(int age)
{
this->age = age;
}
int getAge()
{
return age;
}
};
int main()
{
Human h;
h.setAge(10);
cout << h.getAge() << endl; // 10
return 0;
}
实际上,在编译器看来,成员函数setAge是这样的:void setAge(Human *const this, int age); 也就是说this指针是编译器默认的成员函数的一个参数,在调用h.setAge(10);时,在编译看来,实际上是调用了Human::setAge(&h, 10); 这样,就实现了对象与其对应的属性或方法的绑定。下面这个程序之所以能区分不同不同对象,也完全是拜this指针所赐。
#include <iostream>
using namespace std;
class Human
{
private:
int age;
public:
void setAge(int a)
{
age = a;
}
int getAge()
{
return age;
}
};
int main()
{
Human h1, h2;
h1.setAge(10);
cout << h1.getAge() << endl; // 10
h2.setAge(20);
cout << h2.getAge() << endl; // 20
return 0;
}
接着来欣赏如下程序:
#include <iostream>
using namespace std;
class Human
{
private:
int age;
public:
void setAge(int a)
{
cout << this << endl; // 0012FF7C
age = a;
cout << age << endl; // 10
}
int getAge()
{
return age;
}
};
int main()
{
Human h;
cout << &h << endl; // 0012FF7C
h.setAge(10);
cout << h.getAge() << endl; // 10
return 0;
}
this指针是指向对象的,而静态成员函数并不属于某个对象,因此,在静态成员函数中,并没有this指针,这一点值得注意。
最后
以上就是繁荣树叶为你收集整理的C++中的this指针究竟是什么?的全部内容,希望文章能够帮你解决C++中的this指针究竟是什么?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复