c++设计一个抽象类Shape,它表示具有形状的东西,并体现了抽象的概念,在它下面可以派生出多种具体形状,比如三角形、矩形等。
时间: 2024-03-21 10:43:45 浏览: 61
好的,下面是一个示例的抽象类Shape的定义:
```
class Shape {
public:
virtual double area() = 0; // 纯虚函数,表示计算该形状的面积
virtual double perimeter() = 0; // 纯虚函数,表示计算该形状的周长
};
```
在这个抽象类中,我们定义了两个纯虚函数area和perimeter,表示计算形状的面积和周长。由于这两个函数没有具体的实现,所以Shape类是一个抽象类,不能被实例化。
接下来,我们可以在Shape类的基础上派生出具体的形状类,比如:
```
class Triangle : public Shape {
public:
Triangle(double a, double b, double c) : a(a), b(b), c(c) {}
double area() override {
double p = (a + b + c) / 2;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
double perimeter() override {
return a + b + c;
}
private:
double a, b, c;
};
class Rectangle : public Shape {
public:
Rectangle(double w, double h) : width(w), height(h) {}
double area() override {
return width * height;
}
double perimeter() override {
return 2 * (width + height);
}
private:
double width, height;
};
```
在Triangle和Rectangle类中,我们实现了Shape类中定义的纯虚函数area和perimeter,并定义了各自特有的成员变量。这样,我们就可以通过派生具体的形状类来获得不同形状的面积和周长了。
阅读全文