多态与虚函数的使用

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

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

多态的实现的前提:

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
    评论
好的,我可以为您介绍一下关于C++中多态虚函数的实验。 首先,多态是指不同对象以不同的方式响应相同的消息的能力。在C++中,通过虚函数来实现多态虚函数是指在基类中被声明为虚函数的函数,在派生类中被重写后,在程序中使用基类指针或引用调用该函数时,会调用派生类中的函数。 下面是一个简单的多态虚函数的实验示例: ```c++ #include<iostream> using namespace std; class Shape { public: virtual void draw() { cout << "Drawing Shape" << endl; } }; class Circle: public Shape { public: void draw() { cout << "Drawing Circle" << endl; } }; class Square: public Shape { public: void draw() { cout << "Drawing Square" << endl; } }; int main() { Shape *s; Circle c; Square sq; s = &c; s->draw(); s = &sq; s->draw(); return 0; } ``` 运行结果为: ``` Drawing Circle Drawing Square ``` 在上述示例中,我们定义了一个基类Shape和两个派生类Circle和Square,分别重写了基类的虚函数draw()。在程序中,我们先定义了一个基类指针s,然后将其指向第一个派生类对象c,再调用s的虚函数draw(),此时会调用派生类Circle的draw()函数,因为指针实际上指向的是Circle类型的对象。接着,我们将指针s重新指向第二个派生类对象sq,再次调用s的虚函数draw(),此时会调用派生类Square的draw()函数。 通过这个实验,我们可以看到多态虚函数的特性,即通过基类指针或引用调用虚函数时,会根据实际对象的类型来调用相应的派生类函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值