设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 1104|回复: 9
打印 上一主题 下一主题

简单的例子,不明白的问题.请指点...........

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-3 03:09:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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.
2#
发表于 2009-11-3 03:09:12 | 只看该作者
InitInstace是虚函数,根据实际对象类型来决定调用的函数,而AfxGetApp返回的虽然是CWinApp *类型指针,但是指向的对象却是CMyWinApp类型,所以调用的实际上是CMyWinApp的方法InitInstance
lz要好好看看书上关于虚函数的定义
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-3 03:09:13 | 只看该作者
那条语句使CWinApp指针,指向CMyWinApp对象了,是这条吗.return theApp.m_pCurrentWinApp;

如果这样的话还能理解
CMyWinApp theApp;
CWinApp *pApp=&theApp;
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-3 03:09:14 | 只看该作者
嗯,return theApp.m_pCurrentWinApp中theApp.m_pCurrentWinApp指向的是CMyWinApp类型对象theApp的地址
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-3 03:09:15 | 只看该作者
谢版主了,我刚才也测试了一下.
用typeid(*pApp).name(),输出的信息确实是CMyWinApp类型.
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-3 03:09:17 | 只看该作者
版主,有一事相求.

有C++QQ群吗.

让我加进去行吗.

这是我的QQ号:673034589
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-3 03:09:19 | 只看该作者
没有群,有啥事?先申明,不帮忙编一个完整的程序
回复 支持 反对

使用道具 举报

8#
发表于 2009-11-3 03:09:21 | 只看该作者
已经加你为好友了
回复 支持 反对

使用道具 举报

9#
发表于 2009-11-3 03:09:23 | 只看该作者
版主,误会了.

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

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

确实现在有些人利用技术群,做一些交易什么的,很恶.
回复 支持 反对

使用道具 举报

10#
发表于 2009-11-3 03:09:25 | 只看该作者
哦,没事,你在论坛上问问题也一样,只要把问题说明白了会有人回答你的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 05:29 , Processed in 0.121307 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表