- 论坛徽章:
- 0
|
回复 #1 sofa120 的帖子
这是我写的答案,请各位帮忙看看,有什么错误或者什么地方可以改进的
#include "stdafx.h"
#include "iostream"
using namespace std;
//2 在上面创建的项目中设计并实现Point类,属性包括一对点的坐标int x,y;
//成员函数至少包括带两个参数(int x, int y)的构造函数,拷贝构造函数,
//以及分别取得x,y值的函数getX()和getY(),和把点移到某固定点的函数MoveTo(int x,inty),
//要求成员变量均为private属性。(10分)class Point
{
int x,y;
public:
Point(int x=0,int y=0)
{
this->x=x;
this->y=y;
}
Point (Point &p)
{
x=p.x;
y=p.y;
}
int getX()
{return x;}
int getY()
{return y;}
void MoveTo(int x,int y)
{
this->x=x;
this->y=y;
}
//4 运算符重载。假设obj是Point类的对象,
//--obj是指把Point类的成员变量x和y的值分别减1,
//请实现这个--运算符的重载。(10分) Point operator --()
{
x--;
y--;
return *this;
}
};
//3 用一对对角线上的两个点(如左上角与右下角;或右上角与左下角)即可以表示一个矩形,
//在上面声明的Point类中,派生出一个新类Rectangle,
//属性包括一个Point类的对象p用来表示矩形的一个对角顶点;
//父类的成员变量x和y表示矩形的另一个对角顶点。函数至少包括不带参数的构造函数,
//和计算矩形面积的函数getArea()。要求成员变量均为private属性。(10分)
class Rectangle:public Point
{
Point p;
public:
Rectangle(int a=0,int b=0,int c=0,int d=0):Point (a,b),p(c,d)
{
}
int getArea()
{
int length,wideth;
if(Point::getX()<p.getX())
length=p.getX()-Point::getX();
else
length=Point::getX()-p.getX();
if(Point::getY()<p.getY())
wideth=p.getY()-Point::getY();
else
wideth=Point::getY()-p.getY();
return length*wideth;
}
//5 直线的斜率k的算法是这样的,当两点(x1,y1)和(x2,y2)表示的直线不为竖直的直线时,
//也即x1 - x2不为0时,k = (y1 - y2)/(x1 - x2),否则k为无穷大。
//请在Rectangle类中实现这样一个求对角线斜率的函数double getK(),
//要求当k为无穷大时主动抛出一个异常,抛出类型为字符串,
//值为"斜率无穷大",否则返回该直线的斜率,
//并在main函数中测试该函数,截或该异常并输出。(10分) double getk()
{
int length1,wideth1;
if(Point::getX()<p.getX())
length1=p.getX()-Point::getX();
else
length1=Point::getX()-p.getX();
if(Point::getY()<p.getY())
wideth1=p.getY()-Point::getY();
else
wideth1=Point::getY()-p.getY();
if(length1!=0)
return wideth1/length1;
else
throw (length1);
}
};
int main(int argc, char* argv[])
{
printf("Hello World!\n");
Point obj(8,7);
cout<<"obj现在的点是:"<<obj.getX()<<","<<obj.getY()<<endl;
obj.MoveTo(2,3);
cout<<"改变后,obj现在的点是:"<<obj.getX()<<","<<obj.getY()<<endl;
cout<<(--obj).getX()<<","<<(--obj).getY()<<endl;
Rectangle one(1,2,3,4);
cout<<"Rectangle实例 one的面积是: "<<one.getArea()<<endl;
Rectangle lop;
try{
cout<<lop.getk();
}
catch(int)
{
cout<<"斜率无穷大"<<endl;
}
return 0;
} |
|