帮忙看看异常出在哪里?

帮忙看看错误出在哪里????[imghttp://][/img][imghttp://][/img]错在哪里了啊???#include iostream#in

帮忙看看错误出在哪里????
[img=http://][/img][img=http://][/img]错在哪里了啊???

#include <iostream>
#include <cstdlib>

using namespace std;

class poser
{
 


public:

 virtual void beat(){cout<<"一般拳手的一拳力量为260磅"<<endl;}
};
 

class Ali:public poser{

public:

 void beat()const{cout<<"阿里一拳的力量为480磅"<<endl;}

};

class Lewys:public poser
{
 

public: void beat()const{cout<<"刘易斯一拳的力量为580磅"<<endl;}

};

class Taisen:public poser
{
 

public:

 void beat()const{cout<<"泰森一拳的力量为680磅"<<endl;}
};
 

int main()

{
 poser *p;
 

 int choice;

 char choose;

while(choice!=0){

 cout<<"1.阿里"<<"2.刘易斯"<<"3.泰森"<<endl;

    cin>>choice;

 

 switch(choice)

 {

   case 1:p=new Ali;

   break;

  case 2:p=new Lewys;

   break;

  case 3:p=new Taisen;

   break;

  case 0: cout<<"是否退出<y/n>"<<endl;//运行这里时就出现了.exe停止工作,如果输入n,就停止响应

   cin>>choose;

   if(choose=='y') exit(1);

  default: cout<<"输入错误,请重新输入"<<endl;

   break;
 }
 
 p->beat();

 delete p;

}

 

 return 0;
}

c++
[解决办法]
如果你直接输入0后就输入n,那么p就是一个空指针,switch退出后,执行 p->beat();就会出错,所以在switch里的变量可能是为初始化的,尽量不要这么用
[解决办法]

#include <iostream>
#include <cstdlib>
#include <stdio.h>

using namespace std;

class poser
{



public:

 virtual void beat(){cout<<"一般拳手的一拳力量为260磅"<<endl;}
};


class Ali:public poser{

public:

 void beat()const{cout<<"阿里一拳的力量为480磅"<<endl;}

};

class Lewys:public poser
{


public: void beat()const{cout<<"刘易斯一拳的力量为580磅"<<endl;}

};

class Taisen:public poser
{


public:

 void beat()const{cout<<"泰森一拳的力量为680磅"<<endl;}
};


int main()

{
 poser *p = NULL;


 int choice;

 char choose;

while(choice!=0){

 cout<<"1.阿里"<<"2.刘易斯"<<"3.泰森"<<"0.退出"<<endl;

    cin>>choice;



 switch(choice)

 {

   case 1:p=new Ali;

   break;

  case 2:p=new Lewys;

   break;

  case 3:p=new Taisen;

   break;

  case 0: cout<<"是否退出<y/n>"<<endl;//运行这里时就出现了.exe停止工作,如果输入n,就停止响应



  getchar();  //清除输入缓冲去

   cin>>choose;

   if('y' == choose 
[解决办法]
 'Y' == choose) exit(1);

  default: cout<<"输入错误,请重新输入"<<endl;

   break;
 }

 p->beat();

 delete p;

}



 return 0;
}


这是我在楼主楼主上改的,添加清空输入缓冲区。代码仅供参考
[解决办法]
这个是对虚函数overide的理解有点没有深入细节。通过基类类型指针实现多态,要求基类和子类的虚函数的原型一致,这包括返回值类型,参数表和是否为const函数。
   你把基类的虚函数也定义成const就好了
[解决办法]
如果你直接输入0后就输入n,那么p就是一个空指针,switch退出后,执行 p->beat();就会出错.
在执行执行 p->beat();前最好加一个空指针的判断
if( !p )
  return 0;
p->beat();
这样就不会出现空指针异常了