为啥不能 class Line:public Point 继承呢?
定义一个Shape抽象类,建立一个point类,表示平面中的一个点;建立一个line类,表示平面中的一条线段,内含两个point类的对象;建立triangle类,表示一个三角形,内含三个line类的对象构成一个三角形,确定派生关系,编制相应程序输出相关信息,设计triangle类的成员函数完成三条边是否能构成三角形的检验和三角型面积计算,输出相关信息。shape类好像没什么意义吧,我定义了一个空类。
class Line 必须单独定义,如果用继承:class Line:public Point,就会提示什么构造函数?
这个题与一般提不同之处就在于:不仅仅是继承,2、3个基类的对象构成派生类。(2个点对象构成一个线,3个线对象构成一个三角形)。
为啥不能class Line:public Point继承呢?
#include<iostream>
#include<string>
#include<math.h>
using namespace std;
class Shape
{public:
};
class Point:public Shape
{public:
Point(float a,float b)
{x=a;y=b;}
void setPofloat(float a,float b)
{x=a;y=b;}
float x,y;
};
class Line//:public Point
{public:
Line(float a1,float b1,float a2,float b2):
p1(a1,b1),p2(a2,b2){};
double length()
{ return (sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y))); }
void setline(){
cin>>p1.x>>p1.y>>p2.x>>p2.y;
}
protected:
Point p1,p2;
};
class Triangle
{
public:
Triangle(float a1,float b1,float a2,float b2, float a3,float b3,float a4,float b4 ,float a5,float b5,float a6,float b6):
l1(a1,b1,a2,b2), l2(a3,b3,a4,b4) , l3(a5,b5,a6,b6){};
float delta(){
d1=l1.length();
d2=l2.length();
d3=l3.length();
if((d1+d2>d3)&&(d2+d3>d1)&&(d3+d1>d2))
return 1;
else
return 0;
}
void sett(){
cout<<"输入3条线的6个点的坐标(12个数字)"<<endl;
l1.setline();
l2.setline();
l3.setline();
cout<<"3条线的长度分别为:"<<endl;
cout<<l1.length()<<", "<<l2.length()<<", "<<l3.length()<<"."<<endl;
if
( (l1.length()+l2.length()>l3.length()) && (l2.length()+l3.length()>l1.length()) &&(l3.length()+l1.length()>l2.length()) )
{ cout<<"恭喜!您输入的这几个点可以组成三角形"<<endl;
double p=(l1.length()+l2.length()+l3.length())/2;
double s=sqrt(p*(p-l1.length()) * (p-l2.length()) *(p-l3.length()) );
cout<<"三角形的面积:"<<s<<endl;
}
else cout<<"您输入的这几个点不可以构成三角形"<<endl; }
protected:
Line l1,l2,l3;
float d1,d2,d3;
};
float main()
{
Triangle t1(0,0,1,1, 1,2,3,4 , 4,5,6,7);
float whether=t1.delta();
if(whether) cout<<"(0,0)(1,1),(1,2),(3,4),(4,5),(6,7)这几个点组成的3条线段可以构成三角形"<<endl;
else cout<<"(0,0)(1,1),(1,2),(3,4),(4,5),(6,7)这几个点不可以构成三角形"<<endl;
t1.sett();
return 0;
}