pta7-3 圆派生出圆柱体类
时间: 2024-12-29 12:23:59 浏览: 12
### 圆柱体类的实现
#### Java 中从圆类派生出圆柱体类
在面向对象编程中,通过继承机制可以创建新的类来扩展现有类的功能。对于从`Circle`类派生出`Cylinder`类的情况,在Java中的具体实现如下:
```java
// 定义 Circle 类
class Circle {
protected double radius;
public Circle(double radius) {
this.radius = radius;
}
// 计算面积的方法
public double getArea() {
return Math.PI * radius * radius;
}
}
// Cylinder 继承自 Circle
class Cylinder extends Circle {
private double height;
// 构造器初始化半径和高度
public Cylinder(double radius, double height) {
super(radius); // 调用父类构造器设置半径
this.height = height;
}
// 获取体积的方法
public double getVolume() {
return getArea() * height; // 使用继承来的getArea计算底面并乘以高得到体积
}
// 获取侧面积的方法
public double getSideSurfaceArea(){
return 2 * Math.PI * radius * height;
}
// 获取总表面积的方法
public double getTotalSurfaceArea(){
return 2*getArea()+getSideSurfaceArea();
}
}
```
上述代码展示了如何定义一个基本几何形状——圆形,并基于此构建更复杂的三维图形即圆柱形。这里的关键在于理解子类不仅可以直接访问其父类的所有公共属性与行为(除非特别指明不可覆盖),还可以在此基础上增加额外的数据成员以及相应的行为逻辑。
#### C++ 中从圆类派生出圆柱体类
同样的概念也可以应用于C++环境中,下面给出相应的例子:
```cpp
#include <iostream>
using namespace std;
// 定义 Circle 类
class Circle {
protected:
float radius;
public:
Circle(float r):radius(r){}
virtual ~Circle(){}
// 返回圆周率 PI 的近似值
const static float pi();
// 计算面积的方法
float area() {return pi()*radius*radius;}
};
const float Circle::pi(){return 3.14f;}
// Cylinder 继承自 Circle
class Cylinder : public Circle{
private:
float height;
public:
Cylinder(float rad, float h): Circle(rad),height(h){}
// 获取体积的方法
float volume() {return area()*height;}
// 获取侧面积的方法
float side_surface_area (){return 2*pi()*radius*height;}
// 获取总表面积的方法
float total_surface_area () {return (2*area())+side_surface_area();}
};
```
在这两个示例中,都遵循了良好的面向对象设计原则,其中最重要的一点就是利用了继承特性使得新类型的创建变得简单而直观[^1]。
阅读全文