this指针和m_hWnd的区别
m_hWnd
① m_hWnd这个成员变量,最早是定义在类CWnd中,而且是类CWnd的第一个数据成员,
先看一下MSDN的解析:
The handle of the Windows window attached to this CWnd. The m_hWnd data member is a
public variable of type HWND.
由此可知,它是窗口类的一个句柄,凡是从CWnd派生的类都有这个句柄,凡是以CWnd派
生的类定义的对象内部也都有这个句柄,它是类或者对象标识自己的句柄。
凡是窗口都有一个句柄用来标识自己,在CWnd类中将这个句柄作为一个成员变量直接封装
了,所以CWnd类的成员函数都没有句柄这个参数了,比如::ShowWindow(HWND hWnd),在
CWnd类或者派生类中,这个函数就没有参数了,CWnd::ShowWindow(),其实这个函数实
现很简单,就是调用了::ShowWindow(HWND hWnd),因为在类里已经封装好了,所以也不需
要在传递参数了。
② 哪如何获得窗口类的自己的句柄呢?有如下方法:
1、this->m_hWnd;
2、GetSafeHwnd();
3、AfxGetMainWnd()->m_hWnd;
this
① 对于类成员函数而言,并不是一个对象对应一个单独的成员函数体,而是此类的所有对
象共用这个成员函数体,即调用同一个代码段
当对一个对象调用非静态成员函数时,编译程序会自动先将对象的地址赋给成员函数的
this指针,即作为一个隐含参数传递给成员函数;然后每次非静态成员函数存取非静态数据
成员时,由隐含使用this指针,即都会被转化为this->数据成员的方式。
。当程序被编译之后,此成员函数地址即已确
定。而成员函数之所以能把属于此类的各个对象的数据区别开, 就是靠this指针,也就是对
于每一个类的非静态成员函数,都有一个隐含的this指针,该指针指向调用该成员函数的实
例对象。
② 一个对象的this指针并不是对象本身的一部分,不会影响sizeof("对象")的结果;它是一
个隐含于每一个类的成员函数中的特殊指针。它指向正在被该成员函数操作的那个对象。
③ 在C++中,this指针被隐含地声明为: X *const this,这意味着不能给this 指针赋值;在X
类的const成员函数中,this指针的类型为:const X* const, 这说明this指针所指向的这种对
象是不可修改的(即不能对这种对象的数据成员进行赋值操作);
④ 由于this并不是一个常规变量,所以,不能取得this的地址。
⑤显式引用this指针的地方:
1、在类的非静态成员函数中返回类对象本身的时候,直接使用
return *this;
2、为避免对同一对象进行赋值操作,例如在重载运算符"="时,如:
ClassText& operator = (const ClassText& instance)
{
if(this == &instance) { return *this;
}
m_nSize = instance.m_nSize;
if(NULL != m_pBuffer) {
delete [] m_pBuffer;
}
m_pBuffer = new char[MAX_PATH];
if(NULL != m_pBuffer ) {
strncpy(m_pBuffer, instance.m_pBuffer, MAX_PATH);
}
return *this;
}
3、当形式参数与成员变量名相同时,如
this->n = n (不能写成n = n),否则无法实现对成员
变量的赋值操作;
当然了,对于静态成员的访问,就不需要通过this进行访问了,只要在函数名字前加上类
名限定符即可,这也就是为什么静态函数无法访问非静态成员了(没有对象指针,如何访问
其成员变量?),静态成员函数自然能访问静态成员变量。因些说:静态成员变量实际上就
是一种有访问限制的全局变量而已。从类的外部访问静态成员变量,前面需要加上类名限定
符。
this指针和m_hWnd的区别的更多相关文章
- C++ 中指针与引用的区别
指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过v ...
- c语言 指针与地址的区别
指针由两部分组成,指针的类型和指针的值(也就是变量的地址). 指针和地址的区别: 地址只是一堆十六进制的字符,对应着内存条的某段内存, 而指针本身有地址,指针的值也是一个地址,指针本身还有类型,这与单 ...
- 指针和引用的区别(c/c++)
http://blog.csdn.net/thisispan/article/details/7456169 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用 ...
- 转贴:C++中指针和引用的区别
从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有 ...
- C程序设计语言--指针和引用的区别
在看了一篇文章以后,http://coolshell.cn/articles/7992.html,说的是C和C++之间的缺陷,当然这篇文章说的非常高深了.所以就找了一些资料,分析了这两者的区别 在&l ...
- 【C++】指针与引用的区别
本文主要总结在C++中指针与引用的区别. 从定义与性质来看指针与引用有如下区别: 指针表示的是一块变量的地址 引用表示一个变量的别名. 因此指针变量需要占用空间(一个指针变量在32位系统下占用4字节, ...
- C语言中指针和数组的区别
看<C专家编程>一书,看到数组与指针并不相同一章,遂做了一段测试: 代码: #include <stdio.h> #include <stdlib.h> int m ...
- c++ 浅拷贝和深拷贝 指针和引用的区别 malloc(free)和new(delete)的区别 重载重写重定义
4.malloc(free)和new(delete)的区别 malloc()函数: 1.1 malloc的全称是memory allocation,中文叫动态内存分配. 原型:extern void ...
- C++指针和数组的区别(不能混用的情况)
通常情况下,C++中指针和数组是可以混用的,但是,在编写字符数组的全排列的时候,混用却出了问题,因此,今天特地mark一下,以备日后查找 这里整理的,不包括用new开辟的动态数组 1.数组一旦声明,我 ...
随机推荐
- Qt之QTableView添加复选框(QAbstractItemDelegate)
简述 上节分享了使用自定义模型QAbstractTableModel来实现复选框.下面我们来介绍另外一种方式: 自定义委托-QAbstractItemDelegate. 简述 效果 QAbstract ...
- UVa 1401 (Tire树) Remember the Word
d(i)表示从i开始的后缀即S[i, L-1]的分解方法数,字符串为S[0, L-1] 则有d(i) = sum{ d(i+len(x)) | 单词x是S[i, L-1]的前缀 } 递推边界为d(L) ...
- H.264码流结构解析
from:http://wenku.baidu.com/link?url=hYQHJcAWUIS-8C7nSBbf-8lGagYGXKb5msVwQKWyXFAcPLU5gR4BKOVLrFOw4bX ...
- Darwin Streaming Server用vs2005编译运行过程
原创. 一:编译 Darwin6.0.3版本是最新版本,也提供了.dsw文件.但是使用vs2005和vc6是编译不过的.所以,采用Darwin5.5.5版本.使用vc6打开WinNTSupport文件 ...
- UVa 11300 Spreading the Wealth 分金币
圆桌旁坐着 n 个人,每个人都有一定数量的金币,金币总数能够被 n 整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等.你的任务是求出被转手的金币数量的最小值,比如 n = 4, ...
- poj 1236 Network of Schools
题目描述:有一些学校连接到一个计算机网络.这些学校之间达成了一个协议:每个学校维护着一个学校列表,它向学校列表中的学校发布软件.注意,如果学校B在学校A的列表中,则A不一定在B的列表中.任务A:计算为 ...
- NYOJ-779-兰州烧饼
[题目链接:NYOJ-779] 兰州烧饼 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 烧饼有两面,要做好一个兰州烧饼,要两面都弄热.当然,一次只能弄一个的话,效率 ...
- 【RMQ问题】求数组区间最大值,NYOJ-1185-最大最小值
转自:http://blog.csdn.net/lilongherolilong/article/details/6624390 先挖好坑,明天该去郑轻找虐 RMQ(Range Minimum/Max ...
- Jabber/XMPP协议与架构
一.概述 由Jeremie Miller于1998年开始这个项目.Jabber是一个开放源码形式组织产生的网络实时通信协议,第一个公开版本于2000年5月发行.Jabber已经由IETF XMPP协议 ...
- Solr部署如何启动
我刚接触solr,我要怎么启动,这是群里的朋友问得比较多的问题, solr最新版本下载地址: http://www.apache.org/dyn/closer.cgi/lucene/solr/ 1.准 ...