虚函数的使用和公有继承的数据调用

Figure 类有一个数据成员radius和虚函数area ()和volume()。从Figure类派生出Sphere类和Column类,分别实现求球体和圆柱体的体积和表面积。并编写测试程序。

#include<iostream>
#include<cmath>
using namespace std;

const double pi = 3.14;
class Figure
{
    public:
        Figure(){};
        Figure(double r){radius = r;};
        virtual double area(){return 0.0;}
        virtual double volume(){return 0.0;}
        ~Figure(){};
    protected:
        double radius;
};

class Sphere:public Figure
{
    public:
        Sphere(double r){radius = r;}
        virtual double area(){return 4 * pi * pow(radius, 2);}
        virtual double volume(){return 4/3.0 * pi * pow(radius, 3); }
        ~Sphere(){};
};

class Column:public Figure
{
    public:
        Column(){};
        Column(double r, int h){radius = r;H = h;}
        virtual double area(){return pi * pow(radius, 2) * H;}
        virtual double volume(){return 2 * pi * pow(radius, 2) + 2 * pi * radius * H;}
        ~Column(){};
    private:
        int H;
};

void func(Figure &p)
{
    cout << "area = " << p.area() << endl;
    cout << "volume = " << p.volume() << endl;
}
int main()
{
    int r = 3;
    int h = 4;
    Figure F(r);

    Sphere S(r);
    cout << "Sphere:\n";
    func(S);

    Column C(r, h);
    cout << "Column:\n";
    func(C);

    return 0;
}

 p.area() 对象加访问函数,可以直接输出成员函数返回值

基类的数据成员可以继承,但需要再次赋值,Sphere S(r)-虽然先构造基类的构造函数,但是不会赋值给基类的数据成员

实验内容: 一、定义一个名为Circle的圆类,位于shape包中。要求如下: (1) 该类需要描述圆在二维坐标系中的位置,圆心的横、纵坐标值均取整数;描述圆的半径,取双精度类型。 (2) 无参构造方法将圆心坐标设为坐标圆点,半径设为1.0;有参构造方法需要根据参数值设置圆心坐标和半径值。 (3) 提供一个计算圆面积的方法double getArea()。 (4) 提供一个判断当前圆对象与参数圆对象是否相交的方法(相交方式见下图): boolean isIntersected(Circle another) (5) 提供一个判断当前圆对象是否包含参数圆对象的方法(包含方式见下图): boolean contains(Circle another) (6) 提供一个判断当前圆对象与参数圆对象的大小关系的方法(判断依据是半径,半径之差的绝对值小于0.0001认为相等;返回负数表示当前圆对象小,0表示相等,正数表示当前圆对象) int compareTo(Circle another) (7) 提供返回当前圆的字符串的方法,格式为:[Circle(x,y)-raduis] String toString() 二、定义一个包含main方法的类TestCircle,位于shape包中。要求如下: (1) main方法中调用以下方法。 (2) 编写静态方法createArray,生成位置和大小均随机的10个圆对象,置于数组中。 (3) 编写静态方法sort对这10个圆对象进行升序排序,并输出。 (4) 编写静态方法computeArea计算这10个圆中互不相交和包含的圆的面积之和。 提交要求:打包为可以执行的JAR文档,其中要包含源程序文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值