用C++以Quadrilateral,Trapezoid,Parallelogram,Rectangle,Square画出一个继承层次结构,以Quadrilateral作为结构的基类,层次尽可能多
时间: 2024-01-06 17:03:02 浏览: 111
当然,我很乐意帮助您回答这个问题。下面是您所需的继承层次结构的代码:
```c++
class Quadrilateral {
public:
virtual double area() const = 0;
virtual void print() const = 0;
};
class Trapezoid : public Quadrilateral {
protected:
double a, b, h;
public:
Trapezoid(double a, double b, double h): a(a), b(b), h(h) {}
double area() const override { return (a + b) * h / 2; }
void print() const override { std::cout << "Trapezoid\n"; }
};
class Parallelogram : public Quadrilateral {
protected:
double b, h;
public:
Parallelogram(double b, double h): b(b), h(h) {}
double area() const override { return b * h; }
void print() const override { std::cout << "Parallelogram\n"; }
};
class Rectangle : public Parallelogram {
protected:
double a;
public:
Rectangle(double a, double b): Parallelogram(b, a), a(a) {}
double area() const override { return a * b; }
void print() const override { std::cout << "Rectangle\n"; }
};
class Square : public Rectangle {
public:
Square(double a): Rectangle(a, a) {}
double area() const override { return a * a; }
void print() const override { std::cout << "Square\n"; }
};
```
在这个继承层次结构中,`Quadrilateral` 是基类,`Trapezoid` 和 `Parallelogram` 是直接从基类继承的子类,`Rectangle` 和 `Square` 是间接继承自 `Quadrilateral` 的子类。每个子类都实现了自己的 `area()` 和 `print()` 函数,以用于计算其面积和打印形状名称。
这个继承层次结构允许您通过调用 `area()` 和 `print()` 函数来计算和打印每个形状的信息。例如,下面是一个使用这个继承层次结构的示例:
```c++
#include <iostream>
int main() {
Quadrilateral* shapes[] = {
new Trapezoid(2.0, 4.0, 1.0),
new Parallelogram(3.0, 2.0),
new Rectangle(2.0, 3.0),
new Square(2.0)
};
for (auto shape : shapes) {
shape->print();
std::cout << "Area: " << shape->area() << "\n\n";
}
for (auto shape : shapes) {
delete shape;
}
return 0;
}
```
这个示例创建了一个包含四个形状的数组,并使用 `for` 循环逐个遍历数组中的每个元素。在循环中,程序调用每个形状的 `print()` 和 `area()` 函数,并输出其结果。最后,程序释放了分配给每个形状的内存。
阅读全文