首页 > 编程知识 正文

this指针的概念和作用,如何理解this指针

时间:2023-05-05 22:08:16 阅读:41131 作者:4991

01 C程序到c程序的翻译

要理解c上的this指针,请首先将以下c代码转换为c代码

类角色

{

公共:

int m_price; //成员变量

语音(intp ) /成员函数

{

m_price=p;

}

(;

int main () )

{

Car car;

car.setprice(20000; //car对象为m_price成员变量赋值

返回0;

}

c语言是没有类定义的class关键字,但有与class类似的定义。 那是结构体struct。

因为m_price变量是Car类的成员变量,所以可以将Car类和成员变量翻译为c代码,例如:

//结构体Car

结构汽车

{

//price变量是属于Car结构体这一域的变量

int price;

(;

SetPrice函数是Car类的成员函数,但c程序没有成员函数的概念,因此只能将成员函数翻译成全局函数:

//参数1 :结构Car指针

//参数2 :要设定的价格变量

语音设置(结构car * this,int p ) )。

{

this-price=p; //为传递的Car结构的price变量赋值

}

为什么要添加this的指针? 我们继续往下看。

现在,将上面main函数下的c程序翻译为c程序如下:

int main () )

{

结构Car;

setprice(car,20000 );

返回0;

}

因此,最终将上述c程序转换为c程序的代码如下:

结构汽车

{

int price;

(;

语音设置(结构car * this,int p ) )。

{

this-price=p;

}

int main () )

{

结构Car;

setprice(car,20000 ); 为//car结构的price变量赋值

返回0;

}

02 this指针的作用

其作用是指成员函数所作用的对象,

因此,对于非静态成员函数,可以直接使用this来表示指向该函数工作所在的对象的指针。

#包含

类角色

{

公共:

int m_price;

void打印价格(

{

STD :3360 coutm _ prices TD 33603360 endl;

}

是语音设置(intp )

{

this-m_price=p; 等效于m_price=p

this-PrintPrice (; 等效于打印价格

}

Car GetCar () )

{

返回* This; //返回该函数所作用的对象

}

(;

输入主(语音) )。

{

Car car1、car2;

car1.setprice(20000;

//GetCar ) )成员函数返回其所作用的car1对象,并将返回的car1指派给car2

car2=car1.GetCar (;

car2.打印price (;

返回0;

}

输出结果:

20000

20000

在下面的代码中,你认为输出结果是什么? 会发生错误吗?

类a

{

int i;

公共:

void Hello () { cout 'hello' endl; }

(;

int main () )

{

A * p=NULL;

p-Hello (; //结果会怎么样?

}

答案是正常输出hello。 您可能很好奇p指针为空,程序是否不会崩溃。 请不要着急。 如果先把上面的代码转换成c程序,就能理解为什么会正常工作。

void Hello () { cout 'hello' endl; }

#成员函数相当于以下格式:

voidhello(a*this ) { cout 'hello' endl; }

p-Hello (;

Hello )格式执行如下:

光晕(p );

因此,实际上每个成员函数的第一个参数默认具有指向对象的this指针。 在上述情况下,如果对象为空,且成员函数的第一个参数为NULL,则如果成员函数未用于成员变量,则会成功执行。

执行以下代码时,它会走向崩溃。 程序将崩溃,因为this指针为空,空指针指向成员变量I。

类a

{

int i;

公共:

void Hello () { cout i 'hello' endl; }

//-voidhello(a*this ) { cout this-i 'hello' endl; }

(;

int main () )

{

A * p=NULL;

p-Hello (; //-Hello(P );

}

03 this指针和静态成员函数

不能使用this指针,因为静态成员函数相当于不属于对象的共享变量。

04总结

通过将c程序翻译为c程序,了解this指针。 其作用是指非静态成员函数所作用的对象,每个成员函数的第一个参数实际上具有默认的this指针参数。

静态成员函数不能使用this指针。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。