新微赢技术网
标题:
简单的例子,不明白的问题.请指点...........
[打印本页]
作者:
温柔乡
时间:
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