C++中this指针理解及作用
目录
- 01、C++程序到C程序的翻译
- 02、this指针的作用
- 03、this指针和静态成员函数
- 04、小结
01、C++程序到C程序的翻译
想要理解C++语言中的this指针,下面我们做一个举例,我们要先把下面的C++代码转换成C代码:
(1)大家知道,C语言中没有类定义class关键词,但是有跟class类似的定义关键词,就是struct结构体定义。m_height变量是Tree类的成员变量,那么我们就可以把Tree类和成员变量翻译成下面的C代码:
(2)SetHeight函数是Tree类的成员函数,但是C程序里面没有成员函数这个概念的,所以只能把成员函数翻译成全局的函数:
那为什么还要再加个this指针呢?我们接着继续往下看。
(3)接下来把C++中的main函数翻译成C程序,是下面这样的:
所以最终把上面的C++程序转变为C程序的代码如下:
加上SetHeignt函数的第一个参数this指针的作用,就是为了给结构体Tree域里的变量赋值。
02、this指针的作用
this指针的作用就是指向成员函数所作用的对象,所以非静态成员函数中可以直接使用this来代表指向该函数作用的对象的指针。
03、this指针和静态成员函数
静态成员函数不能使用this指针,因为静态成员函数相当于是共享的变量,不属于某个对象的变量。
04、小结
(1)通过将C++程序翻译成C程序的方式,来理解this指针,其作用就是指向非静态成员函数所作用的对象,每个成员函数的第一个参数实际上都有个默认this指针参数;(2)静态成员函数无法使用this指针。
到此这篇关于C++中this指针理解及作用的文章就介绍到这了,更多相关C++ this指针 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
C++深入探究类与对象之对象模型与this指针使用方法
目录 C++对象模型和this指针 1 成员变量和成员函数分开存储 2 this指针概念 3 空指针访问成员函数 4 const修饰成员函数 C++面向对象的三大特性为:封装.继承.多态 C++认为万事万物都皆为对象,对象上有其属性和行为 例如: 人可以作为对象,属性有姓名.年龄.身高.体重…,行为有走.跑.跳.吃饭.唱歌… 车也可以作为对象,属性有轮胎.方向盘.车灯…,行为有载人.放音乐.放空调… 具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类 C++对象模型和th
-
C++深入浅出讲解隐藏this指针的用法
目录 1.this指针的引出 2.this指针的特性 3.练习一下 本篇文章我们将一起讨论在有趣的知识点--隐藏的this指针.本篇我们要使用到之前我们所学习到的C++类与对象,如果有各位小伙伴还不曾了解类与对象的简单思想,可以访问上篇: 在之后的学习中,我们将认识一个新的类:日期类Date.正如我们所想的那样,传入一个日期,我们可以输出我们所输入的日期. 1.this指针的引出 那我们首先来看一下,这段代码会输出什么结果呢? class Date { public: void Display(
-
一起来学习C++中类的this指针以使用
目录 一,this指针的注意点 错误用例: 二,this指针存在哪里 三,this指针的面试坑题 总结 c++的类中,非静态的成员函数都有一个隐藏的this指针,在函数体中所以的成员变量都是通过this指针来访问的.但是this指针是对用户是透明的,用户不需要显示的给this指针传参,编译时会自动接收参数. 一,this指针的注意点 调用成员函数时,不可以显示给this指针传参 定义成员函数时,不能显示的声明this指针 在成员函数内部,可以显示的使用this指针 用一个日期类,来讲述this指
-
C++ 中this指针的用途详解
目录 1.区分形参和变量同名时: 2.return *this返回函数本身 总结 先说结论: 1.形参和变量同名时,可用this指针来区分 2.在类的非静态成员函数中返回本身,可用return *this 1.区分形参和变量同名时: #include <iostream> using namespace std; class Person { public: Person(int age) { age = age; } int age; }; void test01() { Person p1
-
C++对象模型和this指针详解
目录 对象模型 一. 二. 三. 四. 五. this指针 一. 二. 总结 对象模型 成员变量和成员函数分开存储 一. 只有非静态成员变量才属于类的对象上 空对象占用字节为1 class Person { }; void test01() { Person p; cout << "size of = " << sizeof(p) << endl; } int main() { test01(); system("pause");
-
C++超详细讲解内存空间分配与this指针
目录 成员属性和函数的存储 空对象 成员属性的存储 成员函数的存储 this指针的概念 解决名称冲突 返回对象指针*this 总结 成员属性和函数的存储 在C++中成员变量和成员函数是分开存储的: 空对象 class Person {}; 这里我直接创建一个空的类,并创建一个空的类对象(Person p),利用sizeof关键字输出p所占内存空间,sizeof(p);结果是p=1: 注意:空对象占用内存空间为: 1.C++编译器会给每个空对象分配一个字节空间,是为了区分空对象占内存的位置 2.每
-
C++简明图解this指针的使用
目录 成员数据和成员函数的存储方式 this指针的引入 this指针概述 this指针的使用 c++的封装性:将数据 和 方法 封装在一起 数据 和 方法 是分开存储. 每个对象 拥有独立的数据. 每个对象 共享同一个方法. 成员数据和成员函数的存储方式 1.成员函数不占类的空间 2.静态成员数据不占类的空间 this指针的引入 class Data { public: int m_num; void setNum(int num) { m_num = num; } }; void test01
-
C++函数指针+对象指针+this指针+指向类静态和非静态成员的指针
目录 1.指向函数的指针 2.对象指针 3.this指针 4.指向类的非静态成员的指针 5.指向类的静态成员的指针 1.指向函数的指针 函数的代码在内存中的首地址,是由函数名表示的,也就是说函数名等价于函数代码首地址.因此,可以定义一个指向函数的指针,即函数指针.函数指针定义和赋值的语法如下,其中数据类型代表指向函数的返回类型,形参表为指向函数的形参表:赋值时必须保证指向的函数名和函数指针的返回类型和形参完全相同: 数据类型 (*函数指针名)(形参表);函数指针名 = 函数名; 下面的例子定义了
-
C++this指针详情
还是Stock股票这个类,假设我们要实现一个方法,比较一下当前股票和传入的股票, 返回价格高的那个股票.在我们实现的时候,会遇到一点问题. const Stock & Stock::topVal(const Stock &s) const { if (s.total_val > total_val) { return s; }else { return ????; } } 这段代码当中有一些问题,我们一个一个来说. 首先说函数签
-
C++中this指针理解及作用
目录 01.C++程序到C程序的翻译 02.this指针的作用 03.this指针和静态成员函数 04.小结 01.C++程序到C程序的翻译 想要理解C++语言中的this指针,下面我们做一个举例,我们要先把下面的C++代码转换成C代码: (1)大家知道,C语言中没有类定义class关键词,但是有跟class类似的定义关键词,就是struct结构体定义.m_height变量是Tree类的成员变量,那么我们就可以把Tree类和成员变量翻译成下面的C代码: (2)SetHeight函数是Tree类的
-
C++中this指针的理解与作用详解
01 C++ 程序到 C 程序的翻译 要想理解 C++ 的 this 指针,我们先把下面的 C++ 代码转换成 C 的代码 class Car { public: int m_price; // 成员变量 void SetPrice(int p) // 成员函数 { m_price = p; } }; int main() { Car car; car.SetPrice(20000); // 给car对象m_price成员变量赋值 return 0; } C 语言是没有类定义的class关键词,
-
一文理解Android系统中强指针的实现
强指针和弱指针基础 android中的智能指针包括:轻量级指针.强指针.弱指针. 强指针:它主要是通过强引用计数来进行维护对象的生命周期. 弱指针:它主要是通过弱引用计数来进行维护所指向对象的生命周期. 如果在一个类中使用了强指针或者弱指针的技术,那么这个类就必须从RefBase这个类进行做继承,因为强指针和弱指针是通过RefBase这个类来提供实现的引用计数器. 强指针和弱指针关系相对于轻量级指针来说更加亲密,因此他们一般是相互配合使用的. 强指针原理分析 以下针对源码的分析都是来源于andr
-
手拉手教你如何理解c/c++中的指针
目录 前言 一,内存和地址 二,指针的本质就是地址 三,常量指针与指针常量 四,指针与数组 五,数组指针与指针数组 六,指针函数与函数指针 总结 前言 指针是c语言为什么如此流行的一个重要原因,正是有了指针的存在,才使得c/c++能够可以比使用其他语言编写出更为紧凑和有效的程序,可以说,没有掌握指针,就没有权利说自己会用c/c++.然而.然而对于大多数初学者,面对指针这个概念简直是望而生畏,如果前期指针运用的不熟练,后期编写的程序随时都有可能成为一颗定时炸弹,因此今天我就花点时间给大家解释一下我
-
C语言中的指针以及二级指针代码详解
很多初学者都对C中的指针很迷糊,希望这篇blog能帮助到大家: 1.什么是"指针": 在执行C程序的时候,由于我们的数据是存储在内存中的.所以对于C程序本身来说,如果想找到相应被调用的数据,就要知道存储该数据的内存地址是多少,换言之,C程序通过已知的内存地址到相应的内存位置存储数据. 这里简单说一下内存管理(对于初学者来说.为了避免专业术语引发的理解问题,下面的叙述尽量避免专业定义:),对于现代计算机系统来说,内存空间分为两个区域,一个是"数据区",一个是"
-
一起来了解一下C++中的指针
目录 1 指针的基本概念 2 指针变量的定义和使用 3 指针所占内存空间 4 空指针和野指针 5 const修饰指针 6 指针和数组 7 指针和函数 8 指针.数组.函数 总结 1 指针的基本概念 作用:可以通过指针间接访问内存. 内存编号是从0开始记录的,一般用十六进制数字表示.可以利用指针变量保存地址. 2 指针变量的定义和使用 指针变量定义语法: 数据类型* 变量名; &可以取地址;*可以取地址存放的值 示例: #include<iostream> using namespace
-
浅谈iOS开发中static变量的三大作用
(1)先来介绍它的第一条也是最重要的一条:隐藏 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.为理解这句话,我举例来说明.我们要同时编译两个源文件,一个是a.c,另一个是main.c. 下面是a.c的内容 char a = 'A'; // global variable void msg() { printf("Hello\n"); } 下面是main.c的内容 int main(void) { extern char a; // extern v
-
Go语言中的指针运算实例分析
本文实例分析了Go语言中的指针运算方法.分享给大家供大家参考.具体分析如下: Go语言的语法上是不支持指针运算的,所有指针都在可控的一个范围内使用,没有C语言的*void然后随意转换指针类型这样的东西.最近在思考Go如何操作共享内存,共享内存就需要把指针转成不同类型或者对指针进行运算再获取数据. 这里对Go语言内置的unsafe模块做了一个实验,发现通过unsafe模块,Go语言一样可以做指针运算,只是比C的方式繁琐一些,但是理解上是一样的. 下面是实验代码: 复制代码 代码如下: packag
-
对于Python中RawString的理解介绍
总结 1.'''作用: 可以表示 "多行注释" ."多行字符串" ."其内的单双引号不转义" 2.r 代表的意思是: raw 3.r 只对其内的反斜杠起作用(注意单个 \ 的问题) raw string 有什么用处呢? raw string 就是会自动将反斜杠转义. >>> print('\n') >>> print(r'\n') \n >>> (注:出现了两个空行是因为 print() 会自
-
Swift中的指针操作详解
前言 Objective-C和C语言经常需要使用到指针.Swift中的数据类型由于良好的设计,使其可以和基于指针的C语言API无缝混用.但是语法上有很大的差别. 默认情况下,Swift 是内存安全的,这意味着它禁止我们直接操作内存,并且确保所有的变量在使用前都已经被正确地初始化了.但是,Swift 也提供了我们使用指针直接操作内存的方法,直接操作内存是很危险的行为,很容易就出现错误,因此官方将直接操作内存称为 "unsafe 特性". 一旦我们开始直接操作内存,一切就得靠我们自己了,因
随机推荐
- js 常用正则表达式表单验证代码
- 深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
- VBS教程:函数-FormatNumber 函数
- iOS获取当前连接的WiFi以及IP地址
- javascript和jquery分别实现的九九乘法表代码
- javascript自适应宽度的瀑布流实现思路
- 12小时制和24小时制获取当天零点的问题探讨
- 使用Eclipse配置android开发环境教程
- destoon后台网站设置变成空白的解决方法
- C#画笔Pen使用路径绘制图形的方法
- MySQL清空数据表的方法实例与分析
- Bootstrap树形菜单插件TreeView.js使用方法详解
- PHP实现原生态图片上传封装类方法
- JavaScript基础知识之方法汇总结
- sed删除文件中的一行内容的脚本代码
- Ajax提交参数的值中带有html标签不能提交成功的解决办法(ASP.NET)
- 金山反病毒20041217_日报
- 23种设计模式(8) java外观模式
- C#实现Json转DataTable并导出Excel的方法示例
- java实现酒店管理系统