C++基础学习笔记

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

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

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

原文地址:https://www.cnblogs.com/CoolRandy/p/3131242.html