| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1017 人关注过本帖
标题:简单的例子,不明白的问题.请指点...........
只看楼主 加入收藏
wince
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-5-16
收藏
 问题点数:0 回复次数:12 
简单的例子,不明白的问题.请指点...........

#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.

搜索更多相关主题的帖子: 例子 
2006-06-13 13:31
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
InitInstace是虚函数,根据实际对象类型来决定调用的函数,而AfxGetApp返回的虽然是CWinApp *类型指针,但是指向的对象却是CMyWinApp类型,所以调用的实际上是CMyWinApp的方法InitInstance
lz要好好看看书上关于虚函数的定义

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-06-13 14:48
wince
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-5-16
收藏
得分:0 
那条语句使CWinApp指针,指向CMyWinApp对象了,是这条吗.return theApp.m_pCurrentWinApp;

如果这样的话还能理解
CMyWinApp theApp;
CWinApp *pApp=&theApp;
2006-06-13 15:22
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
嗯,return theApp.m_pCurrentWinApp中theApp.m_pCurrentWinApp指向的是CMyWinApp类型对象theApp的地址

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-06-13 15:28
wince
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-5-16
收藏
得分:0 

谢版主了,我刚才也测试了一下.
用typeid(*pApp).name(),输出的信息确实是CMyWinApp类型.

2006-06-13 15:32
wince
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-5-16
收藏
得分:0 

版主,有一事相求.

有C++QQ群吗.

让我加进去行吗.

这是我的QQ号:673034589

2006-06-13 15:35
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
没有群,有啥事?先申明,不帮忙编一个完整的程序

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-06-13 15:53
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
已经加你为好友了

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-06-13 15:58
wince
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-5-16
收藏
得分:0 

版主,误会了.

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

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

确实现在有些人利用技术群,做一些交易什么的,很恶.

2006-06-13 15:58
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 

哦,没事,你在论坛上问问题也一样,只要把问题说明白了会有人回答你的


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-06-13 16:00
快速回复:简单的例子,不明白的问题.请指点...........
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025989 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved