C++基础学习笔记

ぐ巨炮叔叔 提交于 2020-03-30 17:19:57

  虚函数:虚函数是动态绑定的基础。虚函数必须是非静态的成员函数,虚函数经过派生后在类族中就可以实现运行过程中的多态。

  根据类型兼容原则,可以使用派生类的对象代替基类对象。如果用基类类型的指针指向派生类对象,就可以通过这个指针来访问该对象,问题是访问到的只是从基类中继承来的同名函数。解决办法:若需要通过基类指针指向派生类对象,并且访问某个与基类同名的成员,首先在基类中将该同名函数声明为虚函数。如此,通过基类类型的指针,就可使属于不同派生类的不同对象产生的不同的行为,从而实现运行过程的多态。

  虚函数在类的定义中使用virtual关键字来限定成员函数。注:虚函数声明只能出现在类定义中的函数原型声明中,而不能在成员函数实现的时候。

  运行时多态需满足三个条件:1、类之间满足类型兼容原则。2、要声明虚函数。3、由成员函数来调用或通过指针、引用来访问虚函数

 

#include <iostream>
using namespace std;

class B0
{
    public:
        virtual void display(){cout << "B0::display()" <<endl;}
};

class B1:public B0
{
    public:
        void display(){cout << "B1::display()" <<endl;}
};

class D1:public B1
{
    public:
        void display(){cout << "D1::display()" <<endl;}
};

void fun(B0 *ptr)
{
    ptr->display();
}

int main()
{
    B0 b0,*p;
    B1 b1;
    D1 d1;
    
    p = &b0;
    fun(p);
    p = &b1;
    fun(p);
    p = &d1;
    fun(p);
}

 

 Note:在重写继承来的虚函数时,如果函数由默认参数值,不可重新定义不同的值。原因:虽然虚函数是动态绑定的,但默认形参值是静态绑定的。也即,通过一个指向派生类对象的基类指针,可以访问到派生类的虚函数,但默认形参值却只能来自基类的定义。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!