如下,现已有一个完整的长方形的类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;
}
私有属性不能丢 不然与题不符
父类提供了底面积接口 可以直接用就行