您的位置:首页 > 编程语言 > C语言/C++

VC++深入详解 笔记 第三章(1) this指针的测试

2011-04-24 22:33 225 查看
在第三章的74页中,有这样一行代码:pModuleState->m_pCurrentWinApp = this;作者说,根据C++继承性原理,这个this对象代表的是子类CTestApp实例化的一个对象,即theApp。

我对这个地方不明白,为什么在基类的构造函数中的this指针会指向一个派生类的对象,后看作者讲的视频,还是不明白,遂上网搜寻答案,找了半天终于明白了。下面是一个小小的测试程序。

#include <iostream.h>
class base
{
public:
base *pointer;
public:
base()
{
pointer = this;
}
virtual void output()
{
cout<<"output base!"<<endl;
}
};
class derive:public base
{
public:
void output()
{
pointer = this;
cout<<"output derive!"<<endl;
}
};

void main()
{
base base_variable;
base_variable.pointer->output();

derive derive_variable;
derive_variable.pointer->output();
}


运行结果如下:



为什么是这样的结果呢?我们首先要知道:this指针指向的是一个类的对象,而且指向的是当前实例化的对象。我们先看看main()函数中,我们总共构造了两个对象,一个是基类的对象base_variable,一个是派生类的对象derive_variable。我们再看看基类中的构造函数base()什么时候会被调用呢?很明显,构造一个基类对象和构造一个派生类对象时都会调用。

在我们构造基类对象base_variable时,this指针指向这个对象,所以pointer也会指向这个对象,所以调用的output()函数是基类中的output()函数。而我们构造派生类对象derive_variable时,this指针指向这个对象,所以调用的output()函数是派生类中的output()函数。

所以程序输出这样的结果,我们也就能够理解为什么了。74页的那个问题也OK了。

参考论坛:http://topic.csdn.net/u/20070210/03/b30591d0-4d27-430c-b31e-5a2b7ee8011c.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: