C++ this指针的理解和作用 | 您所在的位置:网站首页 › 为什么要释放指针呢英语怎么说 › C++ this指针的理解和作用 |
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 PrintPrice();// 等价于 PrintPrice(); } Car GetCar() { return *this; // 返回该函数作用的对象 } }; int main(void) { Car car1, car2; car1.SetPrice(20000); // GetCar()成员函数返回所作用的car1对象,所把返回的car1赋值给了car2 car2 = car1.GetCar(); car2.PrintPrice(); return 0; }输出结果: 20000 20000接下来我们下面的代码,你觉得输出结果是什么呢?会出错吗? class A { int i; public: void Hello() { cout |
CopyRight 2018-2019 实验室设备网 版权所有 |