1)重写派生类矩形、圆形、圆的面积函数和周长函数; 2)重写派生类球体、圆柱体、圆锥体的面积函数和体积函数。 3)实现一个静态类,该静态类用于分别计算图形数组的面积、周长和体积之和。
时间: 2025-07-05 12:07:27 浏览: 2
### 实现派生类中的面积和周长/体积函数
为了实现不同几何形状的面积、周长以及体积计算功能,在面向对象编程中可以采用继承机制。下面分别展示 C++ 和 Python 中的具体实现方式。
#### C++
对于 C++ 来说,定义一个抽象基类 `Shape` 并声明虚函数用于子类覆写:
```cpp
#include <iostream>
#include <vector>
class Shape {
public:
virtual double area() const = 0;
virtual double perimeter_or_volume() const = 0; // 周长或体积取决于具体形状
};
// 圆形 CCircle 继承自 Shape 类并实现了其纯虚方法
class CCircle : public Shape {
private:
float r;
public:
explicit CCircle(float radius) : r(radius) {}
double area() const override { return M_PI * pow(r, 2); } // 计算圆面积[^1]
double perimeter_or_volume() const override { return 2 * M_PI * r; }
};
```
同样地,其他形状如矩形、球体等也可以按照上述模式进行扩展。
#### Python
Python 的处理相对简单一些,因为不需要显式地标记接口或抽象类:
```python
from abc import ABCMeta, abstractmethod
import math
class Shape(metaclass=ABCMeta):
@abstractmethod
def area(self): pass
@abstractmethod
def perimeter_or_volume(self): pass # 周长或体积取决于具体形状
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return math.pi * (self.radius ** 2)
def perimeter_or_volume(self):
return 2 * math.pi * self.radius
```
### 静态类统计图形数组属性
接下来创建一个静态工具类用来汇总所有给定形状实例的信息。这里假设有一个包含各种形状对象列表作为输入参数传递进来。
#### C++
在 C++ 中可以通过模板技术轻松完成此操作:
```cpp
template<typename T>
double sum_property(const std::vector<T*>& shapes, bool is_area=true){
double total = 0.0;
for(auto shape : shapes){
if(is_area)
total += static_cast<Shape*>(shape)->area();
else
total += static_cast<Shape*>(shape)->perimeter_or_volume();
}
return total;
}
```
调用时传入相应的布尔值决定是要累加面积还是周长/体积。
#### Python
而在 Python 中则更加直观简洁:
```python
def calculate_total(shapes, property_name='area'):
"""Calculate the total of a specific geometric property across all given shapes."""
properties_sum = sum(getattr(shape, property_name)() for shape in shapes)
return properties_sum
```
该辅助函数接受两个参数:一个是形状对象组成的序列;另一个是指明要累积求和的是哪个属性名称,默认情况下是 'area' 表示面积。
阅读全文
相关推荐







