定义一个shape类,利用它作为基类派生出Rectangle、 Circle等具体形状类,已知具体形状类均具有两个方法 GetArea和GetColor,分别用来得到形状的面积和颜色。 最后编写一个测试程序对产生的类的功能进行验证。
时间: 2024-10-26 08:16:16 浏览: 61
详解C++中基类与派生类的转换以及虚基类
首先,我们可以定义一个Shape类作为基础,表示所有形状的共同特性。这个Shape类可以有一个纯虚函数,用于计算面积和一个用于获取颜色的普通方法。然后,我们可以派生出Rectangle和Circle类,并分别实现GetArea和GetColor方法。
```cpp
// Shape.h
class Shape {
public:
// 虚函数,声明但不提供实现
virtual double GetArea() const = 0;
// 获取颜色
std::string GetColor() const { return color; }
protected:
std::string color; // 具体形状的颜色属性
};
// Rectangle.h
#include "Shape.h"
class Rectangle : public Shape {
private:
double width;
double height;
public:
Rectangle(double w, double h, std::string c) : width(w), height(h), color(c) {}
// 实现GetArea方法
double GetArea() const override { return width * height; }
};
// Circle.h
#include "Shape.h"
class Circle : public Shape {
private:
double radius;
public:
Circle(double r, std::string c) : radius(r), color(c) {}
// 实现GetArea方法,这里使用π乘以半径的平方
double GetArea() const override { return M_PI * radius * radius; }
};
// TestProgram.cpp
int main() {
Rectangle rectangle(5, 4, "blue");
Circle circle(3, "red");
// 验证Rectangle的面积和颜色
std::cout << "Rectangle area: " << rectangle.GetArea() << ", Color: " << rectangle.GetColor() << std::endl;
// 验证Circle的面积和颜色
std::cout << "Circle area: " << circle.GetArea() << ", Color: " << circle.GetColor() << std::endl;
return 0;
}
```
在这个例子中,`TestProgram.cpp` 中的测试部分创建了一个Rectangle和一个Circle实例,并通过基类Shape引用它们,展示了多态性的应用。我们不需要知道是Rectangle还是Circle,只需调用GetArea和GetColor即可获取各自的具体信息。
阅读全文