[C++]this指针

在C++中,this指针是一个非常重要的概念,它主要用于访问类的成员变量和成员函数。this指针是隐式地存在于每一个类的非静态成员函数中的,指向调用该成员函数的对象的地址。通过this指针,成员函数可以访问调用它的对象的成员(包括成员变量和成员函数)。

一、this指针的引入背景
  1. 成员变量与成员函数分离:在C++中,类的成员变量(属性)和成员函数(行为)在物理上是分离的。当成员函数被调用时,需要一种机制来知道是哪个对象在调用这个函数,以便可以访问该对象的成员变量。
  2. 隐式参数:为了解决这个问题,C++编译器在调用成员函数时,会自动将调用对象的地址作为第一个隐式参数传递给函数,这个隐式参数就是this指针。
二、this指针的特性
  1. 自动传递:调用成员函数时,this指针自动传递给函数,无需显式传递。
  2. 类型为类的指针this指针的类型是指向类类型的指针。
  3. 指向调用对象this指针指向调用成员函数的对象。
  4. 仅在非静态成员函数中存在:静态成员函数没有this指针,因为它们不依赖于任何特定对象实例。
  5. 可以在成员函数内部使用:虽然this指针是隐式的,但你可以在成员函数内部显式地使用this指针来访问成员。
三、this指针的用途
  1. 访问成员变量和成员函数:在成员函数内部,你可以使用this->成员变量名this->成员函数名()的形式来访问成员,但通常省略this直接使用成员名即可。
  2. 返回当前对象的引用:在一些情况下,你可能需要从一个成员函数返回调用该函数的对象的引用,此时可以使用return *this;
  3. 区分成员变量和局部变量:当成员变量和局部变量同名时,可以使用this指针来明确指定访问的是成员变量。
  4. 链式调用:在返回*this的成员函数中,可以实现链式调用(如obj.func1().func2())。
四、this指针的示例
#include <iostream>  
using namespace std;  
  
class Box {  
public:  
    double length;   // 长度  
    double breadth;  // 宽度  
    double height;   // 高度  
  
    // 成员函数声明  
    double getVolume(void) {  
        return length * breadth * height;  
    }  
  
    void setVolume(double vol) {  
        // 使用 this 指针访问成员变量  
        this->length = vol;  
        this->breadth = vol;  
        this->height = vol; // 仅为示例,实际应设置合适的值  
    }  
  
    // 演示返回对象自身的引用  
    Box& setLength(double len) {  
        length = len;  
        return *this; // 返回当前对象的引用  
    }  
  
    Box& setBreadth(double bre) {  
        breadth = bre;  
        return *this; // 链式调用  
    }  
  
    Box& setHeight(double hei) {  
        height = hei;  
        return *this; // 链式调用  
    }  
};  
  
int main() {  
    Box Box1;        // 声明 Box1,类型为 Box  
    Box1.setLength(5.0)  // 使用链式调用来设置各个维度  
         .setBreadth(6.0)  
         .setHeight(7.0);  
  
    cout << "Volume of Box1 : " << Box1.getVolume() << endl;  
  
    return 0;  
}
五、注意事项
  1. 不要对this指针进行赋值this指针是由编译器自动管理的,你不应该修改它的值。
  2. this指针不是类成员:尽管它在成员函数内部可用,但this指针本身并不是类的成员。
  3. 在静态成员函数中使用this是非法的:静态成员函数与任何特定对象实例无关,因此没有this指针。

相关推荐

  1. CHI协议-0】概述

    2024-07-15 10:34:04       35 阅读
  2. SQL常用优化手段chi

    2024-07-15 10:34:04       54 阅读
  3. 面试指南指针

    2024-07-15 10:34:04       59 阅读
  4. 指向函数的指针

    2024-07-15 10:34:04       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 10:34:04       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 10:34:04       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 10:34:04       57 阅读
  4. Python语言-面向对象

    2024-07-15 10:34:04       68 阅读

热门阅读

  1. [C++]位图+布隆过滤器

    2024-07-15 10:34:04       24 阅读
  2. GESP CCF C++ 五级认证真题 2024年6月

    2024-07-15 10:34:04       27 阅读
  3. 使用Python实现携程并发处理

    2024-07-15 10:34:04       24 阅读
  4. 为什么请求接口会在后面接?_t=

    2024-07-15 10:34:04       19 阅读
  5. Why does Wi-Fi consume more battery power than cellular data?

    2024-07-15 10:34:04       23 阅读
  6. shell中关于数组的使用

    2024-07-15 10:34:04       23 阅读