码迷,mamicode.com
首页 > 编程语言 > 详细

C++多态性——函数的覆盖和隐藏

时间:2015-09-19 21:00:20      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

 

1、函数的覆盖

覆盖的条件:

  •  基类函数必须是虚函数(使用Virtual关键字进行声明);
  •  发生覆盖的两个函数必须分别位于派生类和基类中;
  •  函数名称与参数列表必须完全一样;

2、函数的隐藏

隐藏,是指派生类中具有与基类同名的函数(不考虑参数列表是否一样),从而派生类中隐藏了基类的同名函数

隐藏的两种情况:

① 派生类的函数与基类的函数完全相同(函数名和参数列表都相同),只是基类的函数没有使用virtual关键字。

② 派生类的函数和基类的函数同名,但参数列表不一样,在这种情况下,不管基类的函数声明是否有virtual关键字,基类的函数都将被隐藏。(注意这种情况与函数重载的区别,重载发生在同一个类中)

3、EXVC++深入详解p54

#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();

}

运行结果:

技术分享

 

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

 

C++多态性——函数的覆盖和隐藏

标签:

原文地址:http://www.cnblogs.com/mzct123/p/4822057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!