在第三章的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