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;
}
相关推荐
泽02021 小时前
C++入门(缺省参数/函数/引用)
开发语言·c++
Themberfue3 小时前
Redis ⑦-set | Zset
java·开发语言·数据库·redis·sql·缓存
__lost4 小时前
MATLAB画出3d的常见复杂有机分子和矿物的分子结构
开发语言·人工智能·matlab·化学·分子结构
mozun20205 小时前
VS BUG(6) LINK : fatal error LNK1158: 无法运行“rc.exe”
c++·bug·vs·链接器·资源文件
夜夜敲码5 小时前
C语言教程(十八):C 语言共用体详解
c语言·开发语言
大学生亨亨5 小时前
go语言八股文(五)
开发语言·笔记·golang
raoxiaoya5 小时前
同时安装多个版本的golang
开发语言·后端·golang
whoarethenext6 小时前
初始https附带c/c++源码使用curl库调用
服务器·c++·qt·https·curl
cloues break.7 小时前
C++进阶----多态
开发语言·c++
我不会编程5557 小时前
Python Cookbook-6.10 保留对被绑定方法的引用且支持垃圾回收
开发语言·python