C++实践参考:点-圆-圆柱类族的设计

【项目 - 点-圆-圆柱类族的设计】
按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积、体积并输出并且完成要求的计算任务:
(1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试;
(2)以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试;
(3)再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高),,以及求圆柱表面积的成员函数area和求圆柱体积的成员函数volume,实现需要的成员函数,并设计main函数完成测试。
要求编写程序,设计出各类中“需要的成员函数”,包括构造函数、析构函数、修改数据成员和获取数据成员的公共接口、用于输出的重载运算符“<<”函数等。
(提示:此任务可以分为三个子任务分成若干步骤进行。先声明基类,再声明派生类,逐级进行,分步调试。——这种方法适用于做任何的项目)

[参考解答]
(1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试;

#include <iostream>
using namespace std;
class Point
{
public:
    Point(double x=0,double y=0);                    //构造函数
    void setPoint(double,double);                  //设置坐标值
    double getX( ) const {return x;}              //读x坐标
    double getY( ) const {return y;}              //读y坐标
    void show();
protected:                                       //受保护成员
    double x,y;
};

//Point的构造函数
Point::Point(double a,double b)
{
    x=a;
    y=b;
}
//设置x和y的坐标值
void Point::setPoint(double a,double b)
{
    x=a;
    y=b;
}

void Point::show()
{
    cout<<"["<<x<<","<<y<<"]"<<endl;
}

int main( )
{
    Point p(3.5,6.4);
    p.show();
    p.setPoint(8.5,6.8);
    p.show();
    return 0;
}

(2)以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试;

#include <iostream>
using namespace std;
class Point
{
public:
    Point(double x=0,double y=0);                    //构造函数
    void setPoint(double,double);                  //设置坐标值
    double getX( ) const
    {
        return x;   //读x坐标
    }
    double getY( ) const
    {
        return y;   //读y坐标
    }
    void show();
protected:                                       //受保护成员
    double x,y;
};

//Point的构造函数
Point::Point(double a,double b)
{
    x=a;
    y=b;
}
//设置x和y的坐标值
void Point::setPoint(double a,double b)
{
    x=a;
    y=b;
}

void Point::show()
{
    cout<<"["<<x<<","<<y<<"]"<<endl;
}

class Circle:public Point   //circle是Point类的公用派生类
{
public:
    Circle(double x=0,double y=0,double r=0);  //构造函数
    void setRadius(double);                  //设置半径值
    double getRadius( ) const;               //读取半径值
    double area ( ) const;                   //计算圆面积
    void show();
protected:
    double radius;
};

//定义构造函数,对圆心坐标和半径初始化
Circle::Circle(double a,double b,double r):Point(a,b),radius(r) { }

//设置半径值
void Circle::setRadius(double r)
{
    radius=r;
}

//读取半径值
double Circle::getRadius( ) const
{
    return radius;
}

//计算圆面积
double Circle::area( ) const
{
    return 3.14159*radius*radius;
}

//输出圆的信息
void Circle::show()
{
    cout<<"Center=["<<x<<", "<<y<<"], r="<<radius<<", area="<<area( )<<endl;
}

int main( )
{
    Circle c(3.5,6.4,5.2);
    cout<<"original circle:\n";
    c.show();
    c.setPoint(5,5);
    cout<<"new circle:\n";
    c.show();
    return 0;
}

(3)再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高),,以及求圆柱表面积的成员函数area和求圆柱体积的成员函数volume,实现需要的成员函数,并设计main函数完成测试。

#include <iostream>
using namespace std;
class Point
{
public:
    Point(double x=0,double y=0);                    //构造函数
    void setPoint(double,double);                  //设置坐标值
    double getX( ) const
    {
        return x;   //读x坐标
    }
    double getY( ) const
    {
        return y;   //读y坐标
    }
    void show();
protected:                                       //受保护成员
    double x,y;
};

//Point的构造函数
Point::Point(double a,double b)
{
    x=a;
    y=b;
}
//设置x和y的坐标值
void Point::setPoint(double a,double b)
{
    x=a;
    y=b;
}

void Point::show()
{
    cout<<"["<<x<<","<<y<<"]"<<endl;
}

class Circle:public Point   //circle是Point类的公用派生类
{
public:
    Circle(double x=0,double y=0,double r=0);  //构造函数
    void setRadius(double);                  //设置半径值
    double getRadius( ) const;               //读取半径值
    double area ( ) const;                   //计算圆面积
    void show();
protected:
    double radius;
};

//定义构造函数,对圆心坐标和半径初始化
Circle::Circle(double a,double b,double r):Point(a,b),radius(r) { }

//设置半径值
void Circle::setRadius(double r)
{
    radius=r;
}

//读取半径值
double Circle::getRadius( ) const
{
    return radius;
}

//计算圆面积
double Circle::area( ) const
{
    return 3.14159*radius*radius;
}

//输出圆的信息
void Circle::show()
{
    cout<<"Center=["<<x<<", "<<y<<"], r="<<radius<<", area="<<area( )<<endl;
}

class Cylinder:public Circle
{
public:
    Cylinder (double x=0,double y=0,double r=0,double h=0);//构造函数
    void setHeight(double);                      //设置圆柱高
    double getHeight( ) const;                    //读取圆柱高
    double area( ) const;                         //计算圆柱表面积
    double volume( ) const;                       //计算圆柱体积
    void show();
protected:
    double height;                               //圆柱高
};

