?? ep8_5.cpp
字號:
/*8.5 以點(point)類為基類,重新定義矩形類和圓類。點為直角坐標(biāo)點,矩形水平放置,由左下方
的頂點和長寬定義。圓由圓心和半徑定義。派生類操作判斷任一坐標(biāo)點是在圖形內(nèi),還是在圖形的邊緣
上,還是在圖形外。缺省初始化圖形退化為點。要求包括拷貝構(gòu)造函數(shù)。編程測試類設(shè)計是否正確。*/
#include <iostream>
#include <cmath>
using namespace std;
const double PI=3.1415926535;
class Point{
private:
double x,y;
public:
Point(){x = 0; y = 0; }
Point(double xv,double yv){x = xv;y = yv;}
Point(Point& pt){ x = pt.x; y = pt.y; }
double getx(){return x;}
double gety(){return y;}
double Area(){return 0;}
void Show(){cout<<"x="<<x<<' '<<"y="<<y<<endl;}
};
class Circle :public Point{
double radius;
public:
Circle(){radius = 0;}
Circle(double xv,double yv,double vv):Point(xv,yv){radius = vv;}
Circle(Circle& cc):Point(cc){radius = cc.radius;} //拷貝構(gòu)造函數(shù)
double Area(){return PI*radius*radius;}
void Show(){
cout<<"x="<<getx()<<'\t'<<"y="<<gety()<<'\t'<<"radius="<<radius<<endl;//訪問基類的數(shù)據(jù)成員
}
int position(Point &pt){
double distance = sqrt((getx()-pt.getx())*(getx()-pt.getx())
+(gety()-pt.gety())*(gety()-pt.gety()));
double s=distance-radius;
if(s==0) return 0; //在圓上
else if(s<0) return -1; //在圓內(nèi)
else return 1; //在圓外
}
};
class Rectangle:public Point{
double width,length;
public:
Rectangle(){width=0; length=0; }
Rectangle(double xv,double yv,double wv,double lv):Point(xv,xv) {
width = wv;
length= lv;
}
Rectangle(Rectangle& rr):Point(rr){
width = rr.width;
length = rr.length;
}
double Area(){return width*length;}
void Show(){
cout<<"x="<<getx()<<'\t'<<"y="<<gety()<<'\t';
cout<<"width="<<width<<'\t'<<"length="<<length<<endl;
}
int position(Point &pt);
};
int Rectangle::position(Point &pt){
double s1,s2;
s1 = (pt.getx()-getx()); s2=(pt.gety()-gety());
if(((s1==0||s1==width)&&s2<=length)||((s2==0||s2==length)&&s1<=width)) return 0; //在矩形上
else if(s1<width&&s2<length) return -1; //在矩形內(nèi)
else return 1; //在矩形外
}
int main(){
Circle cc1(3,4,5),cc2,cc3(cc1);
Rectangle rt1(0,0,6,8),rt2,rt3(rt1);
Point p1(0,0),p2(6,8),p3(3,3),p4(8,4),p5(8,8);
cc1.Show();
cc2.Show();
rt1.Show();
rt2.Show();
cout<<"點p1:";
p1.Show();
cout<<"矩形rt3:"<<'\t';
rt3.Show();
switch(rt3.position(p1)){
case 0:cout<<"在矩形上"<<endl;break;
case 1:cout<<"在矩形外"<<endl;break;
}
cout<<"圓cc3:"<<'\t';
cc3.Show();
switch(cc3.position(p1)){
case 0:cout<<"在圓上"<<endl;break;
case -1:cout<<"在圓內(nèi)"<<endl;break;
case 1:cout<<"在圓外"<<endl;break;
}
cout<<"點p2:";
p2.Show();
cout<<"矩形rt3:"<<'\t';
rt3.Show();
switch(rt3.position(p2)){
case 0:cout<<"在矩形上"<<endl;break;
case -1:cout<<"在矩形內(nèi)"<<endl;break;
case 1:cout<<"在矩形外"<<endl;break;
}
cout<<"圓cc3:"<<'\t';
cc3.Show();
switch(cc3.position(p2)){
case 0:cout<<"在圓上"<<endl;break;
case -1:cout<<"在圓內(nèi)"<<endl;break;
case 1:cout<<"在圓外"<<endl;break;
}
cout<<"點p3:";
p3.Show();
cout<<"矩形rt3:"<<'\t';
rt3.Show();
switch(rt3.position(p3)){
case 0:cout<<"在矩形上"<<endl;break;
case -1:cout<<"在矩形內(nèi)"<<endl;break;
case 1:cout<<"在矩形外"<<endl;break;
}
cout<<"圓cc3:"<<'\t';
cc3.Show();
switch(cc3.position(p3)){
case 0:cout<<"在圓上"<<endl;break;
case -1:cout<<"在圓內(nèi)"<<endl;break;
case 1:cout<<"在圓外"<<endl;break;
}
cout<<"點p4:";
p4.Show();
cout<<"矩形rt3:"<<'\t';
rt3.Show();
switch(rt3.position(p4)){
case 0:cout<<"在矩形上"<<endl;break;
case -1:cout<<"在矩形內(nèi)"<<endl;break;
case 1:cout<<"在矩形外"<<endl;break;
}
cout<<"圓cc3:"<<'\t';
cc3.Show();
switch(cc3.position(p4)){
case 0:cout<<"在圓上"<<endl;break;
case -1:cout<<"在圓內(nèi)"<<endl;break;
case 1:cout<<"在圓外"<<endl;break;
}
cout<<"點p5:";
p5.Show();
cout<<"矩形rt3:"<<'\t';
rt3.Show();
switch(rt3.position(p5)){
case 0:cout<<"在矩形上"<<endl;break;
case -1:cout<<"在矩形內(nèi)"<<endl;break;
case 1:cout<<"在矩形外"<<endl;break;
}
cout<<"圓cc3:"<<'\t';
cc3.Show();
switch(cc3.position(p5)){
case 0:cout<<"在圓上"<<endl;break;
case -1:cout<<"在圓內(nèi)"<<endl;break;
case 1:cout<<"在圓外"<<endl;break;
}
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -