初二新手求教:一个C++小程序执行结果疑问!!!

jsjisweet 2012-11-12 09:49:30
先上代码:
#include <iostream>
using namespace std;
class A
{
public:
virtual int get(){return 1;}
};
class B:public A
{
public :
int get(){return 2;}
};
void main()
{
while (1)
{
cout<<"(1)父类(2)子类(3)退出:";
int choice;
cin>>choice;
A p;
bool quit=false;
switch (choice)
{
case 1:p=A();
break;
case 2:p=B();
break;
case 3:quit=true;
break;
default:cout<<"请输入1、2或者3。";
break;
}
if (quit==true)
{
break;
}
cout<<p.get()<<endl;
}
}


这程序 输入1 2 3的时候 得出的结果我都能理解。
但是输入4 或者4以后的数据我觉得有问题,程序不应该能正确执行啊。先上 VC6调试的图:

我的疑问是: 当输入4,程序跳出switch,然后if判断不成立,然后会执行 cout<<p.get()<<endl;这句啊,但是为什么编译结果却能使程序达到理想效果直接跳到下一次循环。
...全文
88 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluegem218 2012-11-12
  • 打赏
  • 举报
回复
你写的东西,我看你是写着写着就明白了! 不需要我们解答。 另外,你在main函数里第一行按F9设置断点, 然后执行到这里时,再按F10,一行一行地看程序如何执行! 这样对你debug比较有用!
jsjisweet 2012-11-12
  • 打赏
  • 举报
回复
我终于明白了,原来我没看到输出结果后面还有一个 1,原来它执行了cout<<p.get()<<endl; 语句,谢谢大家了! 我说我怎么想不明白这个程序!
转角天边 2012-11-12
  • 打赏
  • 举报
回复
引用 2 楼 jsjisweet 的回复:
引用 1 楼 armsword 的回复:因为没有跳出while循环。 不明白你说的什么意思! 就因为没跳出while 所以才不会得到运行的结果啊,但是这程序运行的结果我图都贴出来了。 这到底是怎么回事啊
你执行完cout<<p.get()<<endl; 程序就继续下一次循环啊,你又没有break他,要想他输入4也退出循环, 改成

default:cout<<"请输入1、2或者3。";
        quit=true;
        break;
图灵狗 2012-11-12
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
class A 
{
public:
    virtual int get(){return 1;}
};
class B:public A 
{
public :
    int get(){return 2;}
};
int main()
{
    while (1)
    {
        cout<<"(1)父类(2)子类(3)退出:";
        int choice;
        cin>>choice;
        A p;
        bool quit=false;
        switch (choice)
        {
        case 1:p=A(); cout<<p.get()<<endl;
            break;
        case 2:p=B(); cout<<p.get()<<endl;
            break;
        case 3:quit=true;
            break;
        default://cout<<"请输入1、2或者3。";
            break;
        }
        if (quit==true)
        {
            break;
        }
        //cout<<p.get()<<endl;
    }

    return 0;
}
armsword 2012-11-12
  • 打赏
  • 举报
回复
我想知道你想得到什么结果。
转角天边 2012-11-12
  • 打赏
  • 举报
回复
引用 楼主 jsjisweet 的回复:
本帖最后由 jsjisweet 于 2012-11-12 21:52:18 编辑 先上代码:CSS code123456789101112131415161718192021222324252627282930313233343536373839#include <iostream>using namespace std;class A {……
你没有break,它当然会继续循环
jsjisweet 2012-11-12
  • 打赏
  • 举报
回复
引用 1 楼 armsword 的回复:
因为没有跳出while循环。
不明白你说的什么意思! 就因为没跳出while 所以才不会得到运行的结果啊,但是这程序运行的结果我图都贴出来了。 这到底是怎么回事啊
armsword 2012-11-12
  • 打赏
  • 举报
回复
因为没有跳出while循环。

64,654

社区成员

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

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