C++作业派生类的定义求解

如下,现已有一个完整的长方形的类Rectangle, 数据成员有长和宽,成员函数包括一个构造函数和一个计算面积的函数area()。

请写出一个表示长方体的派生类Box,继承这个已给出的Rectangle类,满足以下要求:

(1)* 只能新增一个数据成员:height (高)。

(2)* 定义一个合适的Box类构造函数,使得main函数中创建对象的初始化可行;

(3)* 使用合适的继承方式,使得main函数中能通过派生类Box对象直接调用基类中的area()函数输出底面积。

(4) 新增一个成员函数 volume() 返回长方体的体积,使得main函数中的调用可行;

#include
using namespace std;

class Rectangle //长方形
{
public:
Rectangle(double l, double w) : length(l), width(w)
{
}
double area()
{
return length * width;
}
private:
double length; //长
double width; //宽
};

//在此定义派生类Box
// 在此处补充你的代码
int main()
{
Box b1(10, 20, 30);
cout << b1.area() << endl;
cout << b1.volume() << endl;
return 0;
}
输入

输出
main函数输出的两行,第一行应该是b1的底面积,第二行输出的是b1的体积
样例输入

样例输出
200
6000

代码如下,已测试,结果如图,望采纳

#include <iostream>
using namespace std;

class Rectangle //长方形
{
public:
    Rectangle(double l, double w) : length(l), width(w)
{}
    double area()
    {
        return length * width;
    }
protected:
    double length; //长
    double width; //宽
};
class Box : public Rectangle //长方体,公有继承长方形
{
private:
    double height;
public:
    Box(double l, double w, double h) : Rectangle(l,w), height(h)  子类的初始化表中应该包含对父类的初始化
    {
    }
    double volume()
    {
        return length*width*height;
    }
};
int main()
{
    Box b1(10, 20, 30);
    cout << b1.area() << endl;
    cout << b1.volume() << endl;
    return 0;
}

图片说明

这个无法做到,因为Rectangle类中两个变量的访问权限为private(只有本类可见,连子类都不可见),
下面的代码是基于把private改成protected实现的:
(没有测试过,如有拼写错误请原谅)

class Box : public Rectangle{
    Box(double l, double w, double h) : length(l), width(w), height(h)
    {
    }
    double volume(){
        return length*width*height;
    }
    private: // or protected
    double height;
};
#include<iostream>
using namespace std;

class Rectangle //长方形
{
public:
    Rectangle(double l, double w) : length(l), width(w)
    {
    }
    double area()
    {
        return length * width;
    }
private:
    double length; //长
    double width; //宽
};

class Box :public Rectangle
{
private:
    double height;
public:
    Box(double l, double w, double h) :Rectangle(l, w), height(h){}

    double volume()
    {
        return height*area();
    }
};

//在此定义派生类Box
// 在此处补充你的代码
int main()
{
    Box b1(10, 20, 30);
    cout << b1.area() << endl;
    cout << b1.volume() << endl;
    system("PAUSE");
    return 0;
}

私有属性不能丢 不然与题不符

父类提供了底面积接口 可以直接用就行