帮忙看看错误出在哪里????
[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();
这样就不会出现空指针异常了
