C++中的隐藏规则

C++中的隐藏规则

如果派生类的函数与基类的函数同名,但是参数不同,此时,无论有无virtual关键字,基类的函数将被隐藏(重载是一个类中有同名的函数)
如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字,此时,基类的函数被隐藏(覆盖是指基类函数有virtual关键字)
    #include <iostream>
    using namespace std;
    class Base{
    public:
        virtual void f(float x)
        {
            cout<<"Base::f(float) "<<x<<endl;
        }
        void g(float x)
        {
            cout<<"Base::g(float) "<<x<<endl;
        }
        void h(float x)
        {
            cout<<"Base::h(float) "<<endl;
        }
    };
    class Derived:public Base
    {
    public:
        void f(float x)
        {
            cout<<"Derived::f(float) "<<x<<endl;
        }
        void g(int x)
        {
            cout<<"Derived::g(int) "<<x<<endl;
        }
        void h(float x)
        {
            cout<<"Derived::h(float)"<<endl;
        }
    };

    int main()
    {
    Derived d;
    Base *pb=&d;
    Derived *pd=&d;

    pb->f(3.14f);
    pd->f(3.14f);

    pb->g(3.14f);
    pd->g(3.14f);

    pb->h(3.14f);
    pd->h(3.14f);

        return 0;
    } 

这里写图片描述
运行结果如上图所示,正常情况下,pb和pd指向相同的内存,所得的结果应该是相同的,但由于函数隐藏的结果,派生类的执行结果是派生类

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章