C++this指针
this指针
this在C++中是一个关键字。
this是一个指针,它指向被调用对象本身。
什么意思呢?就是一个类中有this关键字,并且这个类创建了多个对象,我们在使用一个对象的方法或者访问一个对象的属性时(这个对象被调用),使用的是这个对象的方法和自己的属性。
我们还是举个例子来说明吧!
先写一个头文件Circle.h
class Circle { public: //圆的半径 double radius; //定义常量圆周率 const double PI = 3.14159;//无参构造函数 Circle(); //有参构造函数 Circle(double); //获取圆的面积 double getArea(); };
如果把实现文件Circle.cpp写成这样 :
#include "Circle.h" //无参构造函数 Circle::Circle() { radius = 1; } //有参构造函数 Circle::Circle(double radius) { radius = radius; } //获取面积 double Circle::getArea() { return radius*radius*PI; }
main.cpp如下:
#include <iostream> #include "Circle.h" using namespace std; int main() { //调用无参构造函数 Circle c1; //调用有参构造函数,参数为1 Circle c2(1); //调用有参构造函数,参数为3 Circle c3(3); cout << "c1的半径是" << c1.radius << ",面积是" << c1.getArea() << endl; cout << "c2的半径是" << c2.radius << ",面积是" << c2.getArea() << endl; cout << "c3的半径是" << c3.radius << ",面积是" << c3.getArea() << endl; return 0; }
运行结果:
我们可以看到,使用无参构造函数的c1没有问题,但是使用有参构造函数的c2和c3明显不正确。
主要原因是,Circle.cpp中有参构造函数的形参名和要赋值的变量名一致。
因此,我们可以使用this指针,指向对象本身的radius属性。
修改后的Circle.cpp:
#include "Circle.h" //无参构造函数 Circle::Circle() { this->radius = 1; } //有参构造函数 Circle::Circle(double radius) { this->radius = radius; } //获取面积 double Circle::getArea() { return radius*radius*PI; }
再次运行:
这次没有问题了。