请高手们给看段c++程序,关于this指针的

zhangyanfei01 2008-03-01 09:08:17
请看下面几行代码
class CWinApp:
{
public:
CWinApp()
{
cout<<"CWinApp constructing"<<endl;
this->fn(); //问题在这行!
}
void fn()
{
cout<<"based class fn"<<endl;
}
};
class CTestApp:public CWinApp
{
public:
CTestApp()
{
cout<<"CTestApp constructing"<<endl;
}
void fn()
{
cout<<"deprived class fn"<<endl;
}
};
CTestApp app;
void main()
{
}
全局化一个子类的对象,导致了父类的构造函数的执行。那么父类构造函数中出现的this应该是指向子类对象app的吧?
可是程序运行this-fn()结果却是执行了父类的fn()!
哪位高手给解释一下,小弟不胜感激
...全文
76 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hastings 2008-03-01
  • 打赏
  • 举报
回复
正在构建父类部分时,子类部分还没构造,所以this指针在父类中
其实是指向父类的。
zhangyanfei01 2008-03-01
  • 打赏
  • 举报
回复
呵呵,听完2楼的分析感觉豁然开朗,之前虚函数我也试过忘了往上打了。
听君一席话,胜调半天程!
arong1234 2008-03-01
  • 打赏
  • 举报
回复
这是著名的问题了,就是不会调用派生类的函数。2楼说的最全面
deng2000 2008-03-01
  • 打赏
  • 举报
回复
1. fn()不是虚函数.因此this->fn()总是调用(编译期决定)的当前类的函数,而不依赖于运行时this实际所指的对象类型.

2. 即使你把fn()设成虚函数,结果也一样.因为在调用CWinApp::CWinApp()时,子类CTestApp还没有创建好,fn()还是会指向基类CWinaApp而不是子类CTestApp. (因此不推荐在构造函数中调用虚函数)
LS_Winson 2008-03-01
  • 打赏
  • 举报
回复
父类中的this指针还是指向父类的,任何类中的this指针都是自己的类型
由于fn不是虚函数,所以调用了父类的fn

虽然父类的this 和 子类的 this 都是指向同一地址,但类型不同,最终会导致这种情况调用函数不同

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