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

运行结果:

C++this指针

 

 我们可以看到,使用无参构造函数的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;
}

再次运行:
C++this指针

 

 这次没有问题了。

原文链接: https://www.cnblogs.com/bwjblogs/p/12727876.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++this指针

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/342998

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午1:52
下一篇 2023年3月2日 上午1:52

相关推荐