c++两个类point和figure派生一个形状类
时间: 2023-10-21 14:05:45 浏览: 110
可以这样实现:
```c++
// 基类 Point,表示二维平面上的一个点
class Point {
public:
Point(int x, int y): x_(x), y_(y) {}
int x() const { return x_; }
int y() const { return y_; }
private:
int x_;
int y_;
};
// 基类 Figure,表示一个形状,提供面积和周长的计算方法
class Figure {
public:
virtual double area() const = 0;
virtual double perimeter() const = 0;
};
// 派生类 Shape,表示一个形状,由一个点构成
class Shape: public Figure {
public:
Shape(const Point& p): p_(p) {}
double area() const override { return 0; }
double perimeter() const override { return 0; }
protected:
Point p_;
};
// 派生类 Circle,表示一个圆
class Circle: public Figure {
public:
Circle(const Point& center, double radius): center_(center), radius_(radius) {}
double area() const override { return 3.1416 * radius_ * radius_; }
double perimeter() const override { return 2 * 3.1416 * radius_; }
private:
Point center_;
double radius_;
};
// 派生类 Rectangle,表示一个矩形
class Rectangle: public Figure {
public:
Rectangle(const Point& left_top, const Point& right_bottom): left_top_(left_top), right_bottom_(right_bottom) {}
double area() const override { return (right_bottom_.x() - left_top_.x()) * (right_bottom_.y() - left_top_.y()); }
double perimeter() const override { return 2 * ((right_bottom_.x() - left_top_.x()) + (right_bottom_.y() - left_top_.y())); }
private:
Point left_top_;
Point right_bottom_;
};
```
在这里,我们定义了两个基类 `Point` 和 `Figure`,以及一个派生类 `Shape`,表示一个由一个点构成的形状。然后,我们又定义了两个派生类 `Circle` 和 `Rectangle`,分别表示一个圆和一个矩形。这些类都实现了 `Figure` 中定义的 `area()` 和 `perimeter()` 方法,用来计算形状的面积和周长。
注意,我们在 `Shape` 中使用了 `Point` 类,这是因为一个形状必须有一个位置,而位置可以用一个点来表示。在 `Circle` 和 `Rectangle` 中,我们也使用了 `Point` 类,表示圆心和矩形的左上角和右下角两个点。
在这个设计中,如果我们需要添加新的形状,只需要再定义一个派生类,并实现 `area()` 和 `perimeter()` 方法即可。
阅读全文