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;
}

再次运行:

 

 这次没有问题了。

posted @ 2020-04-19 15:04  川尘  阅读(271)  评论(0编辑  收藏  举报
`