定义一个基类Shape,在此基础上派生出Rectangle和Circle,二者都有getArea( )函数计算对象的面积,再使用Rectangle类创建一个派生类Square。在主函数中测试Rectangle、Circle和Square这三个类。在此基础上,将getArea()改造为虚函数。在主函数当中,只使用一个Shape *类型的指针p,依次指向Rectangle、Circle和Square的一个对象,并通过p->getArea()计算面积。
时间: 2024-02-12 21:06:36 浏览: 74
声明一个图形基类并在它的基础上派生出其他类并编写程序实现各类的定义及实现
好的,以下是基类Shape、派生类Rectangle和Circle,以及派生类Square的定义和实现:
```cpp
#include <iostream>
using namespace std;
class Shape {
public:
virtual double getArea() { return 0; } // 虚函数
};
class Rectangle : public Shape {
protected:
double width, height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
double getArea() { return width * height; }
};
class Circle : public Shape {
protected:
double radius;
public:
Circle(double r) : radius(r) {}
double getArea() { return 3.14 * radius * radius; }
};
class Square : public Rectangle {
public:
Square(double s) : Rectangle(s, s) {}
};
```
在主函数中,我们可以使用一个 `Shape*` 类型的指针 `p`,指向不同的对象,通过 `p->getArea()` 来计算面积:
```cpp
int main() {
Rectangle r(4, 3);
Circle c(5);
Square s(6);
Shape* p = &r;
cout << "矩形的面积:" << p->getArea() << endl;
p = &c;
cout << "圆形的面积:" << p->getArea() << endl;
p = &s;
cout << "正方形的面积:" << p->getArea() << endl;
return 0;
}
```
输出结果为:
```
矩形的面积:12
圆形的面积:78.5
正方形的面积:36
```
阅读全文