#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
class TRI
{
public:
TRI(double x1,double y1,double z1)
{
if((x1+y1)< z1 || (x1+z1)< y1 || (y1+z1)< x1)
{
cout << "不能构成三角形" << endl;
}
else
{
x=x1,y=y1,z=z1;
}
}
TRI();
virtual double area()
{
double s=(x+y+z)/2;
double S=sqrt(s*(s-x)*(s-y)*(s-z));
cout << "三角形面积为:" << S << endl;
return S;
}
double peri()
{
return x+y+z;
}
private:
double x,y,z;
};
class COL :public TRI
{
public:
COL(double x2,double y2,double z2,double h)
{
height=h;
TRI(x2,y2,z2);
}
COL();
double volume()
{
double tiji;
tiji=area();
tiji=height*tiji;
cout << "tiji=" << tiji << endl;
}
double area()
{
double bmj;
double a,b;
a=area(); b=peri();
bmj=(2*a)+(b*height);
cout << "bmj=" << bmj << endl;
}
private:
double height;
};
int main()
{
TRI *tr;
COL co(3,4,5,6);
tr=&co;
co.volume();
tr->area();
}
先告诉你2个问题,
1.COL::volume没有返回值(没有return语句)
2.COL::area没有返回值
其次,COL继承于TRI,应将
COL(double x2,double y2,double z2,double h)
{
height=h;
TRI(x2,y2,z2);
}
改为
COL(double x2,double y2,double z2,double h) : TRI(x2,y2,z2);
{
height=h;
}
如果不这么改,那么COL在执行TRI(x2,y2,z2)时先调用的时TRI(),为什么时关于继承的事情,因为子类必须调用父类的构造函数,但是你的TRI构造函数调用是在代码块中执行的,而编译器不知道,因此它自动调用了TRI的无参数构造函数,可是你的无参构造含没有主体,只有声明,肯定会报错,所以将
class TRI{
//……
TRI();
//……
};
改为
class TRI{
//……
TRI() = default; //相当于下面的代码
//……
};
或
class TRI{
//……
TRI(){ }
//……
};
应该是构造函数 TRI() 没有函数体吧
21,50行构造函数没有函数体,改为TRI(){};
面积和体积函数定义返回double类型,但函数没有return语句