C++ 多态
-
虚函数:在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。
-
纯虚函数:virtual int area() = 0;( = 0 告诉编译器函数没有主体,上面的虚函数是纯虚函数)
#include <iostream>
using namespace std;
class Shape {
protected:
int width, height;
public:
Shape(int a = 0, int b = 0) {
width = a;
height = b;
}
// virtual void area() {
// cout << "Parent class area: " << endl;
// }
// 纯虚函数
// 没有函数体,在不同的子类内有不同的实现
// 多态体现在不同的对象存在相同的父类指针中,父类方法可根据指针的实际指向调用不同的子类方法
virtual void area()=0;
};
class Rectangle : public Shape {
public:
Rectangle(int a = 0, int b = 0) : Shape(a, b) {}
void area() {
cout << "Rectangle class area: " << width * height << endl;
}
};
class Triangle : public Shape {
public:
Triangle(int a = 0, int b = 0) : Shape(a, b) {}
void area() {
cout << "Triangle class area: " << width * height / 2 << endl;
}
};
int main() {
Shape *shape;
Rectangle rec(10, 7);
shape = &rec; // 存储矩形的地址
shape->area(); // 调用矩形的求面积函数 area
Triangle tri(10, 5);
shape = &tri; // 存储三角形的地址
shape->area(); // 调用三角形的求面积函数 area
return 0;
}
Rectangle class area: 70
Triangle class area: 25