简洁叙述C++如何实现多态的
时间: 2023-07-16 15:13:15 浏览: 64
C++ 中实现多态主要通过虚函数和运行时多态性来实现。具体步骤如下:
1. 定义一个基类(父类),包含虚函数。
2. 派生出子类(子类可以有自己的成员变量和成员函数)。
3. 在基类的虚函数前面加上关键字 `virtual`,表示该函数是虚函数,可以被子类重写。
4. 在子类中重写该虚函数,可以使用关键字 `override` 明确表示是重写基类的虚函数。
5. 在程序运行时,如果需要调用该虚函数,会根据对象的实际类型来调用相应的虚函数。
6. 如果将子类对象指针赋值给基类指针,则可以通过基类指针调用虚函数,会根据指针所指向的对象类型来调用相应的虚函数,实现运行时多态性。
示例代码如下:
```cpp
#include <iostream>
using namespace std;
class Shape {
public:
virtual double getArea() {
return 0;
}
};
class Rectangle : public Shape {
public:
double width;
double height;
Rectangle(double w, double h) : width(w), height(h) { }
double getArea() override {
return width * height;
}
};
class Circle : public Shape {
public:
double radius;
Circle(double r) : radius(r) { }
double getArea() override {
return 3.14 * radius * radius;
}
};
int main() {
Shape* shape1 = new Rectangle(5, 6);
Shape* shape2 = new Circle(4);
cout << "Rectangle area: " << shape1->getArea() << endl;
cout << "Circle area: " << shape2->getArea() << endl;
delete shape1;
delete shape2;
return 0;
}
```
输出结果为:
```
Rectangle area: 30
Circle area: 50.24
```
其中,`Shape` 类是基类,`Rectangle` 和 `Circle` 是子类。在 `Shape` 中定义了一个 `getArea()` 虚函数,在子类中重写了该函数,实现多态性。在 `main` 函数中,分别创建了 `Rectangle` 和 `Circle` 的对象,通过基类指针调用了虚函数 `getArea()`,实现了运行时多态。