zoukankan      html  css  js  c++  java
  • C++ 多态

    1. 在C++中,使用父类引用指向子类对象时,如果执行的函数是普通函数,则属于地址早绑定,即使传入的是子类的对象,也会执行父类的方法!

    class Animal{
    public:
        void speak(){
            cout<<"Animal!"<<endl;
        }
    };
    class Cat :public Animal{
        void speak(){//不会被执行
            cout<<"Cat!"<<endl;
        }
    };
    void doSpeak(Animal &animal){
        animal.speak();//地址早绑定
    }
    int main(){
        Cat cat;
        doSpeak(cat);//输出"Animal!"
        return 0;
    }

    2. 为了实现地址晚绑定,也就是能执行子类的方法,应把父类的方法置为虚函数,在父类方法上使用virtual关键字

    class Animal{
    public:
        virtual void speak(){//virtual关键字,变为虚函数
            cout<<"Animal!"<<endl;
        }
    };
    class Cat :public Animal{
        virtual void speak(){
            cout<<"Cat!"<<endl;
        }
    };
    void doSpeak(Animal &animal){
        animal.speak();//执行时动态绑定
    }
    int main(){
        Cat cat;
        doSpeak(cat);//输出"Cat!"
        return 0;
    }

    C++多态条件:有继承,子类重写父类虚函数

    3. 虚函数表

    4. 纯虚函数

    通常父类实现的虚函数内容是不需要的,因此可以把虚函数改成纯虚函数

    virtual void speak()=0;//不需要写实现了

    当类中有了纯虚函数,它就成了抽象类,它就不能实例化对象了。

    子类也必须重写父类的纯虚函数,否则不能实例化对象。

  • 相关阅读:
    Docker理解
    提高服务器并发量,有关系统配置的常规方法
    Linux EXT 文件系统 详解
    jvm入门
    2020-1-08.运维面试题总结
    hexo+gitee
    rsync
    haddop3.2.1完全分布式安装
    zabbix02
    zabbix监控工具问题集
  • 原文地址:https://www.cnblogs.com/Kinghao0319/p/14406428.html
Copyright © 2011-2022 走看看