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;//不需要写实现了

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

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

  • 相关阅读:
    维护keepalived与mysql漂移脚本
    Linux限制普通用户只能使用某命令
    Android的AlertDialog详解
    android:传感器的使用
    android:wifi
    android: 使用Canvas 绘图
    在 Eclipse 中 配置 tomcat
    android:AIDL
    android之Service 深入剖析
    广播发送者与广播接收者
  • 原文地址:https://www.cnblogs.com/Kinghao0319/p/14406428.html
Copyright © 2011-2022 走看看