新微赢技术网

标题: 简单的例子,不明白的问题.请指点........... [打印本页]

作者: 温柔乡    时间: 2009-11-3 03:09
标题: 简单的例子,不明白的问题.请指点...........
#include <iostream>
using namespace std;
class CWinApp
{
public:
CWinApp *m_pCurrentWinApp;
public:
CWinApp() {
m_pCurrentWinApp = this;
cout <<"CWinApp Constructor"<<endl;
}
virtual void InitApplication() {
cout <<"CwinApp::InitApplication"<<endl;}
virtual void InitInstance() {
cout <<"CWinApp::InitInstance"<<endl;}
~CWinApp() {
cout <<"CWinApp Destructor"<<endl;}
};
class CMyWinApp : public CWinApp
{
public:
CMyWinApp() {
cout <<"CMyWinApp Constructor"<<endl;}
~CMyWinApp() {
cout <<"CMyWinApp Destructor"<<endl;}
virtual void InitInstance () {
cout <<"CMyWinApp::InitInstance"<<endl;}
};
CMyWinApp theApp;
CWinApp *AfxGetApp()
{
return theApp.m_pCurrentWinApp;
}
int _tmain(int argc, _TCHAR* argv[])
{
CWinApp *pApp=AfxGetApp();
pApp->InitInstance ();
return 0;
}
以下是执行结果:
CWinApp Constructor
CMyWinApp Constructor
CMyWinApp::InitInstance //问题在这不解.
CMyWinApp Destructor
CWinApp Destructor
Press any key to continue
即然函数AfxGetApp()返回的是基类型指针,怎么还会输出CMyWinApp::InitInstace.这条信息呢?
正常理解应该输出CWinApp::InitInstance.
作者: 独臂神军    时间: 2009-11-3 03:09
InitInstace是虚函数,根据实际对象类型来决定调用的函数,而AfxGetApp返回的虽然是CWinApp *类型指针,但是指向的对象却是CMyWinApp类型,所以调用的实际上是CMyWinApp的方法InitInstance
lz要好好看看书上关于虚函数的定义
作者: ξǒひ糀無蒛    时间: 2009-11-3 03:09
那条语句使CWinApp指针,指向CMyWinApp对象了,是这条吗.return theApp.m_pCurrentWinApp;

如果这样的话还能理解
CMyWinApp theApp;
CWinApp *pApp=&theApp;
作者: 停淼心泪    时间: 2009-11-3 03:09
嗯,return theApp.m_pCurrentWinApp中theApp.m_pCurrentWinApp指向的是CMyWinApp类型对象theApp的地址
作者: 笨笨洋葱    时间: 2009-11-3 03:09
谢版主了,我刚才也测试了一下.
用typeid(*pApp).name(),输出的信息确实是CMyWinApp类型.
作者: 爱(じΩvê)    时间: 2009-11-3 03:09
版主,有一事相求.

有C++QQ群吗.

让我加进去行吗.

这是我的QQ号:673034589
作者: liu    时间: 2009-11-3 03:09
没有群,有啥事?先申明,不帮忙编一个完整的程序
作者: 梦的放肆    时间: 2009-11-3 03:09
已经加你为好友了
作者: 黑侠    时间: 2009-11-3 03:09
版主,误会了.

我只想,加入一个关于C++的群.
这样,大家在一起交流沟通方便些.

我是个初学者,有很多不会的问题.

确实现在有些人利用技术群,做一些交易什么的,很恶.
作者: ─────╂    时间: 2009-11-3 03:09
哦,没事,你在论坛上问问题也一样,只要把问题说明白了会有人回答你的




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2