我是靠谱客的博主 繁荣树叶,最近开发中收集的这篇文章主要介绍C++中的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 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指针究竟是什么?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部