VC++深入详解笔记 函数的覆盖和隐藏

来源:互联网 发布:淘宝售假保证金 编辑:程序博客网 时间:2024/06/05 10:02

在子类中如果有对基类虚函数的覆盖定义,无论该覆盖定义是否有virtual关键字,都是虚函数

函数的覆盖是发生在派生类和基类之间,两个函数必须完全相同,并且都是虚函数。那么不属于这种情况的都是隐藏!!!!

#include<iostream.h>class Base{public:virtual void xfn(int i){cout<<"Base::xfn(int i)"<<endl;}void yfn(float f){cout<<"Base::yfn(float f)"<<endl;}void zfn(){cout<<"Base::zfn()"<<endl;}};class Derived:public Base{public:void xfn(int i)//覆盖了基类的xfn函数{cout<<"Derived::xfn(int i)"<<endl;}void yfn(int c)//隐藏了基类的yfn函数{cout<<"Derived::yfn(int c)"<<endl;}void zfn()//隐藏了基类的zfn函数{cout<<"Derived::zfn()"<<endl;}};void main(){Derived d;Base *pB=&d;Derived *pD=&d;pB->xfn(5);pD->xfn(5);pB->yfn(3.14f);pD->yfn(3.14f);pB->zfn();pD->zfn();}
运行结果如下图所示:

根据结果可以看出

1、派生类和基类的xfn()函数函数名称和参数列表都是一样的,并且都是虚函数,因此子类Derived的xfn()函数覆盖了基类Base的xfn()函数,所以结果都是Derived::xfn();

2、派生类和基类的yfn()函数不一样,并且基类并不是带有virtual关键词的虚函数,所以结果是各出各的;

3、派生类和基类zfn()函数一样,但是基类不是虚函数,所以结果也是各出各的。


0 0
原创粉丝点击