this指针

说到C++中的类,其中一个非常方便的地方就是,当我们将某一类具有相同属性和行为的封装成一个类后, 我们只需要用该类型创建不同的对象,那么就可以生成很多对象实例,

类是对对象的抽象,它是一种抽象的数据类型,是一个抽象的概念,对象是对客观事物的抽象。

对象是类的实例,类是对象的模板,万物皆为对象,对象属于某个类,

对象的唯一来源于世界中事物的唯一;

对象的唯一在程序中是地址内存的唯一;那么我们怎么用不同的对象或指针来找到其对应的内存地址呢???

这里就来到了文中的this指针,一个很重要的隐士,默默的在后面做着贡献和牺牲,类中的无名英雄!!

从来不让人知道!捧着一颗心来,不带半颗草去!!

this的作用:

一个对象的this指针并不是这个类的一部分,不影响sizeof(对象)的大小。this作用域是在类的内部,当在类的非静态成员函数中访问非静态成员的时候,编译器就会自动将对象本身的地址作为一个隐含的参数传递给函数!

this不是类的成员变量,我们可以通过sizeof(对象)来确定;

每一个类的成员函数都有一个隐含的参数,当前这个类的指针->this,地址和该类生成的对象的地址一样

this指向的是各个对象的地址;主要用来区分那个类的成员变量,那个对象调用就把那个对象的地址传给成员函数的this指针,然后去找对应对象的成员变量;

注意:一定是成员函数和成员变量,非成员函数,如静态成员函数的成员函数的区别就是静态成员函数没有this指针,所以它不能调用某个对象的成员变量,分不清是呢个对象的!

下面看一个代码示例:

#include <iostream>
using namespace std;
class people
{
public:
	int num; //全局的变量;
	int data;
public:
	people(int num,int data)
	{
		//	num=123; //局部的变量;
		num=123;//局部的变量;
		data=234;
		people::num=888; //调用全局的变量;	类名加作用域来区分变量的作用域;
		this->num=888; //全局的变量;
		this->data=999;
	}
	void show()
	{
		cout<<this<<endl; //当前对象的地址;
	}
	void show1()
	{
		cout<<this->num<<endl;
	}
	void show2()
	{
		cout<<"adfsf"<<endl;
	}

};
int main()
{
	people pe(100,200);

	cout<<&pe<<endl;
	pe.show(); //this 指针的地址和类对象的地址是一样的;

	people peo(100,200);
	cout<<&peo<<endl;
	peo.show();//this 两个地址是一样的;

	people *pp=NULL;//pp指向NULL,可以调用函数,但是函数里不能有类的属性。里面没有任何变量;
	//pp.show1();//pp没有对象,所以不能调用类中的变量;
	pp->show2();//pp可以调用函数;函数的地址已经生成,找到地址就可以用,但是累的变量它找不到地址;
	cout<<pe.num<<endl;//888 num的值是;-858993460
	cout<<sizeof(people)<<endl;//8  成员变量的总的大小;

	system("pause");
	return 0;
}


值得注意的是:

1.this指针就是当前对象的首地址;

2.空指针NULL可以调用不含有成员变量的函数,因为只要找到函数的入口地址就可以调用该函数;

3.静态函数没有this指针,不能访问成员变量;用类名就可以调用;








  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值