定义一个基类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.1415926 3 6 3 通过Rectangle类对象调用calArea():18 通过Circle类对象调用calArea():28.2743 基类指针指向Rectangle类对象,调用calArea():0 基类指针指向Circle类对象,调用calArea():0 Rectangle类对象初始化基类对象引用r,r调用calArea():0 Circle类对象初始化基类对象引用r,r调用calArea():0
时间: 2023-11-28 07:48:21 浏览: 140
代码如下:
```
#include <iostream>
using namespace std;
const double PI = 3.1415926;
class Shape{
public:
virtual double calArea(){
return 0;
}
};
class Rectangle : public Shape{
public:
Rectangle(double len = 0, double wid = 0) : length(len), width(wid){}
virtual double calArea(){
return length * width;
}
private:
double length;
double width;
};
class Circle : public Shape{
public:
Circle(double r = 0) : radius(r){}
virtual double calArea(){
return PI * radius * radius;
}
private:
double radius;
};
int main(){
double len, wid, r;
cout << "请输入矩形的长和宽:";
cin >> len >> wid;
Rectangle rect(len, wid);
cout << "通过Rectangle类对象调用calArea():" << rect.calArea() << endl;
cout << "请输入圆的半径:";
cin >> r;
Circle cir(r);
cout << "通过Circle类对象调用calArea():" << cir.calArea() << endl;
Shape* p;
p = ▭
cout << "基类指针指向Rectangle类对象,调用calArea():" << p->calArea() << endl;
p = ○
cout << "基类指针指向Circle类对象,调用calArea():" << p->calArea() << endl;
Shape& r1 = rect;
cout << "Rectangle类对象初始化基类对象引用r,r调用calArea():" << r1.calArea() << endl;
Shape& r2 = cir;
cout << "Circle类对象初始化基类对象引用r,r调用calArea():" << r2.calArea() << endl;
return 0;
}
```
输出结果为:
```
请输入矩形的长和宽:3 6
通过Rectangle类对象调用calArea():18
请输入圆的半径:3
通过Circle类对象调用calArea():28.2743
基类指针指向Rectangle类对象,调用calArea():18
基类指针指向Circle类对象,调用calArea():28.2743
Rectangle类对象初始化基类对象引用r,r调用calArea():18
Circle类对象初始化基类对象引用r,r调用calArea():28.2743
```
阅读全文