定义一个基类Shape,有成员函数:calArea(),但什么都不做,返回0。在此基础上公有派生出Rectangle(矩形)类和Circle类,添加相应的数据成员(成员均为double型),重新定义calArea()计算对象的面积。 主函数中,分别定义一个Rectangle和Circle类对象,初始值由键盘输入。(1)通过对象调用相应的calArea(),输出结果;(2)定义Shape类对象指针,分别赋以Rectangle和Circle类的对象地址,通过指针调用calArea(),输出结果;(3)定义Shape类对象引用r,以Rectangle和Circle类的对象初始化r,通过引用r调用calArea(),输出结果。 PI取值:3.1415926c++语言
时间: 2023-09-22 17:05:40 浏览: 89
声明一个图形基类并在它的基础上派生出其他类并编写程序实现各类的定义及实现
以下是代码实现:
```c++
#include <iostream>
using namespace std;
const double PI = 3.1415926;
class Shape {
public:
virtual double calArea() {
return 0;
}
};
class Rectangle : public Shape {
private:
double width, height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
double calArea() override {
return width * height;
}
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double calArea() override {
return PI * radius * radius;
}
};
int main() {
// 通过对象调用相应的calArea(),输出结果
double w, h, r;
cout << "请输入矩形的宽和高:" << endl;
cin >> w >> h;
Rectangle rec(w, h);
cout << "矩形的面积为:" << rec.calArea() << endl;
cout << "请输入圆的半径:" << endl;
cin >> r;
Circle cir(r);
cout << "圆的面积为:" << cir.calArea() << endl;
// 定义Shape类对象指针,分别赋以Rectangle和Circle类的对象地址,通过指针调用calArea(),输出结果
Shape* pRec = &rec;
Shape* pCir = ○
cout << "通过指针调用矩形的面积为:" << pRec->calArea() << endl;
cout << "通过指针调用圆的面积为:" << pCir->calArea() << endl;
// 定义Shape类对象引用r,以Rectangle和Circle类的对象初始化r,通过引用r调用calArea(),输出结果
Shape& rRec = rec;
Shape& rCir = cir;
cout << "通过引用调用矩形的面积为:" << rRec.calArea() << endl;
cout << "通过引用调用圆的面积为:" << rCir.calArea() << endl;
return 0;
}
```
输出示例:
```
请输入矩形的宽和高:
4.5 6.7
矩形的面积为:30.15
请输入圆的半径:
2.5
圆的面积为:19.63495
通过指针调用矩形的面积为:30.15
通过指针调用圆的面积为:19.63495
通过引用调用矩形的面积为:30.15
通过引用调用圆的面积为:19.63495
```
阅读全文