this指针

Posted 拉风小宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了this指针相关的知识,希望对你有一定的参考价值。

最近在上北大郭炜老师的C++面向对象课程,整理一些笔记哈~~

this指针可以用来理解为是将C++程序翻译成C程序的指针

C++程序到C程序的翻译

例如下面两段代码

C++

class CCar
public:
	int price;
	void SetPrice(int p);
;

void CCar::SetPrice(int p)
 
	price=p;


int main()

	CCar car;
	car.SetPrice(20000);
	return 0;

翻译为C程序为

struct CCar
public:
	int price;
;

void SetPrice(struct CCar * this, int p)
 
	this->price=p;


int main()

	struct CCar car;
	SetPrice(&car, 20000);
	return 0;

普通的成员函数翻译成C语言之后的参数会多一个,就是this指针

this指针作用

this指针的作用就是指向成员函数所作用的对象

非静态成员函数中可以直接使用this来代表指向该函数作用的对象的指针

class Complex 
public:
	double real, imag;
	void Print() cout<<real<<","<<imag;
	Complex(double r, double i):real(r),imag(i)
	
	Complex AddOne()
		this->real ++;
		this->Print();
		return *this;
		
;

int main()
	Complex c1(1,1),c2(0,0);
	c2=c1.AddOne();//等价于real++;
	return 0;//等价于Print

再看一个例子

#include <iostream>
using namespace std;
class A
	int i;
public:
	void Hello()cout<<"hello"<<endl;
;

int main()

	A *p=NULL;
	p->Hello();
	return 0;

是可以输出hello的

是因为可以翻译成

	void Hello(A *this) cout<<"hello"<<endl;

以及

p->Hello();相当于

	Hello(p);

但是如果是

	void Hello(A *this) cout<<i<<"hello"<<endl;

将会报错,因为this->i没有元素

this指针和静态成员函数

静态成员函数中不能使用this指针,这还是因为静态并不具体作用于某个对象。

因此静态成员函数的真实的参数的个数,就是程序中写出的参数个数

以上是关于this指针的主要内容,如果未能解决你的问题,请参考以下文章

C++多态与this指针问题

this指针

C++类体系中this指针不能改变指向吗?

this指针是指向虚函数表的指针

this指针

this指针详解