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++继承中覆盖和隐藏基类成员变量或成员函数

覆盖 如果派生类覆盖了基类中的成员函数或成员变量,则当派生类的对象调用该函数或 变量时是调用的派生类中的版本,当用基类对象调用该函数或变量时是调用的基类中的版本。 隐藏 看下边这个例子,B...
  • pzw0416
  • pzw0416
  • 2012年03月27日 16:57
  • 4665

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

1.构造函数和析构函数的调用顺序? 析构函数为什么要虚拟?

C++中成员函数的重载,覆盖和隐藏的区别

成员函数的重载,覆盖,和隐藏很容易混淆 成员函数的重载: 1.  必须在同一作用域内 2.  函数名字相同 3.  参数列表不同(包括参数个数, 参数类型或者顺序不同) 不受virtual的...

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

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

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

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

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

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

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

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

c++ 成员函数的重载、覆盖与隐藏

转自:http://www.cnblogs.com/qlee/archive/2011/07/04/2097055.html 成员函数的重载、覆盖与隐藏 成员函数的重载、覆盖(ov...

关于c++面向对象重债覆盖隐藏和虚函数表

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...

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

C++类类型成员函数的重载、覆盖与隐藏,易混淆知识点。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ 函数覆盖和隐藏
举报原因:
原因补充:

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