子类调用基类函数问题?

beckle_ye 2009-10-23 11:04:59
就是在派生类Derive中的show函数调用基类Base的show函数,但是,直接写成show()就会出错,我知道应该是写成Based::show()这样,但是,为什么写成Show()程序可以正确执行,但是调试却报错?卡在下面代码中有注释的那一行……

下面是代码:

#include <iostream>
using namespace std;

class Base
{
public:
void Show()
{
cout << "Base::Show()" << endl;
}
};

class Derive : public Base
{
public:
void Show()
{
//Base::Show(); //常理应该是这样调用基类函数版本
Show(); //为什么调试不能继续执行,直接运行却可以“顺利”执行不报错?
cout << "Derive::Show()" << endl;
}
};

int main()
{
Base b;
b.Show();

Derive d;
d.Show(); //这里调试的时候报错:access violation

return 0;
}


...全文
184 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
beckle_ye 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yunccll 的回复:]
你写的Derive::show();就好比你写了一个死循环
while(1){
  somthing...
};

编译器允许你执行包含死循环的代码,最多给你warning 一下。

如果在编译时,能给你error提示;说明这种是很明显的逻辑错误;但是还谈不上语法错误,允许你强制运行。
[/Quote]


恩,谢谢,我明白这里是调用的Derive类的自身函数,也就会造成死循环。
只是以前没注意过,不晓得VC在执行的时候是可以“识别死循环”的,所以就多问了一下…

MS没什么意义…
yunccll 2009-10-23
  • 打赏
  • 举报
回复
你写的Derive::show();就好比你写了一个死循环
while(1){
somthing...
};

编译器允许你执行包含死循环的代码,最多给你warning 一下。

如果在编译时,能给你error提示;说明这种是很明显的逻辑错误;但是还谈不上语法错误,允许你强制运行。
lylm 2009-10-23
  • 打赏
  • 举报
回复
程序确实有问题,不过不同编译器表现可能不同
wesleyluo 2009-10-23
  • 打赏
  • 举报
回复
书上写的是要写成Base.XXX的,让程序知道你用的是那个XXX,是基类的,还是派生类的。
tan870426 2009-10-23
  • 打赏
  • 举报
回复
我感觉讨论一个本来就错误的程序(死循环)没意义!
lylm 2009-10-23
  • 打赏
  • 举报
回复
这个是编译器相关的,VC6下编译、运行都可,但是debug有问题
xingzhe2001 2009-10-23
  • 打赏
  • 举报
回复
重编译一下好了
beckle_ye 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xingzhe2001 的回复:]
你直间运行时release 模式么?
[/Quote]

release和debug都可以运行……
beckle_ye 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xingzhe2001 的回复:]
你直间运行时release 模式么?
[/Quote]

是的
xingzhe2001 2009-10-23
  • 打赏
  • 举报
回复
你直间运行时release 模式么?
  • 打赏
  • 举报
回复
汗,你这个难道不类似于递归吗?并且还没终止条件。
beckle_ye 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pcboyxhy 的回复:]
因为show里面调用同一个show,递归了,而且没有出口

调试的时候,工具可能有捕获“死循环”,“无限递归”的能力,会终止它
[/Quote]

是啊,我明白这是个死循环,以前在VC下没试过这个,
那我想问一下,运行的时候之所以能够执行,那就是因为编译连接的时候“识别了死循环”?
pcboyxhy 2009-10-23
  • 打赏
  • 举报
回复
因为show里面调用同一个show,递归了,而且没有出口

调试的时候,工具可能有捕获“死循环”,“无限递归”的能力,会终止它

65,187

社区成员

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

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