//定义构造函数
Cylinder::Cylinder(double a,double b,double r,double h) :Circle(a,b,r),height(h){}

//设置圆柱高
void Cylinder::setHeight(double h)
{
    height=h;
}

//读取圆柱高
double Cylinder::getHeight( ) const
{
    return height;
}

//计算圆柱表面积
double Cylinder::area( ) const
{
    return 2*Circle::area( )+2*3.14159*radius*height;
}

//计算圆柱体积
double Cylinder::volume() const
{
    return Circle::area()*height;
}

void Cylinder::show()
{
    cout<<"Center=["<<x<<","<<y<<"], r="<<radius<<", h="<<height
        <<"\narea="<<area( )<<", volume="<<volume( )<<endl;
}

int main( )
{
    Cylinder cy1(3.5,6.4,5.2,10);
    cout<<"\noriginal cylinder:\nx=";
    cy1.show();
    cy1.setHeight(15);
    cy1.setRadius(7.5);
    cy1.setPoint(5,5);
    cout<<"\nnew cylinder:\n";
    cy1.show();
    return 0;
}
时间: 2024-09-20 06:27:06

C++实践参考:点-圆-圆柱类族的设计的相关文章

《C++语言基础》实践参考——类族的设计

返回:贺老师课程教学链接 项目要求 [项目4 - 类族的设计]    按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积.体积并输出并且完成要求的计算任务:    (1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试:    (2)以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试:    (3)再以C

C++第11周(春)项目4 - 类族的设计

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目4 - 类族的设计]按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积.体积并输出并且完成要求的计算任务:    (1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试:    (2)以Point为基类,派生出一个Circle(圆)类,增加数据成员r

C++实践参考:IP地址类

[项目-IP地址类] 在互联网中使用的IP地址占4字节,可以用四段法表示,每段值的范围为0-255,中间用"."隔开,例如202.194.116.97.其实,也可以看看一个有4字节的无符号整型值3401741409. 现设计一个IP地址类,用于保存IP地址,并实施在IP地址上的一些操作.如下所示: class IP { private: union //由此匿名联合体可以看出,IP地址共占4个字节 { struct //这是一个由4个字节构成的匿名结构体 { unsigned char

《C++语言基础》实践参考——我的数组类

返回:贺老师课程教学链接 [项目2-我的数组类]下面的程序,因为存在指针类型的数据成员,需要能完成深复制的构造函数.请补充完整构造函数和析构函数(其他不必动).其中,构造函数要完成下面三个任务:(1)为各成员函数赋值,按照深复制原则,其中arrayAddr应该是为保存数据新分配的连续空间的首地址:(2)MyArray(int *a, int n)中,要将a指向的数组中的数值,逐个地复制到新分配的arrayAddr指向的空间中:(3)getMax( )函数采取的策略是直接返回max(所以,计算ma

《C++语言基础》实践参考——我的向量类

返回:贺老师课程教学链接 项目要求 [项目4-我的向量类] 建立一个向量类MyVector,声明如下,请完成类的定义 class MyVector //定义向量类 { public: MyVector(int m); //构造函数,共有m个元素的向量,元素值预置为0 MyVector(const MyVector &v); //复制构造函数 ~MyVector(); //析构函数:释放动态数组所占用的存储空间 friend istream &operator>>(istream

《C++语言基础》实践参考——方程也是类

返回:贺老师课程教学链接 项目要求 [项目5-方程也是类]设计一元一次方程类,求形如ax+b=0的方程的解.例如:输入3x-8=0时,输出的方程的解为x=2.66667:再如:输入5s+18=0时,输出的方程的解为s=-3.6: 参考界面如下:参考代码为: class CEquation { private: double a; // 未知数系数 double b; // 常数项 char unknown; // 代表未知数的符号 public: CEquation(double aa=0,do

C++实践参考——形状类族的中的纯虚函数

返回:贺老师课程教学链接  项目要求 [项目-形状类族的中的纯虚函数]写一个程序,定义抽象基类Shape,由它派生出3个派生类,Circle(圆形).Rectangle(矩形).Triangle(三角形).用如下的main()函数,求出定义的几个几何体的面积和.  int main() { Circle c1(12.6),c2(4.9);//建立Circle类对象c1,c2,参数为圆半径 Rectangle r1(4.5,8.4),r2(5.0,2.5);//建立Rectangle类对象r1,r

C++实践参考——立体类族共有的抽象类

返回:贺老师课程教学链接  项目要求 [项目-立体类族共有的抽象类]    设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数.设计派生类CCube.CBall.CCylinder,分别表示正方体.球体及圆柱体.在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类).要求利用这个p指针,能够求出正方体.球体及圆柱体对象的表面积及体积. [参考解答] #include "iostream" using namespace std; con

《C++语言基础》实践参考—— 链表类

返回:贺老师课程教学链接  项目要求 [项目 - 链表类]动态链表也是程序设计中的一种非常有用的数据结构.可以说,是否能够理解有关操作的原理,决定了你是否有资格称为"科班"出身.在后续的专业基础课中,相关的内容还会从不同的角度,反复地认识,反复地实践.不过,在现阶段多些体验,也是很有必要的了.(1)阅读下面的程序,回顾一下动态链表,阅读程序过程中,请用笔画一画形成链表的过程中指针值的变化. #include <iostream> using namespace std; s