2024.5.21
【题目描述】设计三维图形类体系,要求如下:
设计三维图形功能接口,接口包含周长、面积、体积计算方法;
基于以上接口,首先定义点类,应包含x,y坐标数据成员,坐标获取及设置方法、显示方法等;
以点类为基类派生圆类,增加表示半径的数据成员,半径获取及设置方法,重载显示函数,并可计算周长和面积等;
以圆类为基础派生球类、圆柱类、圆锥类;要求派生类球、圆柱、圆锥中都含有输入和输出显示方法;并可计算面积、周长。
程序中定义各种类的对象,并完成测试。
【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
import math
# 定义三维图形接口
class ThreeDimensionalShape:
def perimeter(self):
pass
def area(self):
pass
def volume(self):
pass
# 定义点类
class Point:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def get_coordinates(self):
return self.x, self.y
def set_coordinates(self, x, y):
self.x = x
self.y = y
def display(self):
print(f"Point coordinates: ({self.x}, {self.y})")
# 定义圆类
class Circle(Point, ThreeDimensionalShape):
def __init__(self, x=0, y=0, radius=0):
super().__init__(x, y)
self.radius = radius
def set_radius(self, radius):
self.radius = radius
def perimeter(self):
return 2 * math.pi * self.radius
def area(self):
return math.pi * self.radius ** 2
def display(self):
super().display()
print(f"Circle radius: {self.radius}")
print(f"Circle perimeter: {self.perimeter()}")
print(f"Circle area: {self.area()}")
# 定义球类
class Sphere(Circle):
def __init__(self, x=0, y=0, radius=0):
super().__init__(x, y, radius)
def volume(self):
return (4 / 3) * math.pi * self.radius ** 3
def display(self):
super().display()
print(f"Sphere volume: {self.volume()}")
# 定义圆柱类
class Cylinder(Circle):
def __init__(self, x=0, y=0, radius=0, height=0):
super().__init__(x, y, radius)
self.height = height
def volume(self):
return math.pi * self.radius ** 2 * self.height
def display(self):
super().display()
print(f"Cylinder height: {self.height}")
print(f"Cylinder volume: {self.volume()}")
# 定义圆锥类
class Cone(Circle):
def __init__(self, x=0, y=0, radius=0, height=0):
super().__init__(x, y, radius)
self.height = height
def volume(self):
return (1 / 3) * math.pi * self.radius ** 2 * self.height
def display(self):
super().display()
print(f"Cone height: {self.height}")
print(f"Cone volume: {self.volume()}")
# 测试
if __name__ == "__main__":
point = Point(1, 2)
point.display()
circle = Circle(3, 4, 5)
circle.display()
sphere = Sphere(6, 7, 8)
sphere.display()
cylinder = Cylinder(9, 10, 11, 12)
cylinder.display()
cone = Cone(13, 14, 15, 16)
cone.display()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通