免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2048 | 回复: 7
打印 上一主题 下一主题

请教几道考试题目 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-17 09:16 |只看该作者 |倒序浏览
2 在上面创建的项目中设计并实现Point类,属性包括一对点的坐标int x,y;成员函数至少包括带两个参数(int x, int y)的构造函数,拷贝构造函数,以及分别取得x,y值的函数getX()和getY(),和把点移到某固定点的函数MoveTo(int x,inty),要求成员变量均为private属性。(10分)


3 用一对对角线上的两个点(如左上角与右下角;或右上角与左下角)即可以表示一个矩形,在上面声明的Point类中,派生出一个新类Rectangle,属性包括一个Point类的对象p用来表示矩形的一个对角顶点;父类的成员变量x和y表示矩形的另一个对角顶点。函数至少包括不带参数的构造函数,和计算矩形面积的函数getArea()。要求成员变量均为private属性。(10分)


4 运算符重载。假设obj是Point类的对象, --obj是指把Point类的成员变量x和y的值分别减1,请实现这个--运算符的重载。(10分)


5 直线的斜率k的算法是这样的,当两点(x1,y1)和(x2,y2)表示的直线不为竖直的直线时,也即x1 – x2不为0时,k = (y1 – y2)/(x1 – x2),否则k为无穷大。请在Rectangle类中实现这样一个求对角线斜率的函数double getK(),要求当k为无穷大时主动抛出一个异常,抛出类型为字符串,值为“斜率无穷大”,否则返回该直线的斜率,并在main函数中测试该函数,截或该异常并输出。(10分)

论坛徽章:
0
2 [报告]
发表于 2008-09-17 09:18 |只看该作者
lz这是哪里来的机试题?

论坛徽章:
0
3 [报告]
发表于 2008-09-17 09:20 |只看该作者
老师考试给的

[ 本帖最后由 sofa120 于 2008-9-17 09:22 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-09-17 13:09 |只看该作者

回复 #1 sofa120 的帖子

请问几个问题:

1.‘属性包括一对点的坐标int x,y;成员函数至少包括带两个参数(int x, int y)的构造函数’这里的形参与属性相同,在写的时候是不是通过this来赋值

2.第三道题目的意思是什么,,


麻烦各位了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

论坛徽章:
0
5 [报告]
发表于 2008-09-17 13:19 |只看该作者

回复 #1 sofa120 的帖子

“在上面声明的Point类中,派生出一个新类Rectangle”:Rectangle is a Point?天大的笑話!
“--obj是指把Point类的成员变量x和y的值分别减1,请实现这个--运算符的重载。”:這么做有意義嗎?自定義類型的行為應當像內建類型的

论坛徽章:
0
6 [报告]
发表于 2008-09-17 15:01 |只看该作者
这种考试应该允许带书进去的吧

论坛徽章:
0
7 [报告]
发表于 2008-09-18 16:39 |只看该作者

回复 #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;
}

论坛徽章:
0
8 [报告]
发表于 2008-09-19 13:14 |只看该作者
看到“绿色”的“汉字”注释,好不习惯
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP