《深入详解VC++》第三者 74页关于this指针指向子类的问题
2013-03-27 13:11
671 查看
在第三章的74页中,有这样一行代码:pModuleState->m_pCurrentWinApp = this;作者说,根据C++继承性原理,这个this对象代表的是子类CTestApp实例化的一个对象,即theApp。
我对这个地方不明白,为什么在基类的构造函数中的this指针会指向一个派生类的对象,后看作者讲的视频,还是不明白,遂上网搜寻答案,找了半天终于明白了。下面是一个小小的测试程序。
[cpp] view
plaincopyprint?
#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();
}
运行结果如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/09/5d92d10c7a5e7fa68a57c6c0fc4ce144.gif)
为什么是这样的结果呢?我们首先要知道: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
我对这个地方不明白,为什么在基类的构造函数中的this指针会指向一个派生类的对象,后看作者讲的视频,还是不明白,遂上网搜寻答案,找了半天终于明白了。下面是一个小小的测试程序。
[cpp] view
plaincopyprint?
#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();
}
运行结果如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/09/5d92d10c7a5e7fa68a57c6c0fc4ce144.gif)
为什么是这样的结果呢?我们首先要知道: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
相关文章推荐
- C++关于基类指针指向子类对象的问题
- 关于JS中for循环时,作用域问题和this指针指向的总结
- C++关于父类指针指向子类对象的问题
- 关于基类指针指向子类对象,构造函数和析构函数调用的顺序的问题。
- 关于javascript中的this更改指向问题
- 关于js构造函数中this的指向问题
- 父类构造函数中的this指针在子类构造对象后,这个this指针指向什么
- C++ 多态问题:为什么不直接用子类引用子类,而是用父类指针指向子类
- vue使用axios时关于this的指向问题详解
- WCF-005:关于 WCF 基础连接已经关闭 连接被意外关闭-不是使用父类指向子类问题
- 关于百度地图SDK在" SDKInitializer.initialize(this);"初始化报空指针的问题
- 关于this指向问题
- 关于ajax的this指向问题,以及行间事件的this指向。
- oc 关于对象release后 指向它的指针如何处理的问题
- 关于多指针指向同一块内存的问题!
- 关于孙鑫MFC视频第三章中this指针指向基类还是派生类的测试程序
- 多重继承下,不同基类指针指向同一子类对象的地址问题——腾讯一笔试题
- 关于指向结构体的指针——又一个指针用法中容易忽略的问题
- 关于函数中this指向的问题
- [转载]关于C++的子类指针指向父类