计算三角形,正方形,圆形面、周长。要求: (1)设计基类shape,并定义area(),cir()两个纯虚函数。 (2)设计三个派生类:直角三角形,正方形,圆形。 (3)在主函数中,利用基类指针,进行派生类成员函数的调用,实现动态联编
时间: 2024-09-24 13:12:43 浏览: 43
在面向对象编程中,我们可以创建一个名为Shape的基类,用于描述所有形状的基本属性和行为。首先,我们定义一个基类Shape,包含一个纯虚函数area()表示面积计算,以及一个纯虚函数cir()表示周长计算:
```cpp
class Shape {
public:
virtual double area() const = 0; // 纯虚函数,声明但不提供实现
virtual double cir() const = 0; // 纯虚函数,声明但不提供实现
protected:
Shape() {}
virtual ~Shape() {}
};
```
然后,我们为三角形、正方形和圆形这三种具体的形状分别创建派生类:
1. 直角三角形(RightTriangle):
```cpp
class RightTriangle : public Shape {
private:
double base;
double height;
public:
RightTriangle(double b, double h) : base(b), height(h) {}
double area() const override { return 0.5 * base * height; }
double cir() const override { return base + height; }
};
```
2. 正方形(Rectangle):
```cpp
class Rectangle : public Shape {
private:
double length;
double width;
public:
Rectangle(double l, double w) : length(l), width(w) {}
double area() const override { return length * width; }
double cir() const override { return 2 * (length + width); }
};
```
3. 圆形(Circle):
```cpp
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double area() const override { return M_PI * pow(radius, 2); } // 使用π和pow计算面积
double cir() const override { return 2 * M_PI * radius; } // 使用π和radius计算周长
};
```
在主函数main()中,我们可以使用基类Shape的指针来处理各种形状,实现了动态联编:
```cpp
int main() {
Shape* shapes[] = {new RightTriangle(3, 4), new Rectangle(5, 5), new Circle(2)};
for (auto shape : shapes) {
cout << "Area: " << shape->area() << ", Circumference: " << shape->cir() << endl;
delete shape; // 释放内存
}
return 0;
}
```
在这个例子中,虽然我们使用的是Shape类型的指针,但在运行时,实际调用的是每个特定形状类的area()和cir()函数,这就是动态联编的效果。
阅读全文