5.16 作业
一问题描述
以平面图形类Plane为基类公有派生三角形类Triangle,main(void)函数完成对其的测试。
二 代码
#include <iostream>
#include<cmath>
using namespace std;
//点类Point
class Point{
private:
double x;
double y;
public:
Point(double xv=0,double yv=0);/*构造函数*/
Point(const Point &p); /*拷贝构造*/
~Point(); /*析构函数*/
virtual void show()const; /*显示*/
void setX(double xv); /*设置X坐标*/
void setY(double yv); /*设置Y坐标*/
double getX() const; /*获取X坐标*/
double getY() const; /*获取Y坐标*/
};
Point::Point(const double xv,const double yv){/*构造函数*/
x=xv;
y=yv;
cout<<"Point Constructor run"<<endl;
}
Point::Point(const Point &p){/*拷贝构造*/
x=p.x;
y=p.y;
cout<<"Point CopyConstructor run"<<endl;
}
Point::~Point(){/*析构函数*/
cout<<"Point Destructor run"<<endl;
}
void Point::show() const{/*显示*/
cout<<"Point(X="<<x<<",Y="<<y<<")";
}
void Point::setX(double xv){/*设置X坐标*/
x=xv;
}
void Point::setY(double yv){/*设置Y坐标*/
y=yv;
}
double Point::getX() const{/*获取X坐标*/
return x;
}
double Point::getY() const{/*获取Y坐标*/
return y;
}
class Plane{/*平面图形基类*/
public:
virtual double length()const=0;/*周长*/
virtual double area()const=0; /*面积*/
};
class·Triangle:public·Plane
{
····private:
····Point·a;
····Point·b;
····Point·c;
····public:
····Triangle(const·Point·&,const·Point·&,const·Point·&);
····Triangle(const·Triangle·&);
····~Triangle();
····void·setA(const·Point·&);
····Point·getA()·const;
····void·setB(const·Point·&);
····Point·getB()·const;
····void·setC(const·Point·&);
····Point·getC()·const;
····void·show()·const;
····double·area()·const;
····double·length()·const;
};
double·pointDis(const·Point·&p1,const·Point·&p2)
{
····return·sqrt(pow(p1.getX()-p2.getX(),2)+pow(p1.getY()-p2.getY(),2));
}
Triangle::Triangle(const·Point·&a1=Point(0,0),const·Point·&b1=Point(0,0),const·Point·&c1=Point(0,0)):a(a1),b(b1),c(c1)
{
····a=a1;
····b=b1;
····c=c1;
····cout<<"Triangle·Constructor·run"<<endl;
}
Triangle::Triangle(const·Triangle·&p):a(p.a),b(p.b),c(p.c)
{
····a=p.a;
····b=p.b;
····c=p.c;
····cout<<"Triangle·CopyConstructor·run"<<endl;
}
Triangle::~Triangle()
{
····cout<<"Triangle·Destructor·run"<<endl;
}
void·Triangle::setA(const·Point·&a1)
{
····a=a1;
}
Point·Triangle::getA()·const
{
····return·a;
}
void·Triangle::setB(const·Point·&b1)
{
····b=b1;
}
Point·Triangle::getB()·const
{
····return·b;
void length(Plane *p){/*平面图形的周长函数*/
cout<<"Length="<<p->length()<<endl;
}
void area(Plane &p){/*平面图形的面积函数*/
cout<<"Area="<<p.area()<<endl;
}
//主函数
int main(void){
double x,y;
Point p1,p2(1,1),p3(2,2);
Triangle t1,t2(t1);
t1.show();
cout<<endl;
area(t1);
length(&t1);
cin>>x>>y;
p1.setX(x);
p1.setY(y);
t2.setA(p1);
t2.setB(p2);
t2.setC(p3);
t2.show();
cout<<endl;
area(t2);
length(&t2);
return 0;
}
浙公网安备 33010602011771号