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

C++(10)—类和对象(上) ③this指针的详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、this指针详解
  • 二、this指针注意事项
    • 1.*this
    • 2.使用场景
  • 总结

前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、this指针详解

在C+++中,this 指针是一个隐式指针,它指向当前对象的地址。this 指针在类的非静态成员函数中可用,用于访问当前对象的成员变量和成员函数。this 指针允许成员函数访问和修改它们所属对象的状态。

this 指针的特点:

  1. 隐式可用:在类的成员函数内部,不需要显式声明 this 指针,它会自动可用。

  2. 指向当前对象this 指针指向调用成员函数的那个对象。

  3. 常量this 指针是一个右值,不能被赋值,即不能改变它指向的对象。

  4. 类型this 指针的类型是 ClassName*,其中 ClassName 是包含该成员函数的类名。

• Date类中有 Init 与 Print 两个成员函数,函数体中没有关于不同对象的区分,那当d1调⽤Init和
Print函数时,该函数是如何知道应该访问的是d1对象还是d2对象呢?那么这⾥就要看到C++给了
⼀个隐含的this指针解决这⾥的问题
• 编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this
指针。⽐如Date类的Init的真实原型为, void Init(Date* const this, int year,
int month, int day)
• 类的成员函数中访问成员变量,本质都是通过this指针访问的,如Init函数中给_year赋值, this-
>_year = year;
• C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但是可以在函数体内显⽰使⽤this指针。

#include<iostream>
using namespace std;
class Date
{
public:
// void Init(Date* const this, int year, int month, int day)
void Init(int year, int month, int day)
{
// 编译报错:error C2106: “=”: 左操作数必须为左值
// this = nullptr;
// this->_year = year;
_year = year;
this->_month = month;
this->_day = day;
}
void Print()

#include<iostream>
using namespace std;
class Date
{
public:
// void Init(Date* const this, int year, int month, int day)
void Init(int year, int month, int day)
{
// 编译报错:error C2106: “=”: 左操作数必须为左值
// this = nullptr;
// this->_year = year;
_year = year;
this->_month = month;
this->_day = day;
}
void Print()
1

二、this指针注意事项

1.*this

this:this指针是一个指向调用对象的指针

     

     void Init(Date* const this,  int year,  int month,  int day)

2.使用场景

  1. 区分成员变量和函数参数:当成员函数的参数名与成员变量名相同时,可以使用 this 指针来区分它们。

    class MyClass {
    public:
        int value;
        void setValue(int value) {
            this->value = value; // 使用 this 指针区分成员变量和参数
        }
    };
  2. 返回对象自身:在成员函数中,可以使用 this 指针返回对象自身,这在链式调用中非常有用。

    class MyClass {
    public:
        MyClass* doSomething() {
            // 执行一些操作
            return this; // 返回对象自身,允许链式调用
        }
    };
  3. 在构造函数和析构函数中this 指针在构造函数和析构函数中特别有用,因为它们需要访问和初始化对象的状态。

    class MyClass {
    public:
        MyClass() {
            this->initialize(); // 初始化对象
        }
    
        ~MyClass() {
            this->cleanup(); // 清理对象
        }
    
    private:
        void initialize() {
            // 初始化代码
        }
    
        void cleanup() {
            // 清理代码
        }
    };

总结

注意事项:

  • this 指针只在类的成员函数中有效,不能在静态成员函数中使用,因为静态成员函数不与特定的对象实例关联。

  • 在多态的情况下,this 指针指向的是实际对象的类型,而不是指针的静态类型。这使得 this 指针在实现多态行为时非常有用。

  • this 指针是一个常量指针,不能被修改,这意味着你不能通过 this 指针改变它所指向的对象。

this 指针是C++中实现面向对象编程的一个重要特性,它提供了一种方便的方式来访问和操作当前对象的状态。


http://www.kler.cn/a/500793.html

相关文章:

  • 微信小程序实现拖拽盒子效果
  • 【2024年华为OD机试】(A卷,100分)- 单词倒序(Java JS PythonC/C++)
  • el-table 合并单元格
  • 图片和短信验证码(头条项目-06)
  • 油猴支持阿里云自动登陆插件
  • SQL UNION 操作符
  • RAG技术:是将知识库的文档和问题共同输入到LLM中
  • 多媒体技术学习笔记
  • 饭搭难点亮点
  • 25/1/12 算法笔记 剖析Yolov8底层逻辑
  • 【2024年华为OD机试】(C卷,100分)- 单词加密(Java JS PythonC/C++)
  • 【学习笔记】理解深度学习的基础:机器学习
  • webpack打包要义
  • 什么是MVCC
  • 【ASP.NET学习】Web Pages 最简单的网页编程开发模型
  • 深入浅出Java Web开放平台:从API设计到安全保障的全方位探索
  • --- 多线程编程 基本用法 java ---
  • 从零开始开发纯血鸿蒙应用之多签名证书管理
  • A3. Springboot3.x集成LLama3.2实战
  • B+ 树的实现原理与应用场景
  • 20250112面试鸭特训营第20天
  • 移动端屏幕分辨率rem,less
  • 前端开发:HTML常见标签
  • 慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(二)
  • Linux权限管理(用户和权限之间的关系)
  • MATLAB语言的文件操作