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指针的主要内容,如果未能解决你的问题,请参考以下文章