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的区别,布布扣,bubuko.com

时间: 2024-10-21 20:50:15

this指针和m_hWnd的区别的相关文章

C++学习笔记----2.4 C++引用在本质上是什么,它和指针到底有什么区别

从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量). 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传递过程中,被调

指针与引用的区别以及引用的三种用法

1.指针与引用的区别: 指针是一块内存的地址值,而引用是一块内存的别名. 下面引自:http://www.cnblogs.com/kingln/articles/1129114.html 从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一

转 浅谈C++中指针和引用的区别

浅谈C++中指针和引用的区别 浅谈C++中指针和引用的区别 指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a

C++中指针和引用的区别

此文转自:http://www.cnblogs.com/kingln/articles/1129114.html 从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量). 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参

C++ 中指针与引用的区别

指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过void*指针操作对象必须进行类型转化.     ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址: 引用是某块内存的别名.     ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化

指针与引用的区别和联系

指针与引用的区别: The difference between "pointer" and "reference" 区别1: 给指针A赋值的时侯,要么赋一个地址B,要么赋一个同类型的指针C ( 使用地址B赋值时,B中存储的值的类型要和A指针指向的类型一致.如果B指向的值用const 修饰,那么指针A在初始化时,最外面也要用const 修饰 使用指针C赋值时,如果指针C最外面使用const 修饰,如 const int * C  OR  const int * co

引用和指针的联系和区别

指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的. 相同点: ●都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:而引用则是某块内存的别名. 不同点: ●指针是一个实体,而引用仅是个别名: ●引用只能在定义时被初始化一次,之后不可变:指针可变:引用"从一而终&

C++小知识:指针和引用的区别

从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变.    而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量). 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的:     指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传

向函数中传递指针和传递指针的引用的区别

如果是传递指针,那么会先复制该指针,在函数内部使用的是复制后的指针,这个指针与原来的指针指向相同的地址,如果在函数内部将复制后的指针指向了另外的新的对象,那么不会影响原有的指针:但 是对于传递指针应用,如果将传递进来的指针指向了新的对象,那么原始的指针也就指向了新的对象,这样就会造成内存泄漏,因为原来指针指向的地方已经不能再 引用了,即使没有将传递进来的指针指向新的对象,而是在函数结束的时候释放了指针,那么在函数外部就不能再使用原有的指针了,因为原来的内存已经被释放了 看个例子: #includ