zoukankan      html  css  js  c++  java
  • 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;
    }

    再次运行:

     这次没有问题了。

  • 相关阅读:
    MySQL简单实现多字段模糊查询【转】
    PHP检测URL格式是否正确域名地址是否有效【转】
    php如何判断IP为有效IP地址【转】
    PHP isset() 函数使用【转】
    php生成唯一随机码【转】
    php判断一个值是否在数组中【转】
    Win10系统gpedit.msc文件找不到,如何解决【转】
    B
    【金色】种瓜得瓜,种豆得豆 Gym
    J
  • 原文地址:https://www.cnblogs.com/bwjblogs/p/12727876.html
Copyright © 2011-2022 走看看