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指向相同的内存,所得的结果应该是相同的,但由于函数隐藏的结果,派生类的执行结果是派生类

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值