定义一个基类 Shape ,有成员函数: calArea (),但什么都不做,返回0。在此基础上公有派生出 Rectangle (矩形)类和 Circle 类,添加相应的数据成员(成员均为 double 型),重新定义 calArea ()计算对象的面积。
时间: 2023-11-22 09:54:59 浏览: 36
下面是实现该题目的 C++ 代码:
```cpp
#include <iostream>
using namespace std;
class Shape {
public:
virtual double calArea() {
return 0;
}
};
class Rectangle : public Shape {
public:
double width;
double height;
virtual double calArea() {
return width * height;
}
};
class Circle : public Shape {
public:
double radius;
virtual double calArea() {
return 3.14 * radius * radius;
}
};
int main() {
Shape* shape1 = new Rectangle();
Shape* shape2 = new Circle();
((Rectangle*)shape1)->width = 10;
((Rectangle*)shape1)->height = 20;
cout << "Rectangle area: " << shape1->calArea() << endl;
((Circle*)shape2)->radius = 5;
cout << "Circle area: " << shape2->calArea() << endl;
delete shape1;
delete shape2;
return 0;
}
```
在上面的代码中,我们定义了一个基类 Shape ,其中有一个虚函数 calArea() ,但它什么也不做,返回值为 0 。然后我们通过 public 继承的方式定义了 Rectangle 和 Circle 两个派生类,并分别添加了对应的数据成员和重新定义了 calArea() 函数,用来计算对象的面积。
在主函数中,我们通过 Shape* 的指针分别创建了 Rectangle 和 Circle 的对象,并进行了相应的赋值。最后输出了这两个对象的面积。需要注意的是,在使用指针访问派生类的成员时,必须进行类型转换,否则编译器会提示错误。