注册 登录
编程论坛 C++教室

求教,谁能给解释下

hjb5074 发布于 2013-03-27 11:32, 692 次点击
#include <iostream>
using namespace std;

class A
{
public:
    virtual   int get(){cout<<"a"<<endl;return 2;}
};
class B :public A
{
public:
    int get(){cout<<"b"<<endl;return 3;}
};

void main()
{
    A *a;
    int i;
    bool quit=false;
    while (1)
    {
        cout<<"1.父类,2子类,3退出  ";
            cin>>i;
        switch(i)
        {
        case 1:a=new A;
            break;
        case 2:a=new B;
            break;
        case 3:quit=true;
            break;
        default:cout<<"请正确输入选项!!";
            break;
        }
        
        if(quit==true)
        {
            break;
        }
        cout<<a->get()<<endl;
        delete a;
    }
   
}
输入1、2、3以外的数字是报错!!
10 回复
#2
peach54602013-03-27 11:38
你自己的switch不是写的除了123都报错么?
这是不是你自己的程序啊?
#3
peach54602013-03-27 11:40
以下是引用peach5460在2013-3-27 11:38:52的发言:

你自己的switch不是写的除了123都报错么?
这是不是你自己的程序啊?


哦.soga
你想想你的逻辑有什么问题
指针没玩熟啊...搞了个野指针出来了

PS:我之前还以为你说得报错是指的程序说请输入正确的数咧...
#4
fxbszj2013-03-27 12:36
你自己只给自己盖了个3层楼,你上你家6楼给我看看
#5
azzbcc2013-03-27 13:12
defalut执行之后会执行什么?这种错误实在不应该啊
#6
shmilyflf2013-03-27 14:22
#include <iostream>
 using namespace std;
 
class A
{
 public:
     virtual   int get(){cout<<"a"<<endl;return 2;}
 };
 class B :public A
 {
 public:
     int get(){cout<<"b"<<endl;return 3;}
 };
 
void main()
 {
     A *a;
     int i;
     bool quit=false;
     bool again=false;//定义一个bool型指示是否重新输入
     while (1)
     {
         again=false;//开始置again为false,表示不需要重新输入
         cout<<"1.父类,2子类,3退出  ";
             cin>>i;
         switch(i)
         {
         case 1:a=new A;
             break;
         case 2:a=new B;
             break;
         case 3:quit=true;
             break;
         default:cout<<"请正确输入选项!!"<<endl;
             again=true;//如果需要重新输入,置again为true
             break;
         }
         if(false==again)//当不需要重新输入时执行下面的
         {
            if(quit==true)
            {
                break;
            }
            cout<<a->get()<<endl;//你的错误是当输入非1,2,3的数时,a没有初始化,但是你在这里使用了,当然崩溃了。
            delete a;
         }
     }  
}
#7
peach54602013-03-27 15:37
以下是引用shmilyflf在2013-3-27 14:22:28的发言:

#include <iostream>
 using namespace std;
 
class A
{
 public:
     virtual   int get(){cout<<"a"<<endl;return 2;}
 };
 class B :public A
 {
 public:
     int get(){cout<<"b"<<endl;return 3;}
 };
 
void main()
 {
     A *a;
     int i;
     bool quit=false;
     bool again=false;//定义一个bool型指示是否重新输入
     while (1)
     {
         again=false;//开始置again为false,表示不需要重新输入
         cout<<"1.父类,2子类,3退出  ";
             cin>>i;
         switch(i)
         {
         case 1:a=new A;
             break;
         case 2:a=new B;
             break;
         case 3:quit=true;
             break;
         default:cout<<"请正确输入选项!!"<<endl;
             again=true;//如果需要重新输入,置again为true
             break;
         }
         if(false==again)//当不需要重新输入时执行下面的
         {
            if(quit==true)
            {
                break;
            }
            cout<<a->get()<<endl;//你的错误是当输入非1,2,3的数时,a没有初始化,但是你在这里使用了,当然崩溃了。
            delete a;
         }
     }  
}


解释得好详细呀
#8
hjb50742013-03-27 15:54
回复 6楼 shmilyflf
非常感谢!解释的非常好,这下完全明白了!
#9
peach54602013-03-27 16:31
晕,回答了半天没分
#10
hjb50742013-04-06 15:48
回复 9楼 peach5460
不好意思,下次吧,你给将详细点,我给你个满分,因为我是老菜嘛,不将详细了我可是弄不明白的;
#11
peach54602013-04-06 19:08
以下是引用hjb5074在2013-4-6 15:48:19的发言:

不好意思,下次吧,你给将详细点,我给你个满分,因为我是老菜嘛,不将详细了我可是弄不明白的;

学会自己debug
别人跟你讲是看心情的,哈哈...

我可以教你调试
1