当前位置: 首页 > news >正文

C++——this关键字

在 C++ 中,this 关键字是一个指向当前对象的指针,它隐含在类的非静态成员函数中,用于标识当前正在操作的对象

1.this 的作用

  • 访问成员变量:当成员变量与函数参数同名时,用 this-> 明确指向对象的成员。

  • 链式调用:通过返回 *this 实现方法的连续调用(类似 obj.method1().method2())。

  • 传递当前对象:在函数中需要将对象自身作为参数传递时使用(例如回调函数)。

  • 区分局部变量:明确代码意图,避免命名冲突。

2. 基础用法示例

场景 1:成员变量与参数同名

#include <iostream>
using namespace std;  // 使用标准命名空间(注意:实际工程中不建议全局使用)

// 汽车类定义
class Car
{
private:
    string brand;  // 品牌(成员变量)
    string type;   // 车型(成员变量)
    int year;      // 生产年限(成员变量)

public:
    // 构造函数(通过this指针初始化成员变量)
    // 参数说明:
    // brand - 要设置的品牌名称(与成员变量同名)
    // type  - 要设置的车型名称(与成员变量同名)
    // year  - 要设置的生产年限(与成员变量同名)
    Car(string brand, string type, int year)
    {
        // 使用this指针区分同名的成员变量和参数
        this->brand = brand;  // 将参数brand赋值给当前对象的brand成员
        this->type = type;     // 将参数type赋值给当前对象的type成员
        this->year = year;     // 将参数year赋值给当前对象的year成员
    };
    
    // 声明打印函数(类内声明,类外实现)
    void printFunc();
};

// 类外实现成员函数(必须使用作用域运算符::)
void Car::printFunc()
{
    // 输出对象信息(访问的是成员变量)
    cout << "品牌:" << brand 
         << ",车型:" << type 
         << ",年限:" << year << endl;
}

int main()
{
    // 创建Car对象(调用构造函数初始化)
    // 参数说明:
    // "小米" - 初始化brand成员
    // "SU7"  - 初始化type成员
    // 2025   - 初始化year成员
    Car car("小米", "SU7", 2025);

    // 调用成员函数打印信息
    car.printFunc();

    return 0;
}

场景 2:链式调用(返回 *this

#include <iostream>

using namespace std;

class Car
{
private:
    string brand;
    string type;
    int year;

public:
    // 带有参数的构造函数
    Car(string brand, string type, int year)
    {
        this->brand = brand; // this->brand 表示car这个对象里面的brand成员变量
        this->type = type;
        this->year = year;
    };
    
    // 表示函数返回当前对象的引用
    Car& setYear(int year) 
    {
        this->year = year;
        return *this; // 解引用this指针,得到当前对象本身。
    }
    
    // 打印函数
    void printFunc();
};

// 在Car类外定义一个打印函数
void Car::printFunc()
{
    cout << "品牌:" << brand << ",车型:" << type <<",年限:" << year << endl;
}

int main()
{
    Car car("小米","SU7",2025);
    car.printFunc();
    
    // 链式调用
    car.setYear(2024).printFunc(); // 这个引用会被链式调用中的后续操作接收,
                                   // 确保所有操作作用于同一个对象。
    
    return 0;
}

总结

  • this 的用途

    • 解决成员变量与参数命名冲突。

    • 实现链式调用(如 obj.method1().method2())。

    • 在需要传递当前对象时使用(如回调、事件处理)。

  • 关键规则

    • 只能在类的非静态成员函数中使用。

    • 静态函数、全局函数中不可用。

通过合理使用 this,可以提升代码的清晰度和灵活性,尤其在面向对象设计中非常实用。

http://www.dtcms.com/a/112790.html

相关文章:

  • 基于SpringBoot + Vue3的仓库(WMS)/进销存/ERP管理系统
  • 【双维畅聊】网页版聊天室测试报告
  • TC3xx芯片的UCB介绍
  • Photoshop 快捷键指南
  • springboot457-库存管理系统(源码+数据库+纯前后端分离+部署讲解等)
  • 谷歌开源单个 GPU 可运行的Gemma 3 模型,27B 超越 671B 参数的 DeepSeek
  • 在js中数组相关用法讲解
  • Git for Windows 历史版本下载教程
  • 单词排序(信息学奥赛一本通-1185)
  • 架构思维:查询分离 - 表数据量大查询缓慢的优化方案
  • 2025大唐杯仿真1——车联网
  • mysql 8.0.27-docker
  • 第二章 react redux的学习,多个reducer
  • 什么是DHCP服务,在生活中的应用是什么?
  • 使用QAction编辑器添加QAction到ui里
  • 【数字电路】第一章 数制和码制
  • Kotlin 集合函数:map 和 first 的使用场景
  • 自定义组件触发饿了么表单校验
  • LaTeX、KaTeX、Markdown 的用法
  • 15.2linux设备树下的platform驱动编写(程序)_csdn
  • 与 AI 共舞:解锁自我提升的无限可能
  • 如何通过优化HMI设计大幅提升产品竞争力?
  • 配置网络编辑器
  • 【Rust学习】Rust环境搭建和Rust基础语法
  • Jetpack Compose 自定义组件完全指南
  • python基础-13-处理excel电子表格
  • 叁仟数智指路机器人的智能导航精度如何?
  • 【爬虫案例】采集 Instagram 平台数据几种方式(python脚本可直接运行)
  • 你用的是Bing吗?!
  • 【AI论文】GPT-ImgEval:一个用于诊断GPT4o在图像生成方面的综合基准