C++类和对象的继承和派生

来源:互联网 发布:阿里云 直播 编辑:程序博客网 时间:2024/06/05 03:42

1 实验内容及目的

l 实验目的

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

l 实验内容

创建一个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()的函数,返回矩形的周长。

2 实验步骤

(1)实现类

l MyPoint类

 

l TdPoint类 

 

(2)编写测试程序 

创建两个点,坐标为(0,0,0)和(10,30,25.5),并输出两点之间的距离。

 

3 源代码

头文件:

#ifndef DPOINT_H

#define DPOINT_H

#include "MyPoint.h"

 

 

class ThreeDPoint : public MyPoint{

 

private:

double z;

 

public:

ThreeDPoint();

ThreeDPoint(double x,double y,double z);

double getZ();

double distance(ThreeDPoint p);

double getPerimeter();

};

#endif

 

 

 

 

 

源文件:

#include <stdio.h>

#include <iostream>

#include "3DPoint.h"

#include <math.h>

using namespace std;

 

ThreeDPoint::ThreeDPoint(){

z = 0;

}

 

ThreeDPoint::ThreeDPoint(double a,double b,double c):MyPoint(a,b){

    z = c;

// cout << z << endl;

 

}

 

double ThreeDPoint::getZ(){

return z;

}

 

double ThreeDPoint::distance(ThreeDPoint p){

//cout << p.getX() << p.getY() << p.getZ() << endl;

return sqrt((this->getX()-p.getX()*(this->getX()-p.getX())+(this->getY()-p.getY())*(this->getY()-p.getY())+(this->getZ()-p.getZ())*(this->getZ()-p.getZ())));

//3D距离

}

 

double ThreeDPoint::getPerimeter(){

return 0.3;

//周长

}

 

 

 

 

 

 

 

 

 

 

 

测试文件:

#include <stdio.h>

#include <iostream>

#include "3DPoint.h"

using namespace std;

 

void main(){

ThreeDPoint point1;

ThreeDPoint point2(10,30,25.5);

cout << point1.distance(point2) << endl;

}

 

4 遇到的问题与分析

1. 继承基类。例如:头文件中的class TdPoint:public MyPoint和功能函数中的TdPoint::TdPoint() : MyPoint(0, 0)。

分析:需要以此格式触发函数继承的功能,以实现对基类相关函数的调用。

2. 派生函数。在编写代码过程主要是遇到编写格式的问题。

分析:在头文件声明中需要使用相同函数名称,在功能函数实现具体功能的时候亦需要使用相同的函数名称及相应格式。

 

5 实验体会

通过该实验,基本上熟悉了C++中类的继承和派生的相关知识及代码的编写规则。同时也发现了自身在编码上所存在的问题,而问题主要是由于对C++语言编写格式的不熟悉所造成的,但经过课堂的学习和从实践中的尝试,问题最终都得到了较好的解决。此外,在这过程中也有向同学请教和上网查阅相关资料的经历,这一学习方法在接下来的实验中也发挥了相当大的作用。

0 0