C++ 函数覆盖和隐藏

原创 2012年03月28日 10:11:55

原则:

成员函数被重载的特征:相同的范围(在同一个类中);函数名字相同;参数不同;

覆盖是指派生类函数覆盖基类函数,特征是:不同的范围(分别位于派生类与基类);函数名字相同;参数相同;基类函数必须有virtual关键字。

隐藏分两种情况:一种是,派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏。另一种是,派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏。

-----------------------------------------------------------------------------

#include "stdafx.h"

#include <iostream>
using namespace std;
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<<"Drived::xfn(int i)"<<endl;}


void yfn(int c) //隐藏了基类的yfn函数
{cout<<"Drived::yfn(int c)"<<endl;}


void zfn() //隐藏了基类的zfn函数
{cout<<"Drived::zfn()"<<endl;}
};


int _tmain(int argc, _TCHAR* argv[])
{
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();
getchar();
return 0;

}

输出:

Drived::xfn(int i)

Drived::xfn(int i)

Base::yfn(float f)

Drived::yfn(int c)

Base::zfn()

Drived::zfn()

c++的重载、覆盖和遮蔽(隐藏)

C++的重载、覆盖和遮蔽(隐藏) 为了说明这三者的区别,引入函数签名的概念 函数签名主要包括1、函数名;2、参数的个数、数据类型和顺序 但是注意,函数签名不包括返回值 1、重载 在同一个类中...
  • wanghuiqi2008
  • wanghuiqi2008
  • 2014年06月04日 19:10
  • 2341

C++中重载、重写(覆盖)和隐藏的区别

如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数有virtual关键字。此时,基类的函数不会被“隐藏”。(在这里,你要理解为覆盖哦^_^) 隐藏”是指派生类的函数屏蔽了与其同名的基类...
  • zx3517288
  • zx3517288
  • 2015年10月08日 18:33
  • 4365

面向对象中的重载、覆盖和隐藏

1.重载是一个类内部实现相同机理的操作,但是操作的对象不同。主要体现在:  方法在同一个类中重载的方法名称相同参数不同(参数的类型不同,参数的个数不同)virtual关键字可有可无    ...
  • longshengguoji
  • longshengguoji
  • 2013年12月30日 23:27
  • 6656

C++中函数重载、隐藏、覆盖和重写的区别 转自:http://www.bijishequ.com/detail/277975?p=

代码编译运行环境:VS2012+Debug+Win32 1.函数重载(Function Overload) 1.1定义 C++规定在同一作用域中,同名函数的形式参数(指参数的个数...
  • s1107917238
  • s1107917238
  • 2017年12月12日 11:24
  • 49

C++成员函数的重载,继承,覆盖和隐藏

一、 C++成员函数的重载 C++中的成员函数有四种,分别是普通成员函数,virtual虚函数,const成员函数。 (1) void func(int a); (2) virtual void...
  • zgh1988
  • zgh1988
  • 2013年05月10日 16:31
  • 1503

C++ 类成员函数重载(overload), 覆盖、重写(overrider), 隐藏(hidden)

成员函数的重载、覆盖与隐藏 成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚 概念,否则错误将防不胜防。 8.2.1 重载与覆盖 成员函数被重载的特征: (...
  • shejiannan
  • shejiannan
  • 2013年05月08日 18:00
  • 656

关于C++类成员函数的重载、覆盖、隐藏与virtual关键字

1. 重载、覆盖与隐藏 1).重载:成员函数具有以下的特征时发生“重载” A.相同的范围(同一个类中) B.函数的名字相同 C.参数类型不同(不能进行隐式类型转换) D.Virtual关键字...
  • gxut555
  • gxut555
  • 2012年08月25日 12:25
  • 662

浅谈 C++中成员函数的重载、覆盖和隐藏

C++是强大的,stl库简直就是人类智慧的结晶;C++是复杂的,在此之前我都不敢说熟悉C++,对于那些在程序中只用了cin、cout就说他的那是C++代码的程序员们,我感到很好笑。  现在谈谈C...
  • zhang1990214
  • zhang1990214
  • 2015年04月02日 14:31
  • 352

C++类类型成员函数的重载、覆盖与隐藏

C++类类型成员函数的重载、覆盖与隐藏,易混淆知识点。
  • kekong0713
  • kekong0713
  • 2017年03月21日 12:32
  • 372

C/C++日常学习总结(第六篇)多基派生引起的虚函数访问二义性问题&重载,覆盖,隐藏的区别

1.构造函数和析构函数的调用顺序? 析构函数为什么要虚拟?
  • wu_123_456
  • wu_123_456
  • 2014年04月25日 16:28
  • 981
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ 函数覆盖和隐藏
举报原因:
原因补充:

(最多只允许输入30个字)