C++ 之 this指针的使用

在 C++ 中,this 是一个指向当前对象的指针。当你在类的成员函数内部访问对象的成员变量或成员函数时,this 指针可以用来引用当前正在被调用的对象。

以下是 this 指针的主要用途和含义:

1. 引用成员变量:

在类的成员函数内部,可以使用 this-> 来引用对象的成员变量。

cpp 复制代码
class MyClass {
public:
    int myVar;

    void setVar(int var) {
        this->myVar = var;
    }
};

2. 返回对象自身:

在某些情况下,你可能需要在成员函数中返回对象自身的引用。使用 this 可以方便地实现这一功能。

cpp 复制代码
class MyClass {
public:
    int myVar;

    MyClass(int var) : myVar(var) {}

    MyClass& getSelf() {
        return *this;
    }
};

3. 解决命名冲突:

在成员函数参数名与成员变量名相同时,可以使用 this 指针来引用成员变量,以避免命名冲突。

cpp 复制代码
class MyClass {
public:
    int myVar;

    MyClass(int myVar) {
        this->myVar = myVar;
    }
};

注意事项:

  • this 指针只能在非静态成员函数内部使用,因为静态成员函数没有与任何特定对象实例相关联。
  • 在使用 this 指针之前,通常需要检查指针是否为空,以防止空指针解引用的错误。

总之,this 指针在 C++ 中用于引用当前正在被调用的对象,它是面向对象编程中的一个重要概念,帮助我们在类的成员函数内部访问和操作对象的成员变量和成员函数。

cpp 复制代码
#include <iostream>

class Person {
private:
    std::string name;
    int age;

public:
    // 构造函数
    Person(const std::string& name, int age) {
        this->name = name;
        this->age = age;
    }

    // 成员函数,设置姓名
    void setName(const std::string& name) {
        this->name = name;
    }

    // 成员函数,设置年龄
    void setAge(int age) {
        this->age = age;
    }

    // 成员函数,获取姓名
    std::string getName() const {
        return this->name;
    }

    // 成员函数,获取年龄
    int getAge() const {
        return this->age;
    }

    // 成员函数,显示个人信息
    void display() const {
        std::cout << "Name: " << this->name << ", Age: " << this->age << std::endl;
    }

    // 成员函数,返回对象自身的引用
    Person& getSelf() {
        return *this;
    }
};

int main() {
    // 创建 Person 对象
    Person person("Alice", 30);

    // 使用成员函数设置姓名和年龄
    person.setName("Bob");
    person.setAge(25);

    // 使用成员函数获取姓名和年龄,并显示个人信息
    std::cout << "Name: " << person.getName() << ", Age: " << person.getAge() << std::endl;
    person.display();

    // 返回对象自身的引用并显示个人信息
    Person& selfRef = person.getSelf();
    selfRef.display();

    return 0;
}
相关推荐
见叶之秋2 小时前
C++ 泛型世界的两块拼图:容器适配器与仿函数
java·开发语言
逗脑IDE2 小时前
零基础学ESP32:RFID无线射频卡——让ESP32拥有“刷卡“能力!
开发语言·网络·人工智能·python·esp32·硬件开发
小师兄吃牛肉2 小时前
C语言篇:内联函数
c语言·开发语言
yuniko-n3 小时前
【Java】字符串相关坑点
java·开发语言·python
jimy13 小时前
虚函数vtable,链接时看到构造函数,linker把符号地址写入vtable(三)
开发语言·c++
ss2733 小时前
AI全栈实战 | 3.3-02 Python 并发:有 GIL 为什么还用多线程,asyncio 和 JS 事件循环同源不同味
开发语言·javascript·python
菜鸟~noob2333 小时前
【电子战】第20篇:凸优化与对数障碍法【含matlab代码】
开发语言·matlab
Wang's Blog3 小时前
Java框架 SpringCloud 快速入门: 服务拆分案例 Demo
java·开发语言·spring cloud
小小龙学IT4 小时前
Python SQLAlchemy 2.0 深度解析:从 Core 到 ORM 的数据访问双引擎
开发语言·数据库·python
2601_962885724 小时前
如何用 Python 计算 ROC 变动率指标做动量分析?
开发语言·python·算法