C++类和对象的继承和派生
2014-06-01 11:12
429 查看
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++语言编写格式的不熟悉所造成的,但经过课堂的学习和从实践中的尝试,问题最终都得到了较好的解决。此外,在这过程中也有向同学请教和上网查阅相关资料的经历,这一学习方法在接下来的实验中也发挥了相当大的作用。
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++语言编写格式的不熟悉所造成的,但经过课堂的学习和从实践中的尝试,问题最终都得到了较好的解决。此外,在这过程中也有向同学请教和上网查阅相关资料的经历,这一学习方法在接下来的实验中也发挥了相当大的作用。
相关文章推荐
- C++类和对象的继承和派生
- C++类和对象的继承和派生
- c++类与对象,继承,派生的一些知识
- C++类的继承与派生
- C++ 类和对象,继承,派生
- C++类的继承和派生
- c++类的继承与派生
- 26.C++类的继承与派生
- 【C++继承与派生之二】有子对象的派生类的构造函数
- 【C++】继承派生中对象相互赋值情况
- C++类继承中,基类/当前对象属性/当前对象的构造顺序
- 【C++继承与派生之二】有子对象的派生类的构造函数
- C++ Pirmer : 第十五章 : 面向对象程序设计之基类和派生的定义、类型转换与继承与虚函数
- C++面向对象笔记:继承、派生
- C++类的继承和派生,访问控制
- c++类定义体中定义继承树中类的对象问题
- 面向对象 继承与派生
- C++类的继承与派生<二>
- 1.虚函数的继承与派生;2.多文件静态对象的定义顺序,3模板注意,4mysql二、十六进制, 4颜色名称,5QSvgRenderer真实rect和viewboxrect转换
- 面向对象之继承与派生(day7)