多态与虚函数的使用

注意:本文中提到的所有方法都指的是同名,同返回类型,同参数类型的方法

多态:同一方法可以处理多种调用该方法的对象(即一个接口,多种实现)

多态的实现的前提:

1.多态得存在于继承体系中

class base
{
public:
    void show()
    {
        cout<<"this is base show!"<<endl;
    }
};
class D : public base    //继承关系
{
public:
    void show()
    {
        cout<<"this is D show!"<<endl;
    }
};

void main()
{
    D d; 
    base *p = &d;  //p只能指向父类的函数和数据
    p->show();  //此时show是父类中的show函数
}

2.多态的实现必须存在虚拟(virtual)关键字
若该方法在类外实现,则不用加关键字virtual
例如:

    class base
    {
    public:
         virtual void show()    //加入virtual关键字使得子类虚拟继承父类,但实际上子类并不能调用此方法
        {
             cout<<"this is base show!"<<endl;
        }
    };

    class D : public base     //子类D继承父类base
    {
        void show()
        {
            cout<<"this is D show!"<<endl;
        }
    };
    void main()
    {
        D d;
        base *p = &d;
        p->show();   //此时show调用的是D中的show方法
    }

3.多态必须通过父类的引用或指针来实现

class base
{
public:
    void show()
    {
        cout<<"this is base show()!"<<endl;
    }
};

class D : public base
{  
public:     
    void show()
    {   
        cout<<"this is D show()!"<<endl;
    }
};

void main()
{
    D d;
    base *p = &d;    //通过指针实现多态
    p->show();

    base &q = d;
    q.show();       //通过引用实现多态
}

虚函数的定义格式:

virtual 返回类型 函数名(参数列表)
注意:
1.virtual仅用于类定义中,若在类外定义虚函数不可以加关键字virtual

 class base
 {
 public:
     virtual void show();  //虚函数的声明
 };
void base :: show()    //虚函数的定义(在类外定义无需加virtual关键字)
{
    cout<<"this is base show()!"<<endl;
}
            >2.当某个类的一个类成员函数为虚函数,则由该类派生出来的所有类中,该函数始终保持虚函数的特征
class base
{
public:
     virtual void show()
     {    
         cout<<"this is base show()"<<endl;
     }
};
class D : public base
{  
public:
    void show()
    {
        cout<<"this is D show()!"<<endl;
    }
};
class C : public D
{
public:
    void show()
    {
        cout<<"this is C show()!"<<endl;
    }
}

void main()
{
     C c;
     D *pd = &c;
     //因为D是base的派生类,base中的show是虚函数所以D中的也保持虚函数的特征
     pd->show();    //此时调用的是C中的show方法
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值