this指针基础介绍

=================this指针的由来====================

一个学生可以有多本书一样,而这些书都是属于这个同学的;同理,如果有很多个同学在一起,那么为了确定他们的书不要拿混淆了,最好的办法我想应该就是每个同学都在自己的书上写上名字,这样肯定就不会拿错了。

同理,一个对象的多个成员就可看作是这个对象所拥有的书;而在很多个对象中间,我们为了证明某个成员是自己的成员,而不是其他对象的成员,我们同样需要给这些成员取上名字。在C++中,我们利用this指针帮助对象做到这一点,this指针记录每个对象的内存地址,然后通过运算符->访问该对象的成员。

=================this指针作用示例====================

二话不说!我们通过一个程序来体现this指针的实际用处:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#include <iostream>

using namespace std;

class A

{

public:

    int get() const{return i;}

    void set(int x){this->i=x;cout<<"this指针保存的内存地址为:"<<this<<endl;}

private:

    int i;

};

int main()

{

    A a;

    a.set(9);

    cout<<"对象a所在的内存地址为:"<<&a<<endl;

    cout<<"对象a所保存的值为:"<<a.get()<<endl;

    cout<<endl;

    A b;

    b.set(999);

    cout<<"对象b所在的内存地址为:"<<&b<<endl;

    cout<<"对象b所保存的值为:"<<b.get()<<endl;

    return 0;

}

这个程序的输出如下:

通过这个输出结果,我们可以看到,对象a的内存地址和this指针的一模一样(都是0017F7E8);而当运行到对象b的时候,它的内存地址又和它所对应的this指针指向的内存地址一模一样了(都是0017F7DC)。这就说明了this指针变量记录的是当前对象的内存地址,即this指针指向当前的对象!

在程序的第8行,我们就用了this指针的这个属性,即:this->i=x;这句话就表示把x的值赋值给当前的对象的私有成员函数i。

=================总结====================

通过上面这个例子,我们可以看到this指针最大的作用就是它保存了当前对象的地址,并且应用指针的形式指向了当前的对象。这种好处我们将会在另外一篇博文中看到.......

转自:http://www.cnblogs.com/uniqueliu/archive/2011/09/24/2189545.html

时间: 2024-10-11 07:31:13

this指针基础介绍的相关文章

Boost智能指针-基础篇

简介 内存管理一直是 C++ 一个比较繁琐的问题,而智能指针却可以很好的解决这个问题,在初始化时就已经预定了删除,排解了后顾之忧.1998年修订的第一版C++标准只提供了一种智能指针:std::auto_ptr(现以废弃),它基本上就像是个普通的指针:通过地址来访问一个动态分配的对象.std::auto_ptr之所以被看作是智能指针,是因为它会在析构的时候调用delete操作符来自动释放所包含的对象.当然这要求在初始化的时候,传给它一个由new操作符返回的对象的地址.既然std::auto_pt

C语言--&gt;(十)指针基础

知识点: 1.指针基础 2.指针和函数(地址传递) ======================================= 指针是C中的一个重要的概念,也是C的一个重要特色.掌握指针的应用,可以使程序简洁.紧凑.高效. 指针的概念比较复杂,使用也比较灵活,因此初学时会常出错,我们要理解每一个概念的本质,多加练习,在实践中掌握它. 程序使用指针和没有没有使用指针的代码是两个档次. ========================================指针基础 [地址概念] 1.生

【简译】jQuery对象的奥秘:基础介绍

本文翻译自此文章 你有没有遇到过类似$(".cta").click(function(){})这样的JavaScript代码并且在想“$('#x')是什么”?如果这些对你想天书一样,请往下读.如果你认为这些代码不可能是真的,请浏览一些jQuery例子,他们都是这种结构. 这篇文章覆盖了像下面一样吓人的代码片段中涉及的关键概念.我们以一个长例子开始,这个长例子是基于一个让一个正方形运动的简单例子(a simple example of animating a square).你可能不需要

Zabbix 3.0 基础介绍 [一]

Zabbix 3.0 基础介绍 [一] zabbix 一.Zabbix介绍 zabbix 简介   Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费的技术支持赢利   zabbix是一个基于Web界面的,提供分布式系统监控以及网络监视功能的企业级的开源解决方案.   zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题

【OpenGL】“我叫MT”纯手工3D动画制作之1——基础介绍

最近在家研习面经,温习基础,索性花些时间将本科期间完成的一些学习之作整理出来,分享之余顺便水点经验 其实这个事情起源于一门“计算机图形与动画(Computer Graphics & Animation)”的外方课程,当初的外籍教师Tony教的很认真,对于这门课自己也投入了非常多的时间.言归正传,这里先介绍一些涉及的技术,熟悉的同学请跳过哈~ A.几何物体建模 带阴影的后面我会介绍到的哦~ 加下划线的后面我后面会举栗子的哦~ B.涉及的图形学技术与应用 C.动画技术 参考文献 1.王汝传,张登银,

二级指针基础知识

/* ============================================================================ Name : TestDoublePointer.c Author : lf Version : Copyright : Your copyright notice Description : 二级指针基础知识 ================================================================

qt model/view 架构基础介绍之QTreeWidget

# -*- coding: utf-8 -*- # python:2.x #说明:QTreeWidget用于展示树型结构,也就是层次结构同前面说的 QListWidget 类似,这个类需要同另外一个辅助类 # QTreeWidgetItem 一起使用.不过,既然是提供方面的封装类,即便是看上去很复杂的树, # 在使用这个类的时候也是显得比较简单的 __author__ = 'Administrator' from PyQt4.QtGui import  * from PyQt4.Qt impor

qt model/view 架构基础介绍之QTableWidget

# -*- coding: utf-8 -*- # python:2.x #说明:QTreeWidget用于展示树型结构,也就是层次结构同前面说的 QListWidget 类似,这个类需要同另外一个辅助类 # QTreeWidgetItem 一起使用.不过,既然是提供方面的封装类,即便是看上去很复杂的树, # 在使用这个类的时候也是显得比较简单的 __author__ = 'Administrator' from PyQt4.QtGui import  * from PyQt4.Qt impor

Erlang基础 -- 介绍 -- Wordcount示例演示

在前两个blog中,已经说了Erlang的历史.应用场景.特点,这次主要演示一个Wordcount的示例,就是给定一个文本文件,统计这个文本文件中的单词以及该单词出现的次数. 今天和群友们讨论了一个问题,突然一下子就上升到哲学角度上了,装逼装大发了. PS:图片中有错别字,%s/财务和其他9个月/财务和其他9个人/g 不过真心想说的一点是,把Erlang系统,映射到现实中,很多奇葩问题,就能迎刃而解了.所以,在下面的简要设计中,我就尽可能的代入一下现实世界吧. 环境安装 mac 的话,用brew