C++中this指针的介绍及使用实例讲解

 更新时间:2025年05月08日 17:03:18   作者:秋风&萧瑟  
这篇文章主要介绍了C++中this指针的介绍及使用实例讲解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

this指针的介绍及使用

1.this指针的作用

Cat &cmpAge(Cat &other)
{
	if(other.age>age)
	    return other;
	else
	    return *this;
}

用这个例子引出this指针:
指向当前对象的一个指针,哪个对象调用成员函数,this指针就指向该对象

示例代码1:(this指针存放当前对象的地址)

#include <iostream>
using namespace std;
/*
    引入this指针:C++专门用来指向当前对象地址的一个指针
                  当前对象是谁,this指针就自动存放了谁的地址
    当前对象:谁调用了成员函数,谁就是当前对象
*/
class Rect
{
public:
    /*
        底层原理:
          当前对象.show();
          Rect *this=&当前对象 
    */
    void show()
    {
        cout<<"this指针打印出来的地址是当前对象的地址: "<<this<<endl;
    }
};
int main(int argc,char **argv)
{
    //创建矩形类的对象
    Rect r1;
    Rect r2;
    cout<<"r1的地址: "<<&r1<<endl;
    cout<<"r2的地址: "<<&r2<<endl;
    //当前对象:谁(r1)调用了成员函数,谁(r1)就是当前对象
    r1.show();
    //当前对象:谁(r2)调用了成员函数,谁(r2)就是当前对象
    r2.show();
}
/*
执行结果:
	r1的地址: 0x7ffdf90a5cb6
	r2的地址: 0x7ffdf90a5cb7
	this指针打印出来的地址是当前对象的地址: 0x7ffdf90a5cb6
	this指针打印出来的地址是当前对象的地址: 0x7ffdf90a5cb7
*/

示例代码2:(this指针的使用)

#include <iostream>
using namespace std;
/*
    引入this指针:C++专门用来指向当前对象地址的一个指针
                  当前对象是谁,this指针就自动存放了谁的地址
    定义方法:比较两个矩形对象的大小(按照w和h比较,要求w,h都同时大于另外一个矩形),返回较大的那个对象
*/
class Rect
{
public:
    //定义方法给w,h设置值,间接地使用w和h
    void setAttr(float _w,float _h);
    //比较两个矩形的大小
    Rect compare(Rect &other)
    {
        if((this->w)>other.w && (this->h)>other.h)
        {
            return *this;
        }
        else
            return other;
    }
    void show()
    {
        cout<<"宽: "<<w<<endl;
        cout<<"高: "<<h<<endl;
    }
private:
    //属性
    float w;  
    float h; 
};
void Rect::setAttr(float _w,float _h)
{
    w=_w;
    h=_h;
}
int main(int argc,char **argv)
{
    //创建矩形类的对象
    Rect r1;
    Rect r2;
    //设置宽高
    r1.setAttr(9.8,5.6);
    r2.setAttr(1.2,0.5);
    //比较大小
    //写法1:当前对象就是r1
    //Rect temp=r1.compare(r2);
    //temp.show();
    //写法2:当前对象就是r2
    Rect temp=r2.compare(r1);
    temp.show();
}
/*
执行结果:
    宽: 9.8
    高: 5.6
*/ 

2.this指针的写法

this->age //指针调用
(*this).age //this解引用

示例代码:

#include <iostream>
using namespace std;
/*
    this指针平时写成员函数代码,可以省略的
*/
class Rect
{
public:
    void show()
    {
    }
    void setAttr(float _w,float _h)
    {
        //写法1:标准的写法-->写全面
        //this->w=_w;
        //this->h=_h;
        //写法2:省略this的写法
        w=_w;
        h=_h;
    }
private:
    float w;
    float h;
};
int main(int argc,char **argv)
{
    Rect r1;
    Rect r2;
    r1.setAttr(1.2,0.8);
}

到此这篇关于C++中this指针的介绍及使用的文章就介绍到这了,更多相关C++ this指针内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Opencv光流运动物体追踪详解

    Opencv光流运动物体追踪详解

    这篇文章主要为大家详细介绍了Opencv光流运动物体追踪的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 算法详解之分治法具体实现

    算法详解之分治法具体实现

    这篇文章主要介绍了算法详解之分治法具体实现,需要的朋友可以参考下
    2014-02-02
  • OpenMP task construct 实现原理及源码示例解析

    OpenMP task construct 实现原理及源码示例解析

    这篇文章主要为大家介绍了OpenMP task construct 实现原理及源码示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • C语言获取程序名称的四种方法

    C语言获取程序名称的四种方法

    这篇文章主要为大家详细介绍了C语言中获取程序名称的四种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • C++实现leetcode(3.最长无重复字符的子串)

    C++实现leetcode(3.最长无重复字符的子串)

    这篇文章主要介绍了C++实现leetcode(3.最长无重复字符的子串),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++如何将二叉搜索树转换成双向循环链表(双指针或数组)

    C++如何将二叉搜索树转换成双向循环链表(双指针或数组)

    这篇文章主要介绍了C++如何将二叉搜索树转换成双向循环链表(双指针或数组),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • C/C++之预定义常量详解

    C/C++之预定义常量详解

    C/C++预定义常量是编译器与标准库提供的核心工具,涵盖数值边界、编译环境、语言标准、文件定位等维度,用于确保跨平台兼容性、防止溢出、精准调试及版本信息记录,显著提升代码健壮性与可维护性
    2025-09-09
  • C++深入分析STL中map容器的使用

    C++深入分析STL中map容器的使用

    map在编程中是经常使用的一个容器,本文来讲解一下STL中的map,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • c++优先队列用法知识点总结

    c++优先队列用法知识点总结

    在本篇文章里小编给大家整理的是关于c++优先队列用法知识点总结内容,需要的朋友可以参考学习下。
    2020-02-02
  • 详解C++中对构造函数和赋值运算符的复制和移动操作

    详解C++中对构造函数和赋值运算符的复制和移动操作

    这篇文章主要介绍了C++中对构造函数和赋值运算符的复制和移动,是C++入门学习中的基础知识,需要的朋友可以参考下
    2016-01-01

最新评论