练习2.采用虚函数实现如下程序: 定义一个点类,类中有私有的数据成 员x, y,公有的成员函数有参构造函 数,无参构造函数,计算点面积的 area函数。 定义—个圆类,圆类公有继承点类, 类中新增私有的数据成员半径r,类中 有公有的成员函数,有参构造函数, 无参构造函数,计算圆面积的area函 数。 2 在main函数中创建一个点类的对象, 一个圆类的对象,定义基类的指针, 分别调用点类和圆类的area方法,观 察动态多态。 激活Windows 转到”设置以激活wiD
时间: 2023-09-15 10:24:27 浏览: 107
虚函数使用练习程序(win32控制台版本)
以下是题目要求的代码实现:
```c++
#include <iostream>
using namespace std;
class Point {
protected:
double x, y;
public:
Point(double a = 0, double b = 0) {
x = a;
y = b;
}
virtual double area() {
return 0;
}
};
class Circle : public Point {
private:
double r;
public:
Circle(double a = 0, double b = 0, double c = 0) : Point(a, b) {
r = c;
}
double area() {
return 3.14159 * r * r;
}
};
int main() {
Point *p;
Point a(1, 2);
Circle b(3, 4, 5);
p = &a;
cout << "Area of point: " << p->area() << endl;
p = &b;
cout << "Area of circle: " << p->area() << endl;
return 0;
}
```
在上面的代码中,我们定义了一个点类 `Point` 和一个圆类 `Circle`。圆类公有继承点类,因此圆类中也包含了点类的 `x` 和 `y` 数据成员。在圆类中新增了一个私有的数据成员 `r` 表示圆的半径。`Circle` 的构造函数中,我们调用了点类的有参构造函数,并将 `r` 的值初始化为输入的第三个参数。
在 `Point` 类中,我们定义了一个虚函数 `area()`,返回值为 `double`,在圆类中重写了该虚函数,计算圆的面积。
在 `main()` 函数中,我们创建了一个点类的对象 `a` 和一个圆类的对象 `b`。我们定义了一个基类指针 `p`,将其分别指向 `a` 和 `b`,并分别调用它们的 `area()` 方法。由于 `area()` 是一个虚函数,因此程序会根据指针所指向的对象类型,动态地调用正确的函数。这就是动态多态的体现。
阅读全文