概念

多态:不同对象进行相同操作或行为而产生的不同的结果或状态

虚函数

虚函数是定义在基类中的函数,派生类必须对其进行覆盖,在类中声明虚函数的格式如下:

virtual void my_virtual_func();

虚函数是多态的基础,有虚函数才能构成多态

构成多态的条件

1.必须存在继承关系

2.继承关系中必须有同名的虚函数,并且是覆盖关系

3.存在基类的指针,通过该指针调用虚函数

namespace virtual_func_demo {
    class Base {
    public:
        virtual void func1();//virtual关键字只需要体现在父类中
        virtual void func1(int);
    };
    void Base::func1() {
        cout << "void Base::func1" << endl;
    }
    void Base::func1(int) {
        cout << "void Base::func1(int)" << endl;
    }
    class pais:public Base {
    public:
        void func1();
        void func1(int);
        //void func1(char *str);
    };
    void pais::func1() {
        cout << "void pais::func1()" << endl;
    }
    void pais::func1(int) {
        cout << "void pais::func1(int)" << endl;
    }
    //向派生类增加新的成员时会报错
    //void pais::func1(char *str) {
    //    cout << "compile error " << endl;
    //}
}
void main() {
    virtual_func_demo::
    Base base;
    base.func1();
    base.func1(2);
    virtual_func_demo::pais pp;
    pp.func1(); pp.func1(8);
    system("pause");
    return;
}

注意:多态中不能新增基类中没有的成员

纯虚函数

在基类中不能对虚函数给出有意义的实现,但又要便于派生类中重新定义该函数,此时可以使用虚函数

namespace pure_virtual_func {
    class hi {
    public:
        virtual void my_pure_func() = 0;
    };
}

=0告诉编译器该虚函数是纯虚函数,在基类中没有具体实现