多态

作者: 杰米 | 来源:发表于2016-09-12 20:01 被阅读10次
    #include<iostream>
    using namespace std;
    class B0//基类BO声明
    {
    public://外部接口
    virtual void display()//虚成员函数
    {
        cout<<"B0::display0"<<endl;}
    };
    class B1:public B0//公有派生
    {
    public:
        void display() { cout<<"B1::display0"<<endl; }
    };
    class D1: public B1//公有派生
    {
    public:
        void display(){ cout<<"D1::display0"<<endl; }
    };
    void fun(B0 ptr)//普通函数
    {
        ptr.display();
    }
    int main()//主函数
    {
        B0 b0;//声明基类对象和指针
        B1 b1;//声明派生类对象
        D1 d1;//声明派生类对象
        fun(b0);//调用基类B0函数成员
        fun(b1);//调用派生类B1函数成员
        fun(d1);//调用派生类D1函数成员
    }
    
    

    输出B0::display() B0::display() B0::display()

    解释

    • 这里使用的不是按地址传递,这样会转化为基类对象,直接调用基类的成员函数,如果是指针传递,改为B0 *ptr,ptr->display(),可以实现多态

    • 虚函数的动态绑定仅在 基类指针或引用绑定派生类对象时发生 ,fun的形参不是指针,所以调用哪个版本的函数编译时就已经确定,根据形参静态类型确定调用B0的成员。

    相关文章

      网友评论

          本文标题:多态

          本文链接:https://www.haomeiwen.com/subject/hanpettx.html