微信公众号:「小林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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?