Fork me on Github Fork me on Gitee

C++温故补缺(九):C++多态

C++多态

继承和派生

当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态

如:shape类被派生为两个类:Rectangle和Triangle

虚函数

虚函数是在基类中用关键字virtual声明的函数,在派生类中重新定义基类中定义过的虚函数时,会告诉编译器不要静态链接到该函数

如:上面的例子

int main(){
    Shape *shape;
    Rectangle rec(10,7);
    Triangle tri(10,5);
    shape=&rec;
    cout<<shape->area()<<endl;
    shape=&tri;
    cout<<shape->area()<<endl;
}

输出

并不是想象中的两个面积,这是因为调用shape->area()是基类中的area()函数,这就是静态多态静态链接,函数调用在程序执行前就准备好了,也被称为早绑定,要解决这个问题,可以使用virtual修饰基类中的area()函数。

class Shape{
    protected:
        int width,height;
    public:
        Shape(int a=0,int b=0){width=a;height=b;}
        virtual int area(){
            cout<<"parent class area";
            return 0;
        }
};

输出

这样程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接

纯虚函数

如果定义虚函数=0,如virtual int area()=0;

那么这个函数就是一个纯虚函数,纯虚函数所在的类,只能被继承,不能用于实例化,类似java中的抽象类

如:

posted @   Tenerome  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示