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

【C++】C++中this指针的介绍及使用

this指针的介绍及使用

  • 1.this指针的作用
    • 示例代码1:(this指针存放当前对象的地址)
    • 示例代码2:(this指针的使用)
  • 2.this指针的写法
    • 示例代码:

1.this指针的作用

Cat &cmpAge(Cat &other)
{if(other.age>age)return other;elsereturn *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的地址: 0x7ffdf90a5cb6r2的地址: 0x7ffdf90a5cb7this指针打印出来的地址是当前对象的地址: 0x7ffdf90a5cb6this指针打印出来的地址是当前对象的地址: 0x7ffdf90a5cb7
*/

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

#include <iostream>using namespace std;/*引入this指针:C++专门用来指向当前对象地址的一个指针当前对象是谁,this指针就自动存放了谁的地址定义方法:比较两个矩形对象的大小(按照w和h比较,要求w,h都同时大于另外一个矩形),返回较大的那个对象
*/
class Rect
{
public://定义方法给w,h设置值,间接地使用w和hvoid setAttr(float _w,float _h);//比较两个矩形的大小Rect compare(Rect &other){if((this->w)>other.w && (this->h)>other.h){return *this;}elsereturn 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:当前对象就是r2Rect 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);}
http://www.xdnf.cn/news/4297.html

相关文章:

  • 实现引用计数线程安全的shared_ptr
  • 从Huggingface下载模型的方法小结
  • Linux如何安装AppImage程序
  • WHAT - Rust 静态派发(Static Dispatch)和 动态派发(Dynamic Dispatch)
  • 计算机视觉注意力机制【一】常用注意力机制整理
  • The Action Replay Process
  • spark行动算子
  • Java中对象集合转换的优雅实现【实体属性范围缩小为vo】:ListUtil.convert方法详解
  • mujoco仿真器学习笔记
  • 孤岛铜怎么解决
  • CAN报文中的标准帧和扩展帧
  • C++ string的使用
  • C++输入输出
  • 基础的OSPF实验配置笔记
  • 车载诊断框架 --- 车载网关诊断通信与网关角色
  • WordPress_AdsProPlugin Sql注入漏洞复现(CVE-2024-13322)
  • Navicat访问mongo时密码转义字符问题
  • 大模型主干
  • 驱动开发系列57 - Linux Graphics QXL显卡驱动代码分析(四)显示区域更新
  • 量子教育演示系统:交互式Bloch球面与Bell态可视化技术解析
  • 【JEECG】BasicTable内嵌Table表格错位
  • 强化学习+多模态 从理论到实战
  • 黑马点评day04(分布式锁-setnx)
  • Python 脚本打包成可执行的 .exe 文件
  • 【四川省专升本计算机基础】第一章 计算机基础知识(上)
  • Redis面试 实战贴 后面持续更新链接
  • 拨叉831003加工工艺规程及夹具设计
  • 学习黑客初看肉鸡
  • 本地运行qwen3:30b-a3b速度测试
  • Python Cookbook-7.3 在 Pickling 的时候压缩