C++ 多态

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容