服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++简明图解this指针的使用

C++简明图解this指针的使用

2022-12-14 12:43Bright-SKY C/C++

this 指针在C++类和对象中是个很方便实用的关键字,可以简化对象成员属性的调用,使代码表达的含义更加准确;在之前的学习中我们都可以判断变量所占内存空间大小,那么我们创建的类对象所占的内存空间怎么计算呢?想知道t

c++的封装性:将数据 和 方法 封装在一起

数据 和 方法 是分开存储。

每个对象 拥有独立的数据.

每个对象 共享同一个方法。

 

成员数据和成员函数的存储方式

1、成员函数不占类的空间

2、静态成员数据不占类的空间

C++简明图解this指针的使用

 

this指针的引入

class Data
{
public:
  int m_num;

  void setNum(int num)
  {
      m_num = num;
  }
};
void test01()
{
  Data ob1;
  ob1.setNum(10);
  cout<<"ob1.m_num = "<<ob1.m_num<<endl;
  Data ob2;
  ob2.setNum(20);
  cout<<"ob2.m_num = "<<ob2.m_num<<endl;
  Data ob3;
  ob3.setNum(30);
  cout<<"ob3.m_num = "<<ob3.m_num<<endl;
}

运行结果:

C++简明图解this指针的使用

 

this指针概述

1、对象调用普通成员函数 在成员函数内部会产生一个指向该对象的this指针(this指针变量 是系统定义的)

2、this指针的目的:说明当前成员函数 是属于哪个对象的

3、静态成员函数内部 没有this指针

C++简明图解this指针的使用

class Data
{
public:
  int m_num;
  void setNum(int num)
  {
      //m_num = num;
      this->m_num = num;
  }
};
void test01()
{
  Data ob1;
  ob1.setNum(10);
  cout<<"ob1.m_num = "<<ob1.m_num<<endl;
  Data ob2;
  ob2.setNum(20);
  cout<<"ob2.m_num = "<<ob2.m_num<<endl;
  Data ob3;
  ob3.setNum(30);
  cout<<"ob3.m_num = "<<ob3.m_num<<endl;
}

运行结果:

C++简明图解this指针的使用

注意:

1、this指针是隐含在对象成员函数内的一种指针

2、成员函数通过 this指针 即可知道操作的是那个对象的数据(定位对象)

3、静态成员函数内部没有this指针,静态成员函数不能操作非静态成员变量

(静态成员函数 是属于类 函数内部 没有this指针)

 

this指针的使用

1、当形参和成员变量同名时,可用this指针来区分

class Data
{
public:
  int num;
  //形参 和成员名相同
  void setNum(int num)
  {
      //形参num
      //成员num  this->num
      //num= num;//就近原则 形参num 赋值给 形参num
      this->num = num;
      //将形参num 赋值给 对象中成员num
  }
};

2、在类的普通成员函数中返回对象本身(*this)(重要)

class MyCout
{
public:
  MyCout& myCout(char *str)
  {
      cout<<str;
      return *this;//*this 代表就是 当前调用该函数的对象
  }
};
int main(int argc, char *argv[])
{
  MyCout ob;
  /*
  ob.myCout("hehe");
  ob.myCout("haha");
  ob.myCout("xixi");*/
  ob.myCout("hehe").myCout("haha").myCout("xixi");//ob.myCout("hehe") == ob
  return 0;
}

运行结果:

C++简明图解this指针的使用

3、如果成员数据和函数的形参 同名 必须使用this指针

class Data
{
public:
  int a;//4B
public:
  void setA(int a)
  {
      this->a = a;
      return;
  }
  int getA(void)
  {
      return this->a;
  }
};

4、this指针完成链式操作

class Printf
{
public:
  Printf& myPrint(int value)
  {
      cout<<value<<" ";
      //*this ==外界的对象
      return *this;
  }
};
void test01()
{
  Printf ob;
  ob.myPrint(10).myPrint(20).myPrint(30).myPrint(40);
  cout<<endl;
}

C++简明图解this指针的使用

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

原文链接:https://blog.csdn.net/qq_34981463/article/details/125055309

延伸 · 阅读

精彩推荐
  • C/C++一篇文章教你3分钟如何发布Qt程序

    一篇文章教你3分钟如何发布Qt程序

    这篇文章主要给大家介绍了关于教你3分钟如何发布Qt程序的相关资料,文中通过实例代码结束的非常详细,对大家的学习或者工作具有一定的参考学习价值...

    Coding十日谈8292021-09-24
  • C/C++C语言数据结构之堆排序的优化算法

    C语言数据结构之堆排序的优化算法

    堆排序Heap Sort就是利用堆进行排序的方法,下面这篇文章主要给大家介绍了关于C语言数据结构之堆排序的优化算法的相关资料,文中通过实例代码介绍的非常...

    小白又菜7652022-11-12
  • C/C++C++实现LeetCode(102.二叉树层序遍历)

    C++实现LeetCode(102.二叉树层序遍历)

    这篇文章主要介绍了C++实现LeetCode(102.二叉树层序遍历),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    Grandyang7352021-12-01
  • C/C++C++实现学生成绩管理系统

    C++实现学生成绩管理系统

    这篇文章主要为大家详细介绍了C++实现学生成绩管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    ~赵6092021-10-13
  • C/C++C语言实现酒店客房管理系统课程设计

    C语言实现酒店客房管理系统课程设计

    这篇文章主要为大家详细介绍了C语言实现酒店客房管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    N J H7702022-10-21
  • C/C++C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别

    C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别

    这篇文章主要介绍了C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别的相关资料,需要的朋友可以参考下...

    everett4562021-05-08
  • C/C++socket多人聊天程序C语言版(二)

    socket多人聊天程序C语言版(二)

    这篇文章主要为大家详细介绍了socket多人聊天程序C语言版第二篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    _acme_7362021-04-18
  • C/C++C++中使用function和bind绑定类成员函数的方法详解

    C++中使用function和bind绑定类成员函数的方法详解

    这篇文章主要介绍了C++中使用function和bind绑定类成员函数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友...

    dxgzg9882021-10-06