定义 GetPerim()函数计算对象的周长,通过重载来求矩形 Rectangle 和圆形 Circle的周长,并编写测试main()函数。.
时间: 2024-11-06 14:17:00 浏览: 24
在面向对象编程中,为了实现通用的计算周长功能,并针对特定形状(如矩形和圆形)提供定制的行为,你可以定义一个名为`GetPerim()`的公共成员函数,然后在这个函数上进行方法重载。以下是这个函数的示例,以及如何在`Rectangle`和`Circle`类中实现它,以及一个简单的`main()`函数来进行测试:
首先,在一个命名空间或类库中定义`GetPerim()`函数的基础模板:
```cpp
template <typename T>
double GetPerim(T obj, double side1 = 0, double side2 = 0) {
if constexpr (std::is_same_v<T, Rectangle>) {
return 2 * (side1 + side2);
} else if constexpr (std::is_same_v<T, Circle>) {
return 2 * std::acos(-1) * obj.getRadius(); // 假设getRadius()返回半径
}
throw std::runtime_error("Unsupported shape");
}
```
接着在`Rectangle`类中实现重载的`GetPerim()`:
```cpp
class Rectangle {
public:
double getLength();
double getWidth();
private:
double length;
double width;
};
// 实现方法...
double Rectangle::getLength() { return length; }
double Rectangle::getWidth() { return width; }
// 重载GetPerim()
double GetPerim(Rectangle rect) {
return GetPerim(rect, rect.getLength(), rect.getWidth());
}
```
然后在`Circle`类中实现类似的方法:
```cpp
class Circle {
public:
double getRadius();
private:
double radius;
};
// 实现方法...
double Circle::getRadius() { return radius; }
// 重载GetPerim()
double GetPerim(Circle circle) {
return GetPerim(circle, circle.getRadius());
}
```
最后,在`main()`函数中测试这两个形状的周长:
```cpp
int main() {
Rectangle rectangle(5, 7); // 创建一个宽5高7的矩形
Circle circle(3); // 创建一个半径为3的圆
try {
double rect_perimeter = GetPerim(rectangle);
double circle_perimeter = GetPerim(circle);
std::cout << "Rectangle perimeter: " << rect_perimeter << std::endl;
std::cout << "Circle perimeter: " << circle_perimeter << std::endl;
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
阅读全文