待解决的C++问题
大家好,最近在用c++写继承类问题时,代码运行时遇到了以下问题:在for循环中,如果最后一个输入的是Triangle,则程序直接结束,不会进行后面的输出了,找了好久都不知道问题出在哪里。
下面这张图是Triangle放在第二输入时的运行结果图,此时可以执行后面的输出。
以下这张图是Triangle放在最后输入的结果,程序直接结束,不会执行后面的输出,找了好久都找不到问题所在,哪位大神可以帮忙看看吗?谢谢了
以下是我完整的代码:
#include<iostream>
#include<stdio.h>
#include<string>
#include<iomanip>
#include<cmath>
using namespace std;
class Shape //基类,虚函数
{
public:
//Shape(){};
virtual double area()=0;
virtual double perimeter()=0;
};
class Rect: public Shape //派生类
{
private:
double length,width;
public:
Rect(double x1,double y1,double x2,double y2)
{
length=fabs(x1-x2);
width=fabs(y1-y2);
}
double area() //函数重定义
{
return length*width;
}
double perimeter()
{
return 2*(length+width);
}
};
class Circle: public Shape
{
private:
double R;
public:
Circle(double x,double y,double r)
{
R=r;
}
double area()
{
double s,pi=3.14159;
s=pi*R*R;
return s;
}
double perimeter()
{
double pi=3.14159;
return 2*pi*R;
}
};
class Triangle: public Shape
{
private:
double a,b,c,d;
public:
Triangle(double x1,double y1,double x2,double y2,double x3,double y3)
{
a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
c=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
d=(a+b+c)/2;
}
double area()
{
double s;
s=sqrt(d*(d-a)*(d-b)*(d-c));
return s;
}
double perimeter()
{
return d*2;
}
};
int main()
{
int n;
cout<<"请输入要创建的实例个数:";
cin>>n;
double x1,x2,x3,y1,y2,y3;
Shape *shape;
string str[3];
double temp[2][2];
for(int i=0;i<n;i++)
{
cout<<"请输入要创建何种实例:";
cin>>str[i];
if("Rect"==str[i])
{
cout<<"请输入Rect的实际参数值:";
cin>>x1>>y1>>x2>>y2;
Rect re(x1,y1,x2,y2);
shape=&re;
}
else if("Triangle"==str[i])
{
cout<<"请输入Triangle的实际参数值:";
cin>>x1>>y1>>x2>>y2>>x3>>y3;
Triangle tran(x1,y1,x2,y2,x3,y3);
shape=&tran;
}
else if("Circle"==str[i])
{
double r;
cout<<"请输入Circle的实际参数值:";
cin>>x1>>y1>>r;
Circle cir(x1,y1,r);
shape=○
}
temp[i][0]=shape->area();
temp[i][1]=shape->perimeter();
}
cout<<"输出:"<<endl;
for(int i=0;i<n;i++)
{
cout<<setiosflags(ios::fixed)<<setprecision(5)<<temp[i][0]<<" "<<temp[i][1]<<endl;
}
return 0;
}
希望大家能给给意见,再次谢谢了