您当前的位置: 首页 >  c++

小林coding

暂无认证

  • 1浏览

    0关注

    167博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++ this指针的理解和作用

小林coding 发布时间:2019-11-28 23:36:52 ,浏览量:1

微信公众号:「小林coding」 用简洁的方式,分享编程小知识。

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

要想理解 C++ 的 this 指针,我们先把下面的 C++ 代码转换成 C 的代码

class Car 
{
public:
	int m_price;         // 成员变量
	void SetPrice(int p) // 成员函数
	{
	    m_price = p; 
	}
};

int main()
{
	Car car;
	car.SetPrice(20000); // 给car对象m_price成员变量赋值
	
	return 0;
}

C 语言是没有类定义的class关键词,但是有跟class类似的定义,那就是结构体struct

m_price变量是Car类的成员变量,那么我们可以把Car类和成员变量翻译成如下的 C 代码:

// 结构体Car
struct Car
{
    // price变量是属于Car结构体这个域里的变量
    int price;  
};

SetPrice函数是Car类的成员函数,但是 C 程序里是没有成员函数这种概念的,所以只能把成员函数翻译成全局的函数:

// 参数1:结构体Car的指针
// 参数2:要设置的价格变量
void SetPrice(struct Car* this, int p)
{ 
    this->price = p;  // 将传入的Car结构体的price变量赋值
}

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

在这里我们把上面main函数下面的 C++ 程序翻译 C 程序是这样的:

int main() 
{
    struct Car car;
    SetPrice( &car, 20000);
    return 0;
}

所以最终把上述的 C++程序 转换成C 程序的代码如下:

struct Car
{
    int price;  
};


void SetPrice(struct Car* this, int p)
{ 
    this->price = p; 
}

int main() 
{
    struct Car car;
    SetPrice( &car, 20000); // 给car结构体的price变量赋值
    return 0;
}
02 this指针的作用

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

#include 

class Car 
{
public:
	int m_price;
	
	void PrintPrice()
	{
		std::cout             
关注
打赏
1659932071
查看更多评论
0.0980s