首页 > 编程语言 >C++ this指针

C++ this指针

时间:2024-03-21 18:55:51浏览次数:26  
标签:函数 访问 对象 成员 C++ 静态 指针

1. this指针的用处

一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。

this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。例如,调用:

date.SetMonth(9) <===> SetMonth(&date, 9)

this帮助完成了这一转换。

在成员函数内部,我们可以直接使用调用该函数的对象的成员,而无需通过成员访问运算符来做到这一点,因为this所指的正是这个对象。任何对类成员的直接访问都被看成this的隐式使用。

this的目的总是指向这个对象,所以this是一个常量指针,我们不允许改变this中保存的地址。

2. this指针的使用:

  • 一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;
  • 另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。

标签:函数,访问,对象,成员,C++,静态,指针
From: https://www.cnblogs.com/love-9/p/18088041

相关文章

  • 复试C++16真题_程序设计1_输出句子中每个单词长度
    输入一行文本,按照相应格式输出每个单词的长度#include<iostream>usingnamespacestd;#include<string>#include<vector>#include<iomanip>intmain(){stringsen="qweasdaxszfsfsddwfas";//getline(cin,sen);如果要把输入的空格的记录......
  • C++的内存管理
    1.C/C++内存分布我们可以先来了解一下具体的内存区域分布图,通过一个代码 那么我们想为什么要划分这些区域?为了方便管理因为我们在程序中有不同类型的数据(静态,局部,全局等)比如生命周期的不同,放到不同的区域进行管理哪个是我们重点关注的?堆区。因为其他区域不用管释......
  • c++算法学习笔记 (15) 质数
    1.试除法判断某个数是否为质数#include<iostream>usingnamespacestd;constintN=50005;boolis_prime1(intn){//暴力写法:O(n)if(n<2)returnfalse;for(inti=2;i<n;i++){if(n%i==0)returnfalse;......
  • C++ 纯虚函数
    纯虚函数优点防止派生类忘记实现虚函数,纯虚函数使得派生类必须实现基类的虚函数。在某些场景下,创建基类对象是不合理的,含有纯虚拟函数的类称为抽象类,它不能直接生成对象。声明方法:在基类中纯虚函数的方法的后面加=0。virtualvoidfuntion()=0;virtualstd::stringGetN......
  • C++ 空基类优化
    1.继承体系中的内存模型我们都知道,在C++中,不存在大小是零的类。即便是空类,也要占据一个字节,否则无法比较两个空类对象是否是同一个对象(在C/C++中,默认使用地址来判断两个变量是否是同一个)。classBaseEmpty{public: BaseEmpty(){std::cout<<"Baseaddress:"<<this......
  • C语言(一级指针)
    指针本质:地址一级指针一级指针变量名:存储普通变量的地址格式:存储类型        数据类型        *指针变量名                                int                *pinta=5;int*p=&a;--------......
  • c/c++|gdb 单点调试 | 多点调试|查看栈中信息|具体变量
    设置断点,有什么好处,废话就不说了,可以去看手册设置断点,参考bxxx.cpp:n某个源文件的某行bfunc1调试某个函数编译g++test_gdb_watch.cpp-g设置断点bpowerr出现报错Missingseparatedebuginfos,use:debuginfo-installglibc-2.17-326.el7_9.x86_64libg......
  • C++ 对象模型
    1.普通类对象是什么布局?structBase{Base()=default;~Base()=default;voidFunc(){}inta;intb;};intmain(){Basea;return0;}2.带虚函数的类对象是什么布局?structBase{Base()=default;virtual~Base()......
  • c++模板
    前言大家好,我是jiantaoyab,这篇文章给大家带来c++模板的介绍,模板是泛型程序设计的基础,模板就是类或者函数的蓝图,后一篇文章我将开始介绍STL,模板在STL中大量的运用。模板分为函数模板和类模板函数模板格式template<typenameT1,typenameT2,......,typenameTn>//参数......
  • C++ 合成默认构造函数
    问题:C++面向对象编程时,如果我们没有声明任何构造函数constructor,按照以前最初学习,说编译器会自动合成一个默认的无参构造函数defaultconstructor,但是事实确实是这样吗,存不存在例外呢,即使有合成构造函数,那么它又将对类数据进行怎样的初始化呢?1.问题一如果我们没有声明任何构造......