用C++定义一个shape抽象类,派生出Rectangle类和Circle类,计算各派生类对象的面积Area( )。试用纯虚函数和抽象类的概念来设计它们。
时间: 2024-10-22 07:27:50 浏览: 65
在C++中,我们可以使用抽象类和纯虚函数来实现形状的抽象概念。首先,我们需要创建一个名为Shape的抽象类,该类包含一个纯虚函数`virtual double area() const = 0;`。这个函数表示所有形状都有面积计算的能力,但具体怎么计算由它的子类来实现。
```cpp
// Shape.h
#include <iostream>
class Shape {
public:
virtual ~Shape() {} // 构造析构器为默认
// 纯虚函数,声明但不提供实现
virtual double area() const = 0;
// 公共方法,用于演示如何使用抽象类
virtual void printName() const {
std::cout << "Base Shape" << std::endl;
}
};
// Rectangle.h
class Rectangle : public Shape {
private:
double width, height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
double area() const override { return width * height; }
void printName() const override {
std::cout << "Rectangle" << std::endl;
}
};
// Circle.h
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double area() const override { return M_PI * pow(radius, 2); }
void printName() const override {
std::cout << "Circle" << std::endl;
}
};
```
在这个例子中,Rectangle和Circle类都继承自Shape,并实现了`area()`函数,分别计算矩形和圆形的面积。用户可以创建Shape类型的指针或者引用,指向具体的Rectangle或Circle实例,然后通过调用`area()`来获取面积,程序会根据实际类型动态调用相应的面积计算方法。
阅读全文