C++的小实验(1)

实验内容及目的

实验目的:理解和掌握C++对象和类的继承和派生。

实验内容:在程序设计练习中,我们创建了一个MyPoint类来建模二维空间中的一个点。MyPoint类包含两个属性x和y,表示x轴和y轴的坐标,还包含x和y的获取器函数,及返回两点之间距离的函数。创建一个名为3DPoint的类,来建模三维空间中的一个点。将3DPoint设计为MyPoint的一个派生类,包含如下额外属性:

(1) 一个名为z的数据域,表示z轴坐标。

(2) 一个无参构造函数,创建一个坐标为(0,0,0)的点。

(3) 一个带参数的构造函数,按指定坐标创建一个点。

(4) z的获取器函数。

(5) 覆盖distance函数,返回三维空间中两点之间的距离。

(6) 一个名为getPerimeter()的函数,返回矩形的周长。

画出这两个类的UML图,实现类。编写一个测试程序,它创建两个点,坐标为(0,0,0)和(10,30,25.5),并输出两点之间的距离。

 

 

2 实验步骤

(1) 准备好2DMyPoint的有用的程序代码以作为框架

(2) 添加额外的域和方法,以及构造方法和要覆盖的方法声明

(3) 在主函数中实现上述声明的构造方法和普通方法

(4) 在Test3D.cpp源文件里创建MyPoint3D实例,然后通过创建的实例调用类覆盖的方法,测试该类的方法实现是否正确

 

 

 

 

 

 

3 源代码

#include <iostream>

#include <math.h>

 

using namespace std;

 

class MyPoint

{

public:

    MyPoint();

    MyPoint(double,double);

    double getx();

    double gety();

    double distance(MyPoint);

    double x,y;

};

 

class MyPoint3D:public MyPoint

{

public:

    MyPoint3D();

    MyPoint3D(double,double,double);

    double getz();

    double distance(MyPoint3D);

    double z;

};

 

MyPoint::MyPoint()

{

    x=0;

    y=0;

}

 

MyPoint::MyPoint(double xx,double yy)

{

    x=xx;

    y=yy;

}

 

double MyPoint::getx()

{

    return x;

}

 

double MyPoint::gety()

{

    return y;

}

 

double MyPoint::distance(MyPoint c)

{

    double n;

    n=sqrt((x-c.getx())*(x-c.getx())+(y-c.gety())*(y-c.gety()));

    return n;

}

 

MyPoint3D::MyPoint3D()

{

    x=0;

    y=0;

    z=0;

}

 

MyPoint3D::MyPoint3D(double xx,double yy,double zz)

{

    x=xx;

    y=yy;

    z=zz;

}

 

double MyPoint3D::getz()

{

    return z;

}

 

double MyPoint3D::distance(MyPoint3D d)

{

    double n;

    n=sqrt((x-d.getx())*(x-d.getx())+(y-d.gety())*(y-d.gety())+(z-d.getz())*(z-d.getz()));

    return n;

}

 

int main()

{

    MyPoint3D d1;

    MyPoint3D d2(10,30,25.5);

    cout << "两点间的距离为:" << d1.distance(d2) << endl;

    return 0;

}

 

 

4 遇到的问题与分析

本次实验,因为是扩展已有类而来,所以基本没有遇到什么问题,很顺利就得到了实验结果,在完成这次实验后,我分析了一下,这次实验顺利完成的原因,一方面,可以模仿已有类进行扩展,给我们实验带来了方便之处,另一方面,老师有条不紊的实验指导,也是这次实验能如此迅速完成的原因之一。

 

 

5 实验体会

通过本次实验,我更深入地理解了C++对象和类的继承与派生。因为这次实验,是在之前一个2DMyPoint类的基础上,把2D扩展成3D,当然,你可以重新写一个3D的类,这也可以实现要求,但理解了继承和派生以后,事情就变得非常简单了,只要让新的3D类继承2D类,然后再覆盖其distance函数,很快就完成了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值