//下面的全局函数是专门为了调用虚函数实现运行时的多态性而设计的。 double objGetArea(Square* base); class Rectangle:public Square { protected: int length; //它的宽由正方形类 Square 的成员提供 public: double GetArea(); Rectangle(int edg,int leng); ~Rectangle(){ } }; double Rectangle::GetArea()//求矩形的面积 { double result; result=length*edge; return result; } Rectangle::Rectangle(int edg,int leng):Square(edg) { //调用基类的构造函数 Square(edg)使 edge=edg; length=leng; } double objGetArea(Square* obj) { return obj->GetArea(); }
时间: 2024-03-17 18:44:58 浏览: 52
这段代码定义了一个全局函数objGetArea(),该函数接受一个基类指针Square*作为参数,并调用该指针所指对象的GetArea()虚函数,实现了运行时的多态性。同时,该代码还定义了一个Rectangle类,它继承了Square类,并重写了GetArea()函数,用于计算矩形的面积。
以下是代码的完整实现:
```c++
#include <iostream>
using namespace std;
class Square {
protected:
int edge;
public:
Square(int edg);
virtual double GetArea();
};
class Rectangle : public Square {
protected:
int length;
public:
Rectangle(int edg, int leng);
double GetArea() override;
};
Square::Square(int edg) : edge(edg) { }
double Square::GetArea() {
double result = edge * edge;
return result;
}
Rectangle::Rectangle(int edg, int leng) : Square(edg), length(leng) {}
double Rectangle::GetArea() {
double result = length * edge;
return result;
}
double objGetArea(Square* obj) {
return obj->GetArea();
}
int main() {
Square* sq = new Square(5);
Rectangle* rec = new Rectangle(5, 10);
cout << "Square area: " << objGetArea(sq) << endl;
cout << "Rectangle area: " << objGetArea(rec) << endl;
delete sq;
delete rec;
return 0;
}
```
在main函数中,我们创建了一个Square对象和一个Rectangle对象,并通过objGetArea()函数分别计算它们的面积。由于Square和Rectangle类都继承了Square类,并重写了GetArea()函数,因此可以实现运行时的多态性,即通过基类指针调用派生类的函数。
需要注意的是,在Square类中,GetArea()函数被声明为虚函数,以便在派生类中重写。在Rectangle类中,我们使用override关键字来明确重写基类的GetArea()函数。
阅读全文