c++中this指针基本概念和使用

class Person
{
public:
	int m_A;//非静态成员变量,属于对象上

	void func(/*Person * this*/){}; //非静态成员函数 不属于对象身上

	static int  m_B;//静态成员函数,不属于对象上

	static void fun2(){};//静态成员函数 ,不属于对象身上

	//double m_C;//12错误 16正确,解决方法#pragma pack(1)
};
void test02()
{

	//this指针指向被调用的成员函数
	Person p1;
	p1.func(); //编译器会偷偷 加入一个this指针 Person * this 

	Person p2;
	p2.func();
}

C++编译器给每个“成员函数“增加了一个隐藏的指针参数,让该指 针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访 问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

this指针使用

  1. 指针永远指向当前对象
  2. 解决命名冲突
  3. *this指向对象的本体
  4. 非静态成员函数才有this指针

this指针的类型:

  1. 类类型* const

  2. 只能在“成员函数”的内部使用

  3. this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this 形参。所以对象中不存储this指针。

  4. this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户 传递

       #include<iostream>
       
       using namespace std;
       
       // this 可以解决命名冲突
       
       class Person
       {
       public:
       	Person(int age)
       	{
       		this->age = age;
       	}
       
       	//对比年龄
       	void compareAge(Person &p)
       	{
       		if (this->age == p.age)
       		{
       			cout << "相等" << endl;
       		}
       		else
       		{
       			cout << "不相等" << endl;
       		}
       	}
       
       	//年龄相加
       	Person&  PlusAge(Person &p)
       	{
       		this->age += age;
       		return *this;  //*this指向对象的本体
       	}
       
       	int age;
       };
       
       void test01()
       {
       	Person p1(10);
       
       	cout << "p1的年龄" << p1.age << endl;
       
       	Person p2(10);
       
       	p1.compareAge(p2);
       
       	p1.PlusAge(p2).PlusAge(p2);//链式编程
       	//函数返回值作为左值 返回引用
       	cout << "p1的年龄" << p1.age << endl;
       }
       
       
       int main()
       {
       	test01();
       	system("pause");
       	return 0;
       }
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值