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

    再次运行:

     这次没有问题了。

  • 相关阅读:
    再谈C#装箱和拆箱操作
    C#装箱与拆箱总结
    大话设计模式
    创建ASP.NET Webservice
    Lambada和linq查询数据库的比较
    设置VS2015背景图片(转载)
    windows 下使用Linux 子系统-安装.net core 环境
    .net core 3.1 ef Migrations 使用 CLI 数据迁移及同步
    linq 大数据 sql 查询及分页优化
    数据迁移最快方式,多线程并行执行 Sql插入
  • 原文地址:https://www.cnblogs.com/bwjblogs/p/12727876.html
Copyright © 2020-2023  润新知