定义一个基类Shape,在此基础上派生出Rectangle和Circle,二者都有getArea( )函数计算对象的面积,再使用Rectangle类创建一个派生类Square。在主函数中测试Rectangle、Circle和Square这三个类。在此基础上,将getArea()改造为虚函数。在主函数当中,只使用一个Shape *类型的指针p,依次指向Rectangle、Circle和Square的一个对象,并通过p->getArea()计算面积。
时间: 2024-02-12 20:06:36 浏览: 75
好的,以下是基类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
```
阅读全文