空间的点(继承)"/>
C++ 三维空间的点(继承)
题目描述
定义一个平面上的点C2D类,它含有一个getDistance()的成员函数,计算该点到原点的距离;从C2D类派生出三维空间的点C3D类,它的getDistance()成员函数计算该点到原点的距离。试分别生成一个C2D和C3D的对象,计算它们到原点的距离。
三维空间的两点(x, y, z)和(x1, y1, z1)的距离公式如下:
[(x-x1)2+(y-y1)2+(z-z1)2](1/2)
输入
第一行二维坐标点位置第二行三维坐标点位置1
第三行三维坐标点位置2
输出
第一行二维坐标点位置到原点的距离第二行三维坐标点位置1到原点的距离
第三行三维坐标点位置2到原点的距离
第四行三维坐标点位置2赋值给二维坐标点变量后,二维坐标点到原点的距离
样例输入
3 4
3 4 5
6 8 8
样例输出
5
7.07107
12.8062
10
#include<iostream>
#include <iomanip>
#include<cmath>
using namespace std;
class C2D{protected:int _x;int _y;public:C2D(int x,int y){_x=x;_y=y;}C2D(){ }//这一步很重要,要定义一个空的构造函数,不然会报错void set_x_y(int x,int y){_x=x;_y=y;}float getDistance(){return sqrt(_x*_x+_y*_y);}
};
class C3D:public C2D{protected:int _z;public:void set_z(int z){_z=z;}float getDistance3(){return sqrt(_x*_x+_y*_y+_z*_z);}
};
int main(){int x,y,z;cin>>x>>y;C2D c1(x,y);cout<<c1.getDistance()<<endl;cin>>x>>y>>z;C3D c2;c2.set_x_y(x,y);c2.set_z(z);cout<<c2.getDistance3()<<endl;cin>>x>>y>>z;C3D c3;c3.set_x_y(x,y);c3.set_z(z);cout<<c3.getDistance3()<<endl;C2D c4(x,y);cout<<c4.getDistance()<<endl;
}
private和protect的区别
私有(private):访问权限道最低;只能是该类内专部函数互相调用,派生类、外部函数都不能访问属。
保护(protect):访问权限中间;该类内部函数、派生类都能访问,外部类、外部函数不能访问
本题中如果把protected换成private则无法访问,可以自己修改代码实际操作一下
继承
定义格式:
class C3D:public C2D{......};
C2D是基类,C3D是派生类
更多推荐
C++ 三维空间的点(继承)
发布评论